我正在尝试向运行在远程桌面会话中的应用程序发送假键盘输入。我在用:
Byte key = Ord("A");
keybd_event(key, 0, 0, 0); // key goes down
keybd_event(key, 0, KEYEVENTF_KEYUP, 0); // key goes up
现在,这段代码确实将字符"a“发送到任何本地窗口,但它不会发送到远程桌面窗口。
这意味着我使用远程桌面连接到服务器,然后在该服务器上打开记事本。如果我手动敲击键盘上的键:它们会出现在记事本的编辑器窗口中。但是keybd_event的假键盘输入不会导致“a”出现在记事本中。
如何从运行在本地计算机上的应用程序中,以编程方式向运行在远程桌面连接中的应用程序发送假键盘输入?
Nitpickers
在这种情况下,我想这样做,因为我试图击败空闲超时。但我也可以试着
换句话说,我想要的理由并不重要
注意:超时可能来自远程桌面的不活动,也可能不是。我不知道,也不影响我的问题。
发布于 2008-12-05 21:54:56
回答
虽然Microsft说你不需要,你不应该,发送OEM代码,你需要发送OEM扫描代码。在这个例子中,我需要发送OEM扫描代码
有一个CodeProject上图表的图片列出了各种键的生成和中断扫描代码:
在我的例子中,对keybd_event的原始调用需要更改为:
Byte key = Ord("A");
keybd_event(key, 0x1E, 0, 0); // key goes down
keybd_event(key, 0x9E, KEYEVENTF_KEYUP, 0); // key goes up
我测试过这个,它很管用。所以一切都很好。
发布于 2008-12-05 21:16:29
也许您可以使用PsExec执行一个PsExec脚本,这是一种轻量级的telnet替换,允许您在其他系统上执行进程,完成控制台应用程序的完全交互性,而无需手动安装客户端软件。
(AutoIt非常能够向任何窗口应用程序发送任何信号(键或其他信号),并且可以在远程桌面上使用PsExec启动)
例如,像AutoIt脚本KillSaver这样的脚本被设计用来移动鼠标以避免在计算机上延长空闲时间!
发布于 2010-02-25 06:49:38
效果很好谢谢。为了获得键盘扫描代码,可以使用:
int scan;
scan = MapVirtualKey(key & 0xff, 0);
keybd_event(key, scan, 0, 0); // key goes down
keybd_event(key, scan | 0x80, KEYEVENTF_KEYUP, 0); // key goes up
https://stackoverflow.com/questions/345147
复制相似问题