我想将一个特定的键(例如 k)发送到另一个名为记事本的程序,下面是我使用的代码:
private void SendKey()
{
[DllImport ("User32.dll")]
static extern int SetForegroundWindow(IntPtr point);
var p = Process.GetProcessesByName("notepad")[0];
var pointer = p.Handle;
SetForegroundWindow(pointer);
SendKeys.Send("k");
}
但是代码不行,代码哪里出了问题?
是否可以将“K”发送到记事本而没有记事本作为事件窗口? (例如,active window = "Google chrome",记事本在后台,这意味着向后台应用程序发送 key )?
最佳答案
如果记事本已经启动,你应该写:
// 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
返回一个进程数组,因此您应该获取第一个(或找到您想要的那个)。
如果你想启动记事本
并发送 key ,你应该这样写:
Process p = Process.Start("notepad.exe");
p.WaitForInputIdle();
IntPtr h = p.MainWindowHandle;
SetForegroundWindow(h);
SendKeys.SendWait("k");
代码可能无法工作的唯一情况是当 notepad
以管理员身份启动而您的应用程序未启动时。
关于c# - 如何将 key 发送到另一个应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15292175/