2009-11-21 23 views
2

我需要与正在运行的外部应用程序进行交互,并发送特定按键&版本。我尝试过使用SendKeys类,但它只完成了一半的工作,因为按键是使用即时键发送到外部应用程序。在另一个应用程序中模拟按键和keyrelease?

我需要能够模拟外部应用的“按住按键”。现在我尝试使用SendMessage函数的事情,但现在它不会在所有的工作:(我甚至不出现错误。

+1

我会认为SendKeys和SendMessage都不符合您的要求。对不起队友,我也不知道。 – 2009-11-21 23:52:09

+0

请参阅我的答案在http://stackoverflow.com/questions/172353/how-to-push-a-key-and-release-it-using-c/9509588 – 2012-03-01 02:03:36

回答

2

好的,案件解决了。我实际上安装了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); 
     } 
    } 
} 

} 
+0

Blindy,感谢编辑:D – MeLight 2009-12-20 21:11:29

1

你试图使用PostMessage发送WM_KEYDOWNWM_KEYUP

编辑

你会使用这种方式(我用C++写的,但你可以很容易地使用PInvoke和..NET)

HWND hwnd = FindWindow(NULL,_T("Mywindow")); 
PostMessage(hwnd,WM_KEYDOWN,VK_A,0); 
+0

你能给我看一段代码吗?我努力找到一个像现在3天的答案,除了SendKeys之外什么都不工作,除了SendKeys – MeLight 2009-11-22 00:00:46

+1

我添加了一个链接到pinvoke.net,在那里你可以找到给定功能的PInvoke头文件 – 2009-11-22 00:18:33

+0

好吧,我试过调整你的解决方案,并让它在C#中工作,我也得到了Pinvoke的头文件(我想!)。它仍然不起作用,我觉得我正在进行一些我没有得到的事情的递归...解释为什么SendMessage不起作用的任何机会,或者PostMessage的C#示例? – MeLight 2009-11-22 00:31:09

1

官方的API是SendInput

+0

我正在努力寻找一个工作C#示例超过3天现在...我真的很感激其中之一。 – MeLight 2009-11-22 16:13:37

+0

谷歌搜索C#“SendInput”让我这个:http://blogs.msdn.com/robgruen/archive/2004/05/10/129221.aspx – MSN 2009-11-22 19:36:42

1

您可以使用WSH脚本壳牌这样做:

 WshShell shell = new WshShellClass(); 
     object missing=System.Reflection.Missing.Value; 

     shell.SendKeys("MOO!!!", ref missing); 

您只需将COM引用添加到“Windows Scripting Host Object”版本1.0即可。一切都在命名空间IWshRuntimeLibrary