WinApi SendMessage/PostMessage在我的电脑上不起作用?

Cha*_*son 1 c# winapi visual-studio-2010

我在c#中编写了一些测试代码(使用WPF Form)来检查sendMessage/PostMessage是否有效.这是:

        Process x = Process.GetProcessesByName("Any Apps")[0];
        if (x == null) return;
        MessageBox.Show(x.Id.ToString()); // always works
        NativeMethods.SendMessage(x.MainWindowHandle, 0x100, 0x70, 0);//F1
        NativeMethods.SendMessage(x.MainWindowHandle, 0x101, 0x70, 0);
Run Code Online (Sandbox Code Playgroud)

在任何地方查找进程工作,但是当我使用VS调试密钥运行应用程序时,sendingMessage/postingMessage从未起作用.有时我从桌面启动程序时有效,有时则不行.但是......有趣的是:在任何可用的机器上(带有XP的VM,另一台带有64位Windows 7的计算机,带有32位Windows 7的朋友计算机)可以快速而精细地工作.

有谁有同样的问题?Maby有人知道解决方案吗?提前致谢.

shf*_*301 5

SendMessage并且PostMessage工作正常 - 但在Windows中发送击键并不像你想象的那么简单.只是发送WM_KEYDOWNWM_KEYUP消息发送输入是不可靠的.消息正在发送,但是您发送给它的窗口忽略它们.

  1. 键盘状态未正确管理:您无法使用PostMessage模拟键盘输入
  2. Windows应用程序有许多不同的窗口,主窗口可能不是句柄键盘输入.在Windows keystorkes中转到焦点窗口 - 可能不是主窗口 - 例如,可以考虑主MS Word窗口和子文档窗口.
  3. 像这样F1的命令通常被实现为发送消息的键盘加速器WM_COMMAND - 我并不认为假冒WM_KEYDOWNWM_KEYUP消息会触发它们.