在远程桌面上运行时替代SendKeys?

Cam*_*ron 24 rdp remote-desktop sendkeys

我有一个应用程序通过SendKeys将键击注入应用程序.

不幸的是,当我通过远程桌面运行它时,应用程序将无法运行,因为众所周知的问题是SendKeys不能与远程桌面一起使用.

有没有人以前解决过这个问题,或者对如何解决这个问题有任何好的建议?

Mrc*_*ief 9

SendKeys不太合适主要是因为:

  • 它只能将密钥发送到活动/聚焦应用程序,因为活动应用程序可以在实际发送密钥的时间之间进行更改,因此无法保证其正常工作.
  • RDP和许多其他库(例如,DirectX)主要出于安全原因阻止它们.

更好的选择:

示例代码使用SendMessage:

HWND hwndNotepad = FindWindow(_T("Notepad"), NULL);
HWND hwndEdit = FindWindowEx(hwndNotepad, NULL, _T("Edit"), NULL);
SendMessage(hwndEdit, WM_SETTEXT, NULL, (LPARAM)_T("hello"));
Run Code Online (Sandbox Code Playgroud)

  • 对于具有增加的安全选项的RDP会话,模拟用户输入的唯一两种方法是编写驱动程序(https://msdn.microsoft.com/en-us/library/windows/hardware/hh439659%28v=vs.85%29 .aspx)这对C#开发人员来说很麻烦,或者使用SendInput,它确实可以正常工作!我建议使用库http://inputsimulator.codeplex.com/但要小心使用InputSimulator.SimulateTextEntry("text"); 而不是InputSimulator.SimulateKeyDown(VirtualKeyCode.VK_B); (3认同)

小智 5

就我而言,我成功地将 WinAPI 的 SendInput 与硬件扫描代码结合使用。SendKeys 似乎错误地将字符映射到扫描代码。

  • +1 如果使用具有增强安全性的 RDP(禁用键盘等),这是最短且正确的答案。我推荐这个库:http://inputsimulator.codeplex.com/ 但要注意使用InputSimulator.SimulateTextEntry("text"); 而不是 InputSimulator.SimulateKeyDown(VirtualKeyCode.VK_B); (2认同)