我需要与正在运行的外部应用程序进行交互,并发送特定按键&版本。我尝试过使用SendKeys类,但它只完成了一半的工作,因为按键是使用即时键发送到外部应用程序。在另一个应用程序中模拟按键和keyrelease?
我需要能够模拟外部应用的“按住按键”。现在我尝试使用SendMessage函数的事情,但现在它不会在所有的工作:(我甚至不出现错误。
我需要与正在运行的外部应用程序进行交互,并发送特定按键&版本。我尝试过使用SendKeys类,但它只完成了一半的工作,因为按键是使用即时键发送到外部应用程序。在另一个应用程序中模拟按键和keyrelease?
我需要能够模拟外部应用的“按住按键”。现在我尝试使用SendMessage函数的事情,但现在它不会在所有的工作:(我甚至不出现错误。
好的,案件解决了。我实际上安装了VC++来尝试核心keybd_event()函数,并且在它工作之后,我能够在C#中明智地使用它。
下面是代码,令人惊讶的是它非常简单。你需要添加这个使用你的代码,以便能够导入dll的:使用System.Runtime.InteropServices;
此代码将按住'1'按钮3秒,然后将释放1秒并重复该过程。
(代码高亮弄乱:/,从复制“命名空间......”到最后括号“}”)
namespace ConsoleApplication1
{
class Program
{
[DllImport("user32.dll")]
static extern void keybd_event(byte bVk, byte bScan, uint dwFlags,UIntPtr dwExtraInfo);
static void Main(string[] args)
{
while (true)
{
keybd_event((byte)0x31, (byte)0x02, 0, UIntPtr.Zero);
Thread.Sleep(3000);
keybd_event((byte)0x31, (byte)0x82, (uint)0x2, UIntPtr.Zero);
Thread.Sleep(1000);
}
}
}
}
Blindy,感谢编辑:D – MeLight 2009-12-20 21:11:29
你试图使用PostMessage发送WM_KEYDOWN
和WM_KEYUP
?
编辑
你会使用这种方式(我用C++写的,但你可以很容易地使用PInvoke和..NET)
HWND hwnd = FindWindow(NULL,_T("Mywindow"));
PostMessage(hwnd,WM_KEYDOWN,VK_A,0);
你能给我看一段代码吗?我努力找到一个像现在3天的答案,除了SendKeys之外什么都不工作,除了SendKeys – MeLight 2009-11-22 00:00:46
我添加了一个链接到pinvoke.net,在那里你可以找到给定功能的PInvoke头文件 – 2009-11-22 00:18:33
好吧,我试过调整你的解决方案,并让它在C#中工作,我也得到了Pinvoke的头文件(我想!)。它仍然不起作用,我觉得我正在进行一些我没有得到的事情的递归...解释为什么SendMessage不起作用的任何机会,或者PostMessage的C#示例? – MeLight 2009-11-22 00:31:09
您可以使用WSH脚本壳牌这样做:
WshShell shell = new WshShellClass();
object missing=System.Reflection.Missing.Value;
shell.SendKeys("MOO!!!", ref missing);
您只需将COM引用添加到“Windows Scripting Host Object”版本1.0即可。一切都在命名空间IWshRuntimeLibrary
。
我会认为SendKeys和SendMessage都不符合您的要求。对不起队友,我也不知道。 – 2009-11-21 23:52:09
请参阅我的答案在http://stackoverflow.com/questions/172353/how-to-push-a-key-and-release-it-using-c/9509588 – 2012-03-01 02:03:36