我正在使用此代码
const int WM_KEYDOWN = 256;
const int WM_KEYUP = 257;
const int WM_CHAR = 258;
public static void SendKeys(string message){
int foregroundWindowHandle = GetForegroundWindow();
uint remoteThreadId = GetWindowThreadProcessId(foregroundWindowHandle, 0);
uint currentThreadId = GetCurrentThreadId();
//AttachTrheadInput is needed so we can get the handle of a focused window in another app
AttachThreadInput(remoteThreadId, currentThreadId, true);
//Get the handle of a focused window
int focused = GetFocus();
//Now detach since we got the focused handle
AttachThreadInput(remoteThreadId, currentThreadId, false);
foreach (char c in message)
{
//SendMessage(focused, WM_CHAR, (int)c, null);
SendMessage(focused, WM_KEYDOWN, 65, null);
SendMessage(focused, WM_KEYUP, 66, null);
SendMessage(focused, WM_CHAR, 67, null);
}
}
当我测试它时(例如,记事本处于活动状态),只打印字母C,所以只有WM_CHAR正在工作 - 为什么?
答案 0 :(得分:-2)
首先,要了解询问如何发送键盘消息的问题经常被问到。我假设你没有花太多时间寻找以前的答案。其次,要了解初学者经常错误地认为发送键盘消息是最简单,最有效的解决方案。事实是,它通常不是最简单的,也不是最有效的,也不是最可靠的。
如果你打算使用这样的Windows消息,那么学会使用Spy ++。如果你不知道那是什么,那么请通过熟悉VS Tools菜单中可用的工具来投入一分钟。
可能更容易,更有效和更可靠的解决方案通常是使用WM_GETTEXT和WM_SETTEXT消息。并预测未来的问题,在另一个应用程序中按下按钮会向该按钮的父级发送BN_CLICKED通知。您可以使用Spy ++获得更多有关消息问题的答案。