ã·ã¼ã ã¬ã¹ã¢ããªã±ã¼ã·ã§ã³ããã°ã©ãã³ã°ã¬ã¤ã 1 - Citrix Knowledge ...
ã·ã¼ã ã¬ã¹ã¢ããªã±ã¼ã·ã§ã³ããã°ã©ãã³ã°ã¬ã¤ã 1 - Citrix Knowledge ...
ã·ã¼ã ã¬ã¹ã¢ããªã±ã¼ã·ã§ã³ããã°ã©ãã³ã°ã¬ã¤ã 1 - Citrix Knowledge ...
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