2014-02-06 119 views
1

我需要一些在Citrix上運行的應用程序。我不希望整夜保持清醒。會話將超時,應用程序將被關閉。我不會說服管理員更改此應用程序的Citrix配置。防止Citrix會話超時

我正在嘗試創建應用程序,它會定期將鼠標或鍵盤事件發送到Citrix窗口。我已經有一個簡單的解決方案,點擊鼠標。

我希望有一個更好的解決方案,一切都將在後臺完成,事件將發送到Citrix窗口。任何想法如何實現?

我使用Windows和C#.NET。

謝謝你的幫助。

更新#1

我想,因爲它似乎是一個最好的選擇使用思傑實時監控API。我結束了這一點:

WFICALib.ICAClient ico = new WFICALib.ICAClient(); 
int enumHandle = ico.EnumerateCCMSessions();    
Console.WriteLine(ico.GetErrorMessage(ico.GetLastError())); 

不幸的是這將返回一個錯誤消息說:

實時監控是禁用

根據文檔它需要以下注冊表項進行設置到1:

「HKLM \ Software \ Citrix \ ICA Client \ CCM \ AllowLiveMonitoring(REG_DWO RD)「

問題是我無法在」HKLM \ Software \「中找到Citrix密鑰,如果我創建了這些密鑰和值,它也不起作用。我如何啓用Live Monitoring API?

+0

檢查這個問題的答案:http://stackoverflow.com/questions/8339565/send-mouse-keyboard-events – abhi

+0

我已經看到了。如果我沒有錯,只會在活動窗口中工作。 –

回答

0

我已經玩過發送輸入到其他窗口過去。我用類似如下:

[System.Runtime.InteropServices.DllImport("user32.dll")] 
    static extern bool SetCursorPos(int x, int y); 

    [System.Runtime.InteropServices.DllImport("user32.dll")] 
    private static extern void mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo); 

    private const int MOUSEEVENTF_LEFTDOWN = 0x02; 

    private const int MOUSEEVENTF_LEFTUP = 0x04; 

    private static void LeftMouseClick(Point point) 
    { 
     int xpos = (int)point.X; 
     int ypos = (int)point.Y; 
     if (SetCursorPos(xpos, ypos)) 
     { 
      mouse_event(MOUSEEVENTF_LEFTDOWN, xpos, ypos, 0, 0); 
      mouse_event(MOUSEEVENTF_LEFTUP, xpos, ypos, 0, 0); 
     } 
    } 

因此,爲了使這項工作你需要注入落在的Citrix Receiver窗口內的座標。我無法回想你是否有任何焦點/激活問題 - 我相信點擊注入應該讓這個窗口成爲焦點。我從來沒有做過任何特別嚴重的代碼,所以沒有保證。

+0

這是目前的解決方案,我正在尋找更好的解決方案。不需要citrix窗口的解決方案。 –