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理员身份启动并且您的应用程序不是。