我正在尝试向第三方应用程序(例如,记事本)插入字符串值。下面是我正在使用的代码
[DllImport("user32.dll")]
static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, UIntPtr dwExtraInfo);
public void sim_type(string txt)
{
const int KEYEVENTF_EXTENDEDKEY = 0x1;
const int KEYEVENTF_KEYUP = 0x2;
byte[] ASCIIValues = Encoding.ASCII.GetBytes(txt);
foreach (byte keyCode in ASCIIValues)
{
Console.WriteLine("Ascii Values = " + keyCode);
keybd_event(keyCode, 0x45, KEYEVENTF_EXTENDEDKEY, (UIntPtr)0);
keybd_event(keyCode, 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, (UIntPtr)0);
}
}我给出了一个示例文本信息,例如“这是一个测试消息”。我得到了正确的ascii值。但是在对应示例消息的目标文本框中,我得到了这个输出。
t89 9 1 13:38 02/12/2010513:38 02/12/2010-5175
有人能帮我解决这个问题吗。我还将在控制台中打印ascii值。
消息:这是一个测试消息{ Ascii值= 84 Ascii值= 104 Ascii值= 105 Ascii值= 115 Ascii值= 32 Ascii值= 105 Ascii值= 115 Ascii值= 32 Ascii值= 97 Ascii值= 32 Ascii值= 116 Ascii值= 101 Ascii值= 115 Ascii值= 116 Ascii值= 32 Ascii值= 109 Ascii值= 101 Ascii值= 115 Ascii值= 115 Ascii值= 97 Ascii值= 103 Ascii值= 101 }
有人帮忙谢谢你,尼基尔
发布于 2011-04-22 18:04:34
事件已经被SendInput取代了。我建议您看看Windows输入模拟器,它为Send提供了一个很好的C#包装器。您还可以使用SendInput API模拟鼠标运动(我相信他们正在为下一个版本的输入模拟器而工作)。
我在一个自动化项目中使用了这个库,它似乎运行得很好,但是也有一些奇怪之处(IE keystoke HOME + SHIFT + END并没有像预期的那样选择所有文本)。
发布于 2010-12-02 14:30:29
keybd_event的第一个参数是一个虚拟密钥代码,而不是ASCII代码。有些VK与ASCII是相同的(这就是为什么您得到第一个t!),但这不是实现它的方法。
实现目标的一种方法是使用SendInput方法。对于此方法,您可以传递一个KEYBDINPUT,该字段有一个用于传递Unicode字符的字段(如果您指定了KEYEVENTF_UNICODE标志)。
https://stackoverflow.com/questions/4335854
复制相似问题