如何从活动窗口中检索所选文本

Geo*_*ras 13 python windows winapi pywin32

我正在尝试使用Python为Windows创建一个简单的开源实用程序,该实用程序可以对当前活动窗口的选定文本执行用户定义的操作.应使用预定义的键盘快捷键激活该实用程序.

以下示例部分概述了用法:

  1. 用户使用鼠标或键盘选择一些文本(在任何应用程序窗口中)
  2. 用户按下预定义的键盘快捷键
  3. 我们的实用程序检索选定的文本或复制到剪贴板(两种方法都应该没问题)
  4. 将对所选文本执行与键盘快捷键相关的操作

令我困惑的是第3步.如何从活动窗口中检索所选文本.这适用于所有应用程序.

我使用pywin32模块.

提前感谢您的答案和提示.

更新#1:

原来有两种方法可以完成任务:

  1. 找到活动窗口,然后向其发送消息/按键(Ctrl-C),以便将所选文本复制到剪贴板.然后,该实用程序可以使用与剪贴板相关的函数访问文本.
  2. 找到活动窗口,然后直接检索所选文本(不将其复制到剪贴板).这似乎比第一种方法更难.

作为出发点:

获取Anurag Uniyal在回复中指出的活动窗口ID .

或者使用以下代码获取window对象:

import win32ui
wnd = win32ui.GetForegroundWindow()
print wnd.GetWindowText()
Run Code Online (Sandbox Code Playgroud)

Anu*_*yal 1

这不会是微不足道的,但这是起点

import win32gui
hwnd = win32gui.GetForegroundWindow()
print win32gui.GetWindowText(hwnd)
Run Code Online (Sandbox Code Playgroud)

也许您将不得不使用FindWindow,FindWindowEx来获取具有焦点的子窗口

编辑:还在尝试使用spy++来查看它如何检索有关各种窗口的信息,请参阅hwnd、窗口类等

基本上,如果你能在 C/C++/C# 中找到一个示例,那么将其转换为 pywin32 等效项并不困难,所以在某种程度上,这是 win32 api 特定的问题