如何将 control + L 和 control + C 发送到另一个应用程序?

Posted

技术标签:

【中文标题】如何将 control + L 和 control + C 发送到另一个应用程序?【英文标题】:how to send control + L and control + C to another application? 【发布时间】:2009-07-24 06:38:10 【问题描述】:

我正在使用 c# 开发 win 应用程序,我想发送 Ctrl+ LCtrl + C 当 firefox 处于活动状态时,定位地址栏并复制 Url 并从剪贴板获取信息。我正在尝试这样做。但我不能这样做。

我该怎么做? 激活 Firefox 窗口,发送 Ctrl+ L(激活地址栏),发送 Ctrl + C(复制选择,即 URL,到剪贴板)并读取剪贴板。

 [return: MarshalAs(UnmanagedType.Bool)]
    [DllImport("user32.dll", SetLastError = true)]
    static extern bool PostMessage(IntPtr hwnd, uint Msg, int wParam, int lParam);

    private const uint VK_CONTROL = 0x11;
    private const uint VK_L = 0x4C;
    private const uint VK_C = 0x43;


if (hwndfirfox == Process.GetProcessesByName("firefox")[0].MainWindowTitle)
       hwndfirfox = Process.GetProcessesByName("firefox")[0].MainWindowHandle;

if (hwndfirfox != null)

    PostMessage(hwndfirfox, VK_CONTROL, VK_L, 0);
    PostMessage(hwndfirfox, VK_CONTROL, VK_C, 0);

这段代码出错了,帮帮我。

【问题讨论】:

【参考方案1】:

我看到了一个帖子here,其中指出不应使用 PostMessage 来模拟键盘输入。为此,您应该使用 SendKeys 或 SendInput。

【讨论】:

我不反对这个答案的唯一原因是,因为它承认 OP 的解决方案是最糟糕的解决方案。尽管如此,SendKeys/SendInput 几乎同样糟糕(它不考虑语言环境,例如 [Ctrl]+C 不映射到复制操作)。如果您想自动化 UI,请使用 UI Automation。【参考方案2】:

您可能想在 CodeProject 上考虑this article。 MSDN 上的SendKeys class 似乎只允许您将击键发送到当前活动的应用程序,这也可能对您有所帮助。

【讨论】:

我打算推荐相同的代码项目文章,但在 questin 中格式化代码:)

以上是关于如何将 control + L 和 control + C 发送到另一个应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

如何从重定向的 url 中获取推荐人

Access-Control-Allow-Origin 不允许使用 Origin - 如何使用非常简单的 Web 堆栈和 guice 启用 CORS

如何使用 TypeScript 编写 AngularJS 的 Controller

如何将 CloudKit 记录数据从“TableView-Controller B”传递到“View-Controller C”?

将 Cache-Control: max-age 与 ETag 一起使用时会发生啥?

CORS 和 Access-Control-Allow-Headers 是如何工作的?