如何将 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+ L 和 Ctrl + 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 发送到另一个应用程序?的主要内容,如果未能解决你的问题,请参考以下文章
Access-Control-Allow-Origin 不允许使用 Origin - 如何使用非常简单的 Web 堆栈和 guice 启用 CORS
如何使用 TypeScript 编写 AngularJS 的 Controller
如何将 CloudKit 记录数据从“TableView-Controller B”传递到“View-Controller C”?