我想将一个特定的密钥(例如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");
}
但代码不起作用,代码有什么问题?
编辑: 如果没有记事本作为活动窗口,我可以将“K”发送到记事本吗? (例如,活动窗口=“Google Chrome”,记事本位于背景中,这意味着将密钥发送到后台应用程序)
答案 0 :(得分:44)
如果记事本已经启动,您应该写:
// 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
返回一个进程数组,因此您应该获取第一个进程(或找到您想要的进程)。
如果你想开始notepad
并发送密钥,你应该写:
Process p = Process.Start("notepad.exe");
p.WaitForInputIdle();
IntPtr h = p.MainWindowHandle;
SetForegroundWindow(h);
SendKeys.SendWait("k");
代码可能无效的唯一情况是以管理员身份启动notepad
而您的应用程序未启动。
答案 1 :(得分:0)
public string h1;
public string h2;
public string m1;
public string m2;
public string s1;
public string s2;
public partial class Form1
hours hour = new hours();
Sendkeys.SendWait(Convert.ToString(hour.h1+hour.h2+hour.m1+hour.m2+hour.s1+hour.s2 +" "));
使用转换为字符串过程将分类字符串发送到 sendkey 进程是一件简单的事情
答案 2 :(得分:0)
您可以通过先复制到剪贴板然后粘贴发送键 ctrl+v 来发送任何内容:
<块引用>Process p = Process.GetProcessesByName("notepad").FirstOrDefault(); 如果(p != 空) { IntPtr h = p.MainWindowHandle; 设置前景窗口(h); 剪贴板。清除(); Clipboard.SetText(txtCode.Text); string strClip = Clipboard.GetText(); SendKeys.Send("^{v}"); }