我试图发送虚假的键盘输入应用程序的运行在一个偏远的桌会议。我是使用:

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是假的键盘输入不造成"一"'s出现在记事本。

我怎么能programtically发送虚假的键盘输入到一个运行的应用程序内部的一个偏远的桌面连接,从上运行的应用程序的当地机?


Nitpickers角

在这一特定情况下,我想这么做因为我想要打败一个空闲的超时。但是我可以只是试图

  • 执行UI自动化测试
  • UI压力测试
  • UI测试故障寻找
  • UI单元的测试
  • UI数据输入测试
  • UI漆测试
  • 或UI强度的测试。

换句话说,我的理由希望这不重要

注: 超时可从遥远的桌面上的活动,或者也许不是.我不知道,这不会影响我的问题。

有帮助吗?

解决方案

答案

虽然Microsft说你不需要, 你不应该, 发送的OEM代码,你需要送OEM扫描码。在这个例子,我需要送OEM码扫描

  • 关键一下
  • 关键的一个上升

还有一个 图片图上演示 列出和打扫描代码的各项:

alt text

在我的情况下,将原来的电话到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

我测试了这个,它的工作。所以一切都很好。

其他提示

可能是你可以执行的一个 autoit 脚本 PsExec, 光量的远程登录替换该可以让你执行进程的其他系统,完成全面的交互性对于控制台应用程序,而不必手动安装客户软件。

(AutoIt是相当的能力来发送的任何信号(键的或其他的)以任何窗口的应用程序,并且可以发起与PsExec遥桌面)

一个AutoIt脚像 KillSaver, 例如,设计成移动鼠标,以避免任何延长的空闲时间的计算机上!

这个工作非常好,谢谢你。为了获得键盘扫描一个代码可以使用:

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

你可以用图();这真是一个更好的模拟器键。好了,祝你好运!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top