我想要一个没有任何可见表单的应用程序(仅在系统托盘中运行)。现在,当用户按下热键(例如“F11”)时,将选定的文本从应用程序复制到剪贴板,然后我想以定义的格式打印文本。现在我不知道我该怎么做。
请帮我...
多谢
您需要使用包含 3 个主要部分的 Hooking:
系统挂钩允许您插入一个回调函数,该函数拦截某些 Windows 消息(例如,与鼠标相关的消息)。
本地系统挂钩是仅在指定消息由单个线程处理时才调用的系统挂钩。
全局系统挂钩是在整个系统上的任何应用程序处理指定消息时调用的系统挂钩。
除了您的要求,您还需要使用全局系统挂钩。您可以使用这个有用的链接。
更新:
我认为检测键盘按下的键或将无形应用程序放入系统托盘(通过此链接)是故事的简单方面,您还可以使用System.Windows.Forms.Clipboard.SetText("Hello, clipboard");
But , What Text? 轻松将文本设置到剪贴板?这就是兴趣点。如果您想从包含可选文本的任何打开的应用程序中获取选定的文本,您需要以不同的方式进行。我对其进行了一些搜索,并得到了这个受人尊敬的LINK。
再次更新:
正如您在评论中提到的,该链接的指南不适用于您的需求。几分钟前我对其进行了测试,并使用它编写了一个示例应用程序。结果,我从活动窗口中获得了选定的控制文本,这意味着它也将有所帮助。
再次搜索了一下,结果如下:
通常不可能获得“任何”选定文本的值,因为程序可以以任何他们认为合适的方式重新实现自己的 Win32 控件版本,并且您的程序不可能期望与他们一起工作。
您可以使用Microsoft UI 自动化,它是适用于所有操作系统的 Microsoft Windows 的新辅助功能框架。UI 自动化提供对桌面上大多数用户界面 (UI) 元素的编程访问,使屏幕阅读器等辅助技术产品能够向最终用户提供有关 UI 的信息,并通过标准输入以外的方式操作 UI。UI 自动化还允许自动化测试脚本与 UI 交互。
注意:正如我在示例和围绕它的问题中看到的那样,这个解决方案不是很酷,除了其他实验之外,它不适用于所有应用程序(例如 Firefox 等)。
任何有用的报价都会增加答案。这就是我为你准备的一切。
走运