如何更改桌面?我有興趣將鼠標事件發送到winlogon桌面(我將在系統帳戶上運行該應用程序)。問題是,當我調用mouse_event(或任何其他函數(keybd_event,sendinput,sendkeys等)時,什麼也沒有發生) 即使我仍然在默認桌面上,也沒有任何反應 setthreaddesktop返回true,所以表示更改成功 我甚至試圖把一個消息具有相同的結果如何發送輸入到winlogon中c#
我創建了一個新的線程,因爲否則setthreaddesktop返回170錯誤代碼(在使用資源)
bool dd = false;
StringBuilder name = new StringBuilder(200, 200);
uint sss = 0;
IntPtr hDesktop = OpenInputDesktop(1, true, desktop_ReadObjects | desktop_WriteObjects);
System.Threading.Tasks.Task.Factory.StartNew(() =>
{ dd = SetThreadDesktop(hDesktop);
CloseDesktop(hDesktop);
bool get = GetUserObjectInformation(hDesktop, 2, name, 100, ref sss);
SendKeys.Send("X");
mouse_event(MOUSEEVENTF_LEFTDOWN, 400, 400, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 400, 400, 0, 0);
mouse_event(MOUSEEVENTF_RIGHTDOWN, 400, 400, 0, 0);
mouse_event(MOUSEEVENTF_RIGHTUP, 400, 400, 0, 0);
}).Wait();
編輯:如果我不使用SetThreadDesktop mouse_event正在工作
謝謝,
我對此有兩個想法: 1)系統帳戶可能是非交互式的(它沒有鼠標) 2)Winlogon可能是安全關鍵的,所以你不應該混淆它。 你甚至想要歸檔什麼? – TGlatzer
當我在默認桌面上時,會發生同樣的事情。我會理解,如果只是在Winlogon桌面上的情況,但事實並非如此。 – mertin
你爲什麼要切換用戶?如果您需要以另一個用戶身份運行進程,則可以使用「runas」命令。 – Robert