C#使用Sendkey函数将密钥发送给另一个应用程序

我想发送一个特定的密钥(如K)到另一个名为记事本的程序,下面是我使用的代码:

void sendkey () { [DllImport ("User32.dll")] static extern int SetForegroundWindow(IntPtr point); Process p = Process.GetProcessesByName("notepad")[0]; IntPtr pointer = p.Handle; SetForegroundWindow(pointer); SendKeys.Send("k"); } 

但代码不起作用,代码有什么问题?

编辑:我可以发送“K”的记事本没有记事本成为活动窗口? (例如,活动窗口=“谷歌浏览器”,记事本是在背景,这意味着发送一个关键到后台应用程序)

如果记事本已经开始,你应该写:

 // import the function in your class [DllImport ("User32.dll")] static extern int SetForegroundWindow(IntPtr point); //... Process p = Process.GetProcessesByName("notepad").FirstOrDefault(); if( p != null) { IntPtr h = p.MainWindowHandle; SetForegroundWindow(h); SendKeys.SendWait("k"); } 

GetProcessesByName返回一个进程数组,所以你应该得到第一个(或find你想要的)。

如果你想开始notepad并发送密钥,你应该写:

 Process p = Process.Start("notepad.exe"); p.WaitForInputIdle(); IntPtr h = p.MainWindowHandle; SetForegroundWindow(h); SendKeys.SendWait("k"); 

代码可能无法正常工作的唯一情况是当notepad以pipe理员身份启动并且您的应用程序不是。