Citrix ターミナル サービス セッションへの接続方法およびライセンス セットアップにより、次のダイアログボックスの両方またはいずれかが表示されます。
これらのダイアログ ボックスは情報であり、最初にターミナル サービス セッションにログインしたときに表示される場合と表示されない場合があります。これらのダイアログ ボックスの処理方法には、次の 2 つがあります。
この解決策では、ダイアログ ボックスが表示された場合にそのダイアログ ボックスを処理する割り込みを作成します。
transaction TMain
var
begin
CitrixInit(800, 600);
CitrixAddInterrupt(INTERRUPT_WindowCreate, "ICA Seamless Host Agent", MATCH_Exact);
CitrixConnect("lab74", "labadmin", "labpass", "testlab1", COLOR_16bit);
CitrixWaitForLogon();
hWnd4 := CitrixWaitForWindowCreation("", MATCH_Exact, 0x96840000, -2, 572, 804, 30);
CitrixWaitForWindowCreation("Program Manager");
CitrixMouseClick(36, 17, hWnd4, MOUSE_ButtonLeft, MOD_None, -1, 0);
hWnd11 := CitrixWaitForWindowCreation("", MATCH_Exact, 0x96400000, 2, 313, 163, 263);
CitrixMouseClick(62, 247, hWnd11, MOUSE_ButtonLeft);
CitrixWaitForWindow(hWnd11, EVENT_Destroy);
hWnd12 := CitrixWaitForWindowCreation("Shut Down Windows", MATCH_Exact, 0x94C808CC, 191, 136, 417, 192);
CitrixWaitForWindow(hWnd12, EVENT_Activate);
CitrixMouseClick(203, 170, hWnd12, MOUSE_ButtonLeft);
CitrixWaitForDisconnect();
end TMain;
dclevent
handler Handler1 <EVENT_CITRIXINTERRUPT>
var
nInterrupt, nWindow : number;
nStyle : number;
begin
CitrixGetActInterrupt(nInterrupt, nWindow);
ErrorAdd(FACILITY_CITRIXENGINE, 47, SEVERITY_INFORMATIONAL);
print(string(nWindow));
if CitrixGetWindowStyle(nWindow, nStyle) and (nStyle <> 0xB4000000) then
CitrixWaitForWindow(nWindow, EVENT_Activate);
CitrixMouseClick(201, 202, nWindow, MOUSE_ButtonLeft);
CitrixWaitForWindow(nWindow, EVENT_Destroy);
end;
ErrorRemove(FACILITY_CITRIXENGINE, 47);
end Handler1;
このサンプル コードは、Citrix ダイアログ ボックスが表示されるまで 30 秒間ループします。ダイアログ ボックスが表示されると、このコードによりダイアログ ボックスが閉じられます。
function MyCitrixStartup(nMaxWait: number optional): boolean
var
hwndICAHandle : number;
hwndFoundLicenseWarning : number;
nCount : number;
begin
hwndICAHandle:=-1;
hwndFoundLicenseWarning:=-1;
nCount:=0;
if (nMaxWait = 0) then
nMaxWait:=10;
// if no wait time was passed,
// use 10 tries (seconds) as a default
end;
MeasureStart("MyCitrixStartup");
//
// loop until we've handled the conditions or we've tried
//
while ((nCount < nMaxWait) and ((hwndICAHandle <=0) or
(hwndFoundLicenseWarning <=0))) do
//
// Just a little feedback, every 10 tries
//
if ((nCount MOD 10) =0) then
print(string(nCount) + ")MyCitrixStartup "
+ " vUser:" + string(GetUserId())
+ " hwndICAHandle=" + string(hwndICAHandle)
+ " hwndFoundLicenseWarning="
+ string(hwndFoundLicenseWarning),
OPT_DISPLAY_ERRORS , TEXT_GREEN );
end;
//
// if we haven't handled this window yet
//
if (hwndICAHandle <=0) then
hwndICAHandle := CitrixWaitForWindowCreation
("ICA Seamless Host Agent", MATCH_Exact, 0x94C800C4,
0, 0, 0, 0, false, 1, true);
if (hwndICAHandle > 0) then
if (CitrixWindowBringToTop(hwndICAHandle)) then
CitrixKey(KEY_ENTER); // press ok to close the dialog
CitrixWaitForWindow(hwndICAHandle, EVENT_Destroy);
// wait for the close
end; // end waiting for window to top
end; // end if we have a valid handle
end; // if window has not been found yet
if (hwndFoundLicenseWarning <=0) then
hwndFoundLicenseWarning := CitrixWaitForWindowCreation
("Citrix License Warning Notice", MATCH_Exact, 0x94C800C4,
0, 0, 0, 0, false, 1, true);
if (hwndFoundLicenseWarning > 0) then
if (CitrixWindowBringToTop(hwndFoundLicenseWarning)) then
CitrixKey(KEY_ENTER); // Press ok
CitrixWaitForWindow(hwndFoundLicenseWarning,
EVENT_Destroy);
// wait for it to go away
end; // end waiting for window to top
end; // end if we have a valid handle
end; // if window has not been found yet
nCount :=nCount+1;
Wait 1.0;
end; // while nCount
MeasureStop("MyCitrixStartup");
//
// return true if we handled any one of these conditions
//
MyCitrixStartup2 := (hwndFoundLicenseWarning > 0)
or (hwndICAHandle > 0) ;
print("MyCitrixStartup "
+ " vUser:" + string(GetUserId())
+ " Waited " + string(nCount) + " of " + string(nMaxWait)
+ " hwndICAHandle=" + string(hwndICAHandle)
+ " hwndFoundLicenseWarning=" + string(hwndFoundLicenseWarning),
OPT_DISPLAY_ERRORS , TEXT_GREEN );
end MyCitrixStartup;