【问题标题】:Generating Mouse & Keyboard input from one application to another将鼠标和键盘输入从一个应用程序生成到另一个应用程序
【发布时间】:2012-01-22 04:56:17
【问题描述】:

我曾使用 win32 API 和 DirectX API 来解释来自用户的输入,但在生成与原始用户输入匹配的输入方面没有发现太多。

我的目标是制作一个在后台透明运行、最小化或在快速启动区域中运行的程序,并让该程序为第三方全屏应用程序人工植入键盘和鼠标输入。

我找到了一些用于验证哪个窗口具有焦点的命令,以及一些用于检查所述应用程序的进程名称或 ID 的代码示例,但在通过 directx 或其他任何东西生成输入以模拟合法输入时却没有那么多。

任何建议都将不胜感激,我希望它尽可能接近真实输入,以帮助促进自动化测试。

如果这个问题太笼统或“研究不足”,我提前道歉,我只是不太确定从哪里开始!

由于我熟悉这些语言,该程序将使用 C++ 或 C#。

【问题讨论】:

  • 查看黑客论坛 - 不是这个。
  • 请问?我不确定你的意思。为什么是“黑客论坛”?我想如果他们有信息,那很好,但你有没有想过?或链接?还是有别的看点?

标签: unit-testing input keyboard mouse


【解决方案1】:

我已经这样做了:

一个应用程序充当全局keyboard_hock,然后我确实将匹配模式发送到第二个应用程序,直接在内存中-我使用了All-in-one code framework示例中的示例,您可以下载,锁定CSFileMappingServer和CSFileMappingClient(获取/设置)从两个单独的进程中记忆。以及用于捕获全局键盘事件的 CSWindowsHook 项目

我有点快,但是你可以使用发送虚拟键盘:

BOOL
WINAPI
PostMessageA(
__in_opt HWND hWnd,
__in UINT Msg,
__in WPARAM wParam,
__in LPARAM lParam);

但是你发送到的窗口必须是焦点,你可以使用:

BOOL
WINAPI
BringWindowToTop(
__in HWND hWnd);

要将 HWIND 获取到正在运行的应用程序,您可以使用:

HWND
WINAPI
FindWindowA(
__in_opt LPCSTR lpClassName,
__in_opt LPCSTR lpWindowName);

【讨论】:

  • 如果有问题的应用程序通过 DirectX 使用 DirectInput,通过 PostMessage 给出的输入会被识别为常规输入,还是会被 DirectInput 忽略?另外,你也可以使用 PostMessage 来生成鼠标输入吗?无论哪种方式,感谢您提供的信息,今晚我将尝试对其进行测试。 :)
  • 我不知道每个细节,但据我了解,PostMessageA 用于使键盘虚拟化(我已经尝试过并且它有效),但您也可以捕获鼠标事件,流式传输记忆,并从您的接收器应用程序中读取它,并使用我给您的示例。
猜你喜欢
  • 2019-10-31
  • 1970-01-01
  • 2019-06-10
  • 1970-01-01
  • 2022-11-23
  • 2010-09-23
  • 2010-09-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多