我想将一个特定的密钥(例如k)发送到另一个名为notepad的程序,下面是我使用的代码:
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");
}
Run Code Online (Sandbox Code Playgroud)
但代码不起作用,代码有什么问题?
编辑:如果没有记事本作为活动窗口,我可以将"K"发送到记事本吗?(例如,活动窗口="Google Chrome",记事本位于背景中,这意味着将密钥发送到后台应用程序)
Moh*_*han 48
如果记事本已经启动,您应该写:
// 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");
}
Run Code Online (Sandbox Code Playgroud)
GetProcessesByName 返回一个进程数组,所以你应该得到第一个进程(或找到你想要的进程).
如果你想开始notepad并发送密钥,你应该写:
Process p = Process.Start("notepad.exe");
p.WaitForInputIdle();
IntPtr h = p.MainWindowHandle;
SetForegroundWindow(h);
SendKeys.SendWait("k");
Run Code Online (Sandbox Code Playgroud)
代码可能无法工作的唯一情况notepad是以管理员身份启动,而您的应用程序不启动.
| 归档时间: |
|
| 查看次数: |
101693 次 |
| 最近记录: |