【发布时间】:2016-10-20 17:16:03
【问题描述】:
我真的很难理解 PostMessage 的工作原理。我来自网络开发背景,所以对我来说这一切都很陌生。我正在尝试将单个“a”字符发送到第三方应用程序。我已经使用 spy++ 来获取所需的 PostMessage(下面的参数),但我无法理解如何使用 Lparam 和 Wparam。
这是我目前所拥有的。我假设 00000041(以及来自 spy++ 的其他人)实际上是十六进制的,我将 0x 放在它的字体中是正确的吗?
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool PostMessage(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam);
const int WM_KEYDOWN = 0x100;
const int WM_KEYUP = 0x101;
const Int32 WM_CHAR = 0x0102;
PostMessage(WindowHandle, WM_KEYDOWN, (IntPtr)(0x00000041), (IntPtr)(0x001E0001));
PostMessage(WindowHandle, WM_CHAR, (IntPtr)(0x00000061), (IntPtr)(0x001E0001));
PostMessage(WindowHandle, WM_KEYUP, (IntPtr)(0x00000041), (IntPtr)(0xC01E0001));
这给了我一个算法溢出......
在有人告诉我使用 sendinput 之前,这是一个没有焦点的窗口:-p
【问题讨论】:
-
抱歉应该指定。 PostMessage(WindowHandle, WM_KEYUP, (IntPtr)(0x00000061), (IntPtr)(0xC01E0001));
-
是
0xC01E0001故意的,0xC在最后一个 PostMessage 中而不是0x0? -
lParam 参数是干什么用的?我找不到它的文档。有时我看到它设置为 1,其他时候设置为 0
标签: c# c++ windows unmanaged postmessage