我有一个应用程序,通过SendKeys向应用程序注入按键。
不幸的是,由于SendKeys无法在远程桌面中使用而导致该应用程序无法正常工作。
有人之前解决过这个问题吗?或者有什么好的建议可以解决它吗?
我有一个应用程序,通过SendKeys向应用程序注入按键。
不幸的是,由于SendKeys无法在远程桌面中使用而导致该应用程序无法正常工作。
有人之前解决过这个问题吗?或者有什么好的建议可以解决它吗?
SendKeys不是很适合的主要原因是:
更好的替代方案:
SendMessage
或 SendInput
使用SendMessage
的示例代码:
HWND hwndNotepad = FindWindow(_T("Notepad"), NULL);
HWND hwndEdit = FindWindowEx(hwndNotepad, NULL, _T("Edit"), NULL);
SendMessage(hwndEdit, WM_SETTEXT, NULL, (LPARAM)_T("hello"));
在我的情况下,我成功地使用了WinAPI的SendInput和硬件扫描码。看起来,SendKeys将字符映射到扫描码是错误的。
仅需注意的是,使用VNC时,要确保将桌面配置为在空闲或屏幕保护时不自动锁定,否则可能会停止发送按键和GUI自动化运行。屏幕保护和监视器节能是可以的,但不要自动锁定和密码保护。
注意:我不确定,但认为由于VNC中继的桌面“原样”,从应用程序/系统的角度来看,它与在本地执行相同,所以理论上它也能够欺骗不允许通过RDP发送按键的系统/应用程序。使用这种VNC方法进行AutoIt + SendKeys时,无论我是通过VNC实际连接还是断开连接(因为在实际桌面上,它仍然登录,只是VNC未激活),我都没有遇到问题。
System.Environment.GetEnvironmentVariable("SESSIONNAME").StartsWith("RDP-")