【问题标题】:Sendkeys from contextmenustrip来自 contextmenustrip 的发送键
【发布时间】:2013-02-24 06:04:36
【问题描述】:

我想从上下文菜单条向应用程序发送一个字符串。例如,我打开记事本,打开我的应用程序,单击任务栏中的通知图标,然后选择一个项目,我希望它向当前打开的应用程序发送文本(sendkeys.send)。

最好的方法是什么?

谢谢。

编辑:只需发送 %{TAB} 即可在除 Windows 8 之外的所有 Windows 版本中使用,并且必须兼容。

【问题讨论】:

  • 这不是重复的lol,我想将它从cms发送到底层应用程序,而不是发送到名称为记事本的进程......
  • 一个正在运行的记事本应用程序被视为一个进程。也许我在问题中遗漏了一些东西?你能详细说明一下吗?
  • 当我有一个没有表单或其他任何东西的简单应用程序时,只有一个通知图标和附加的上下文菜单条,我希望当我单击一个项目时,上下文菜单条关闭,并将一些测试发送到底层应用程序,不管那可能是什么。因为当您单击上下文菜单条中的某个项目时,当前窗口会失去焦点,因此无法发送键。
  • 听起来你想挂接到进程消息队列?
  • 您必须将焦点设置到该记事本窗口 (bring it to front)。

标签: c# sendkeys


【解决方案1】:

如果 W8 未经 Microsoft 或自签名认证,则根本不允许对其他应用程序进行击键。

【讨论】:

  • 哇,我喜欢的第一个 Windows 8 功能!您可以通过包含指向确认此观察的文档的链接来更好地回答此问题。
【解决方案2】:

以下将通过其名称找到一个应用程序(进程)。如果应用程序正在运行,它将收到文本。您只需要使用 ContextMenuStrip 的代码。如果有什么我可能遗漏的,请告诉我:

public partial class Form1 : Form
{
    [DllImport("User32")]
    private static extern int SetForegroundWindow(IntPtr hwnd);

    public Form1()
    {
        InitializeComponent();

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

        if (notepad != null)
        {
            SetForegroundWindow(notepad.MainWindowHandle);
            SendKeys.SendWait("test");
        }

    }

}

【讨论】:

    【解决方案3】:

    解决我几乎所有“它在 Windows 8 之前一直有效”问题的解决方案是将进程设置为以管理员身份运行。就我而言,我使用的是 perl Win32::GuiTest 中的 SendKeys。该程序运行并将焦点设置在右侧窗口上,但拒绝发送任何密钥,除非我将其设置为以管理员身份运行。这可能是因为我发送到的进程是以管理员身份运行的,不知道。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-07
      • 1970-01-01
      • 2020-04-15
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 2011-10-13
      相关资源
      最近更新 更多