相关疑难解决方法(0)

如何使用Windows API将键击发送到窗口而不必激活它?

    我已经创建了一个应用程序,它将命令发送到激活的窗口.我希望能够在我的进程运行时使用计算机,因为只要我将焦点切换到另一个窗口,通过发送键发送的击键将转到我刚切换到的窗口.

    目前我使用Windows API中的FindWindow,IsIconic和ShowWindow.我必须检查窗口是否有FindWindow,并将我的对象设置为该调用返回的特定窗口,然后检查是否使用IsIconic最小化并调用ShowWindow,如果是,最后我必须调用Interaction.AppActivate将焦点设置到该窗口.所有这一切都在我发送击键之前完成.似乎应该有一种方法来发送击键而不必显示窗口并激活它.最重要的是,当我的应用程序运行按键时,我无法在计算机上执行任何操作.

winapi keystroke sendmessage sendkeys

26
推荐指数
3
解决办法
4万
查看次数

通过挂钩直接向另一个进程发送击键

我想知道,在摆弄了SendInput,SendKeys,PostMessage,SendMessage,SendNotifyMessage,keybd_event等等各种问题之后.为了找到这个...尝试将键盘输入发送到另一个非前台进程是相当挑剔和不可靠的.

我尝试了一种SendInput的方法,我在其中欺骗Z顺序(保持当前窗口在顶部)并快速前进第三方窗口,发送输入,并重新前景我的窗口.其中最终失败了,而且,不知何故,不知道为什么,设法同时也在我的窗口上触发键盘而不是前景(导致在两个窗口之间发送和接收的无限循环,直到我设法关闭该过程).

我尝试过SendMessage和PostMessage的不同组合.一个用于向下,一个用于向上,因为同时使用向下和向上导致问题,例如PostMessage用于两者,导致密钥在接收窗口上复制.或两者的SendMessage,这导致文本输入问题,但其他功能正常.用于keydown的SendMessage和用于keyUp的PostMessage适用于所有功能,但可靠性率急剧下降,并且在关键事件中增加了延迟.只有用于keydown的PostMessage和用于keyup的SendMessage的组合设法做了一些有用的事情,可能有5-10%的密钥注册失败率.对于SentNotifyMessage也是如此(就可靠性而言,其行为与SendMessage基本相同).

基本上,我已经结束了,我想知道直接在目标窗口中注入一个钩子,并做一些伏都教以这种方式向它发送击键,绕过消息队列等.这样做将会不会触发全局键事件,只会影响目标窗口.唯一的问题是,当涉及到注射/挂钩等时,我是不可知的.所以我转向你,社区.

哇呢?

c# winapi code-injection sendmessage c#-4.0

19
推荐指数
2
解决办法
4万
查看次数

创建一个屏幕键盘

我使用PostMessage来模拟后台程序中的击键.除了需要在物理键盘上移位的字符外,它工作正常.我如何模拟班次?"

我使用的代码大致是:

 VK vk = VkKeyScanEx (c, GetKeyboardLayout (0));

 AttachThreadInput (_attachedThredId, _attachedProcessId, true);
 PostMessage       (_window, WM_KEYDOWN, vk.key, 0x1);
 PostMessage       (_window, WM_KEYUP,   vk.key, 0xC0010001);
 AttachThreadInput (_attachedThredId, _attachedProcessId, false);
Run Code Online (Sandbox Code Playgroud)

我该如何处理VK的扩展部分?

编辑

我正在尝试创建一个屏幕键盘.屏幕键盘上的每个按钮都模拟一系列击键.接收器是一个旧程序,根据执行的键盘顺序执行不同的任务.键盘序列如下

  • {ESC} {NN ESC} NN
  • {} ESC NN
  • ½NN
  • §NN

其中{ESC}模拟按下Esc键,NN是十六进制值,§/½让程序听.

通常我们有特殊的物理键盘来控制程序,但它们很昂贵.因此,在我们并不总是拥有物理键盘的测试环境中,我们必须手动输入这些代码

c# c++ winapi

1
推荐指数
1
解决办法
4151
查看次数

标签 统计

winapi ×3

c# ×2

sendmessage ×2

c#-4.0 ×1

c++ ×1

code-injection ×1

keystroke ×1

sendkeys ×1