我尝试向应用程序发送密钥。为了方便测试,我只使用记事本。代码如下所示:
[DllImport("USER32.DLL", EntryPoint = "SendMessageW", SetLastError = true,
CharSet = CharSet.Unicode, ExactSpelling = true,
CallingConvention = CallingConvention.StdCall)]
public static extern bool SendMessage(IntPtr hwnd, int Msg, int wParam, int lParam);
const int WM_KEYDOWN = 0x100;
const int WM_a = 0x41;
public void Press()
{
Process[] p = Process.GetProcessesByName("notepad");
IntPtr pHandle = p[0].MainWindowHandle;
SendMessage(pHandle, WM_KEYDOWN, WM_a, 0);
}
但什么也没发生。
我的主要目标是将密钥发送到提升的应用程序,但我很乐意先将其发送到记事本。
我想使用 SendMessage,因为我想控制按下按钮的时间,而且我不想让其他应用程序在前台运行。这就是我不使用 SendKeys 的原因。
几个问题:
- 你的声明是错误的,最后2个参数是IntPtr,而不是int
- 您应该使用 PostMessage,而不是 SendMessage
- 您发送到错误的窗口。记事本的编辑窗口是一个子窗口
- 您忘记发送 WM_KEYUP
- 您收到的实际字母取决于 Shift 键的状态
致命一击:Vista 和 Win7 UIPI(用户界面权限隔离)可防止受限制的进程将消息注入到提升的进程中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)