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

时间:2013-03-08 10:45:40

标签: c# sendkeys

我想将一个特定的密钥(例如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”,记事本位于背景中,这意味着将密钥发送到后台应用程序)

3 个答案:

答案 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}"); }