【问题标题】:C# send keypress to external program that listens to hotkeysC#将按键发送到监听热键的外部程序
【发布时间】:2013-12-11 20:01:34
【问题描述】:

我有一个在后台运行的外部程序。如果我在计算机上的任意位置选择一个数字,然后按下热键(比如 F10),那么外部程序就会获取该数字。

现在我正在尝试创建 ac# winform 应用程序,如果用户在应用程序中选择文本并点击一个按钮,外部程序将获取这个突出显示的文本(所以我实际上模拟了 F10 按键)

这是我尝试过的:

SendKeys.Send("{F10}");

[DllImport("user32.dll")]
public static extern int SetForegroundWindow(IntPtr hWnd);

private void button1_Click(object sender, EventArgs e)
{
    textBox1.SelectAll();
    while (true)
    {
        Process[] processes = Process.GetProcessesByName("programname");

        foreach (Process proc in processes)
        {
            SetForegroundWindow(proc.MainWindowHandle);
            SendKeys.SendWait("{F10}");
        }

        Thread.Sleep(5000);
    }

}

但是外部程序对上述任何一个都没有响应.. 希望大家帮帮我。

【问题讨论】:

  • "...如果我在我的计算机上选择一个数字anywhere..."。你的意思是?顺便说一句您的外部程序如何查看您在 WinForm 应用程序中选择的内容?您的应用程序将进入后台,甚至在该文本框因单击按钮而失去焦点之前...
  • 我可以在资源管理器、word、Firefox 等中选择数字,然后按 F10。这是一个调用程序。我按下 F10 的那一刻,程序将开始呼叫该号码。我想用 winform 应用程序做同样的事情,但不是按 F10,而是按一个按钮并发出模拟的 F10 按下
  • 如果它真的是一个热键,那么哪个窗口看到击键并不重要。所以设置前景窗口并不重要。您需要详细了解该程序的行为方式。

标签: c# winforms keypress hotkeys


【解决方案1】:

我希望您所说的程序会为热键注册自己。这意味着当您在任何地方按 F10 时,WM_HOTKEY 消息将被发送到热键应用程序。当您使用 SendKeys.Send 时,您发送的是不同的 Windows 消息,因此不会拾取热键。

因此,您可能必须使用适当的值向 PostMessage 发送 WM_HOTKEY。请注意,实际按下的键并未在消息中发送 - RegisterHotKey(热键应用程序)中传递的 id 位于 WParam 中,因此您必须以某种方式找出此 id。如果是常量,可以尝试使用 Spy++ 来解决。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-20
    • 2011-08-07
    • 2010-11-03
    • 2014-04-06
    • 2021-04-04
    • 2011-06-14
    相关资源
    最近更新 更多