11.01.2015 Views

シームレスアプリケーションプログラミングガイド 1 - Citrix Knowledge ...

シームレスアプリケーションプログラミングガイド 1 - Citrix Knowledge ...

シームレスアプリケーションプログラミングガイド 1 - Citrix Knowledge ...

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

シームレスアプリケーションプログラミングガイド<br />

[タイトル]<br />

シームレスアプリケーションプログラミングガイド<br />

[ 概 要 ]<br />

この 文 書 では、シームレス <strong>Citrix</strong> 環 境 におけるアプリケーション 関 連 の 問 題 のトラブルシューティングに<br />

役 立 つように、アプリケーション 開 発 者 の 視 点 からアプリケーション 開 発 における 一 般 的 な 推 奨 事 項 を<br />

説 明 します。<br />

[ 対 象 ]<br />

この 文 書 では、アプリケーション 開 発 者 、<strong>Citrix</strong> サーバーの 管 理 者 、ヘルプデスク 担 当 者 などの 業 務 に<br />

従 事 するユーザーを 対 象 としています。また、この 文 書 では、ターミナルサービス 環 境 におけるアプリ<br />

ケーションの 互 換 性 については 説 明 していません。ターミナルサービス 環 境 におけるアプリケーション<br />

の 互 換 性 について 詳 しくは、Microsoft の 次 の 文 書 を 参 照 してください。<br />

http://msdn2.microsoft.com/ja-jp/library/aa383490(en-us).aspx<br />

この 文 書 の 一 部 の 内 容 では、ウィンドウの 作 成 、Windows メッセージ、イベント、API(Application<br />

Programming Interface)などの Windows 上 のプログラミングに 関 する 知 識 が 必 要 になります。<br />

ウィンドウ 処 理 については、MSDN の 次 の Web ページに 参 考 になる 多 くの 文 書 が 公 開 されています。<br />

http://msdn2.microsoft.com/ja-jp/library/ms632595(en-us).aspx<br />

[ 背 景 ]<br />

ここでは、シームレスアーキテクチャのいくつかの 特 性 について 説 明 します。<br />

図 1 は、アプリケーションウィンドウとシームレスサブシステム 間 の 双 方 向 の 安 定 した 通 信 フローを 示 し<br />

ています。アプリケーションウィンドウへの 情 報 は Windows メッセージや API の 形 式 で 送 信 されます。<br />

アプリケーションウィンドウからのメッセージは Microsoft Active Accessibility フックによって 生 成 され、<br />

メモリマップトファイルとイベントを 介 してシームレスサブシステムに 送 信 されます。<br />

[ 関 連 情 報 ]<br />

この 資 料 は 米 国 の <strong>Citrix</strong> <strong>Knowledge</strong> Base で 提 供 している 情 報 をもとに 作 成 したものです。<br />

Document ID: CTX115635<br />

1


シームレスアプリケーションプログラミングガイド<br />

図 1:<br />

トップレベルウィンドウ:<br />

シームレスサブシステムはトップレベルウィンドウとのみ 通 信 し、MDI(Multiple-document Interface)<br />

子 ウィンドウやツールバーアイコンといったそのほかの 種 類 のウィンドウとは 通 信 しません。 通 常 シー<br />

ムレスサブシステムは、EnumWindows WIN32 API で 取 得 したトップレベルウィンドウと 通 信 し、 親 /<br />

オーナーウィンドウを 持 たないタイプのウィンドウとは 通 信 しません。<br />

Active Accessibilityフック:<br />

シームレスサブシステムは Microsoft Active Accessibility の 機 能 を 利 用 します。アプリケーションのトッ<br />

プレベルウィンドウで 以 下 のいずれかのイベントが 発 生 すると、シームレスサブシステムに 通 知 が 届 き<br />

ます。<br />

• EVENT_OBJECT_SHOW<br />

ウィンドウが 可 視 ウィンドウになった(ウィンドウ 作 成 後 を 含 む)<br />

WIN32 API:CreateWindow(Ex)、ShowWindow<br />

• EVENT_OBJECT_DESTROY<br />

ウィンドウが 破 棄 された<br />

WIN32 API:DestroyWindow<br />

• EVENT_SYSTEM_FOREGROUND<br />

ウィンドウがフォアグラウンド 表 示 になった<br />

WIN32 API:SetForegroundWindow、SetActiveWindow<br />

• EVENT_OBJECT_LOCATIONCHANGE<br />

ウィンドウのサイズや 位 置 が 変 更 された<br />

WIN32 API:MoveWindow、SetWindowPos<br />

[ 関 連 情 報 ]<br />

この 資 料 は 米 国 の <strong>Citrix</strong> <strong>Knowledge</strong> Base で 提 供 している 情 報 をもとに 作 成 したものです。<br />

Document ID: CTX115635<br />

2


シームレスアプリケーションプログラミングガイド<br />

これらのイベントの 発 生 を 最 小 限 に 抑 えると、サーバーのスケーラビリティとアプリケーション 全 体 のパ<br />

フォーマンスが 向 上 します。<br />

Active Accessibility について 詳 しくは、Microsoft の 次 の 文 書 を 参 照 してください。<br />

http://msdn2.microsoft.com/en-us/library/ms697240.aspx<br />

Windowsシェルが 存 在 しない 場 合 :<br />

ICAシームレスセッション、ICA 固 定 ウィンドウセッション、およびRDPの「 開 始 プログラム」セッションは<br />

すべて、WindowsのスタートメニューやWindowsデスクトップシェルに 表 示 されないターミナルサービス<br />

デスクトップセッションです。これらの 種 類 のセッションでは、ほとんどのアプリケーションが 問 題 なく 動<br />

作 します。しかし、 特 定 のAPIを 呼 び 出 すアプリケーションやWindowsシェルに 部 分 的 に 依 存 している<br />

アプリケーションでは、 問 題 が 発 生 することがあります。<br />

たとえば、エクスプローラのシェルGUIを 直 接 操 作 する 一 部 の 高 度 なシェルインターフェイスはサポート<br />

されていないため、シームレスセッションでは 外 観 が 変 わる 場 合 があります( 例 :タスクバーアイコンが<br />

表 示 されないなど)。<br />

このようなインターフェイスの 例 としては、 次 のものがあります。<br />

ITaskbarList http://msdn2.microsoft.com/en-us/library/ms631840.aspx<br />

ITaskbarList2 http://msdn2.microsoft.com/en-us/library/ms631834.aspx<br />

シームレスサブシステムは、 限 定 的 にシェルをサポートしています。<br />

この 限 定 的 なシェルサポート 機 能 は、 以 下 の 構 成 要 素 からなります。<br />

1. Shell_NotifyIcon<br />

2. SHAppBarMessage( 注 :この API は 現 時 点 では 完 全 にはサポートされていません)<br />

3. シェル 機 能 をサポートするウィンドウ( 通 常 エクスプローラデスクトップによって 作 成 されます)<br />

例 :<br />

[ 関 連 情 報 ]<br />

この 資 料 は 米 国 の <strong>Citrix</strong> <strong>Knowledge</strong> Base で 提 供 している 情 報 をもとに 作 成 したものです。<br />

Document ID: CTX115635<br />

3


シームレスアプリケーションプログラミングガイド<br />

マウスメッセージのポスト:<br />

ウィンドウの 移 動 時 やサイズ 変 更 時 には、アプリケーションにポストされる WM_MOUSEMOVE メッ<br />

セージが 一 切 生 成 されません。これは、これらのメッセージをキャッシュしてパフォーマンスを 向 上 させ<br />

るための、 仕 様 の 動 作 です。<br />

注 :これらのメッセージを 有 効 にするには、FORCE RAW MOUSE EVENTS TO SERVERという<br />

シームレスフラグを 設 定 します。<br />

ウィンドウスタイル:<br />

WS_POPUP スタイル、WS_VISIBLE スタイル、および WS_CLIPSIBLINGS スタイルのウィンドウは、<br />

デフォルトではバルーンポップアップとして 扱 われ、シームレスクライアントサブシステムはこれらのウィ<br />

ンドウの 親 ウィンドウをそれぞれの 隠 しウィンドウに 設 定 します。これにより、ウィンドウ 間 の 関 係 やタス<br />

クバーアイコンの 外 観 に 関 する 問 題 が 発 生 する 場 合 があります。<br />

[アプリケーションの 動 作 の 確 認 ]<br />

シームレス <strong>Citrix</strong> 環 境 でアプリケーションを 実 行 すると、ワークステーション 上 でそのアプリケーションを<br />

実 行 したときには 通 常 発 生 しないアプリケーション 自 体 に 関 する 問 題 が 明 らかになることがあります。<br />

どのような 動 作 が 発 生 するかは、 問 題 の 要 因 によって 変 わります。<br />

Windowsメッセージ:<br />

シームレスサブシステムは、アプリケーションがシームレスセッションで 実 行 されている 時 以 外 にはあま<br />

り 受 け 取 ることのない、 以 下 のようないくつかの Windows メッセージを 使 用 します。<br />

これらのメッセージがアプリケーションで 正 常 に 処 理 されない 場 合 、なんらかの 問 題 が 発 生 することが<br />

あります。またこれが 原 因 で、シームレスセッションでアプリケーションが 通 常 と 異 なる 動 作 を 示 す 場 合<br />

があります。<br />

たとえば、アプリケーションが WM_GETICON イベントを 受 け 取 ったときに、あるメモリ 割 り 当 てルーチ<br />

ンを、 対 応 するメモリ 解 放 ルーチンを 呼 び 出 さずに 使 用 する 場 合 、そのアプリケーションによってメモリ<br />

が 大 量 に 消 費 されることがあります。これにより、アプリケーションでエラーおよびアプリケーションのク<br />

ラッシュが 発 生 することがあります。<br />

[ 関 連 情 報 ]<br />

この 資 料 は 米 国 の <strong>Citrix</strong> <strong>Knowledge</strong> Base で 提 供 している 情 報 をもとに 作 成 したものです。<br />

Document ID: CTX115635<br />

4


シームレスアプリケーションプログラミングガイド<br />

アプリケーションウィンドウには、 関 連 付 けられているアイコンを 取 得 するために 次 のメッセージが 頻 繁<br />

に 送 信 されます。<br />

WM_QUERYDRAGICON<br />

WM_GETICON(ICON_BIGおよびICON_SMALL)<br />

注 :これらのメッセージは、 次 のシームレスフラグを 設 定 することで 無 効 にできます。<br />

SEND NO ICON CHANGES<br />

DISABLE WM_QUERYDRAGICON MESSAGES<br />

特 定 の 状 況 では、 以 下 のメッセージがポストされることがあります。<br />

WM_NULL:ウィンドウが 応 答 しているかどうかをチェックするために 使 用 されます。<br />

WM_CANCELMODE:SetForegroundWindowの 呼 び 出 しに 失 敗 したという 特 定 の 状 況 で 使<br />

用 されます。<br />

API:<br />

以 下 に、シームレスサブシステムによって 使 用 される、アプリケーションがほかのプロセスからはあまり<br />

受 け 取 ることのない Windows API を 示 します。<br />

これらのメッセージがアプリケーションで 正 常 に 処 理 されない 場 合 、 問 題 が 発 生 することがあります。こ<br />

れにより、アプリーケーションがシームレスセッションで 実 行 されている 場 合 に 通 常 と 異 なる 動 作 をする<br />

ことがあります。<br />

MoveWindow<br />

SetWindowPlacement<br />

SetForegroundWindow<br />

ShowWindow( hWnd, SW_RESTORE)<br />

SetWindowPos<br />

[ 追 加 情 報 ]<br />

<strong>Citrix</strong> <strong>Knowledge</strong> Centerの 文 書 CTX102584に 記 載 されているシームレスフラグに 関 する 設 定 を 使<br />

用 すると、アプリケーションをシームレスセッションで 実 行 する 場 合 の 特 定 の 動 作 を 変 更 することができ<br />

ます。<br />

[ 関 連 情 報 ]<br />

この 資 料 は 米 国 の <strong>Citrix</strong> <strong>Knowledge</strong> Base で 提 供 している 情 報 をもとに 作 成 したものです。<br />

Document ID: CTX115635<br />

5

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!