Citrix ダイアログ ボックスを処理する

Citrix ターミナル サービス セッションへの接続方法およびライセンス セットアップにより、次のダイアログボックスの両方またはいずれかが表示されます。

これらのダイアログ ボックスは情報であり、最初にターミナル サービス セッションにログインしたときに表示される場合と表示されない場合があります。これらのダイアログ ボックスの処理方法には、次の 2 つがあります。

Citrix ダイアログ ボックスを処理する (解決策 1)

この解決策では、ダイアログ ボックスが表示された場合にそのダイアログ ボックスを処理する割り込みを作成します。

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 ダイアログ ボックスを処理する (解決策 2)

このサンプル コードは、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;