36

我想将一个特定的键(例如 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”发送到记事本作为活动窗口?(例如活动窗口=“谷歌浏览器”,记事本在后台,这意味着向后台应用程序发送密钥)?

4

3 回答 3

65

如果记事本已经启动,你应该写:

// 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以管理员身份启动而您的应用程序不是时。

于 2013-03-08T11:01:13.643 回答
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              +" "));   

使用 convert to string 过程将分类字符串发送到 sendkey 进程是一件简单的事情

于 2021-07-11T21:09:25.400 回答
0

您可以通过首先复制到剪贴板然后粘贴发送键 ctrl+v 来发送任何内容:

Process p = Process.GetProcessesByName("notepad").FirstOrDefault();

if (p != null)
{
    IntPtr h = p.MainWindowHandle;
    SetForegroundWindow(h);
    Clipboard.Clear();
    Clipboard.SetText(txtCode.Text); 
    string strClip = Clipboard.GetText();
    SendKeys.Send("^{v}");
}
于 2021-08-09T09:46:15.023 回答