开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 289|回复: 4
收起左侧

[已解决] E语言转PYthon

 关闭 [复制链接]
结帖率:82% (9/11)
发表于 2025-5-26 22:53:58 | 显示全部楼层 |阅读模式   四川省德阳市
13精币
  
子程序名返回值类型公开备 注
取句柄整数型 
参数名类 型参考可空数组备 注
进程名文本型欲取窗口句柄的窗口程序进程名(不区分大小写)
类名文本型欲取窗口句柄的窗口类名
标题文本型欲取窗口句柄的窗口标题关键字,模糊匹配.精确标题可使用单引号将标题引用
变量名类 型静态数组备 注
窗口列表窗口信息型0
a整数型 
数目整数型 
进程列表进程信息型0
进程数整数型 
i整数型 
满足逻辑型 
如果真 (进程名 = “” 类名 = “” 标题 = “”)
输出调试文本 (“开什么玩笑!一个条件都没有,怎么取句柄?”)
返回 (0)
进程数 = 进程枚举 (进程列表)
计次循环首 (枚举窗口信息 (窗口列表), a)
如果真 (进程名 ≠ “”)
满足 = 假
计次循环首 (进程数, i)
如果真 (到小写 (进程列表 [i].进程名称)到小写 (进程名) 进程列表 [i].进程ID = 窗口列表 [a].进程ID)
满足 = 真
跳出循环 ()

计次循环尾 ()
如果真 (满足 = )
到循环尾 ()

如果真 (类名 ≠ “”)
如果真 (窗口列表 [a].窗口类名 ≠ 类名)
到循环尾 ()

如果真 (标题 ≠ “”)
如果真 (寻找文本 (“'” + 窗口列表 [a].窗口标题 + “'”, 标题, , ) = -1)
到循环尾 ()

返回 (窗口列表 [a].窗口句柄)
计次循环尾 ()
返回 (-1)







谁能给个例子  取句柄 转PY  在给个调用例子

最佳答案

查看完整内容

[mw_shl_code=python,true]import win32gui import win32process import psutil import re def get_handle(process_name='', class_name='', title_key=''): """ 根据进程名/窗口类名/标题关键字获取窗口句柄 :param process_name: 进程名(不区分大小写) :param class_name: 窗口类名 :param title_key: 标题关键字,用单引号包裹表示精确匹配 :return: 窗口句柄(整数)或 None """ # 参数检 ...

回答提醒:如果本帖被关闭无法回复,您有更好的答案帮助楼主解决,请发表至 源码区 可获得加分喔。
友情提醒:本版被采纳的主题可在 申请荣誉值 页面申请荣誉值,获得 1点 荣誉值,荣誉值可兑换荣誉会员、终身vip用户组。
快捷通道:申请荣誉值无答案申请取消悬赏投诉有答案未采纳为最佳
结帖率:87% (39/45)

签到天数: 2 天

发表于 2025-5-26 22:53:59 | 显示全部楼层   河北省衡水市
[Python] 纯文本查看 复制代码
import win32gui
import win32process
import psutil
import re

def get_handle(process_name='', class_name='', title_key=''):
    """
    根据进程名/窗口类名/标题关键字获取窗口句柄
    :param process_name: 进程名(不区分大小写)
    :param class_name: 窗口类名
    :param title_key: 标题关键字,用单引号包裹表示精确匹配
    :return: 窗口句柄(整数)或 None
    """
    # 参数检查
    if not any([process_name, class_name, title_key]):
        print("错误:至少需要一个cha询条件!")
        return None

    # 获取所有进程信息 {pid: name}
    process_dict = {}
    for proc in psutil.process_iter(['pid', 'name']):
        process_dict[proc.info['pid']] = proc.info['name'].lower()

    # 窗口枚举回调函数
    def enum_window_callback(hwnd, hwnd_list):
        hwnd_list.append(hwnd)
        return True

    # 获取所有窗口句柄
    windows = []
    win32gui.EnumWindows(enum_window_callback, windows)

    # 遍历窗口
    for hwnd in windows:
        # 获取进程ID
        _, pid = win32process.GetWindowThreadProcessId(hwnd)
        
        # 进程名过滤
        if process_name:
            proc_name = process_dict.get(pid, '').lower()
            if proc_name != process_name.lower().strip():
                continue
        
        # 类名过滤
        if class_name:
            current_class = win32gui.GetClassName(hwnd)
            if current_class != class_name:
                continue
        
        # 标题过滤
        if title_key:
            current_title = win32gui.GetWindowText(hwnd)
            # 精确匹配(用单引号包裹)
            if title_key.startswith("'") and title_key.endswith("'"):
                if current_title != title_key[1:-1]:
                    continue
            else:  # 模糊匹配
                if not re.search(title_key, current_title, re.IGNORECASE):
                    continue
        
        # 找到符合条件的窗口
        return hwnd
    
    return None  # 未找到

# 调用示例
if __name__ == "__main__":
    # 示例1:仅通过进程名查找
    handle1 = get_handle(process_name='notepad.exe')
    print(f"记事本窗口句柄:{handle1}")

    # 示例2:组合条件查找
    handle2 = get_handle(
        process_name='chrome.exe',
        class_name='Chrome_WidgetWin_1',
        title_key='Python'
    )
    print(f"Chrome的Python相关窗口句柄:{handle2}")

    # 示例3:精确标题匹配
    handle3 = get_handle(title_key="'无标题 - 记事本'")
    print(f"精确标题窗口句柄:{handle3}")


[size=16.002px]调用示例:
[Python] 纯文本查看 复制代码
# 查找记事本窗口
handle = get_handle(process_name='notepad.exe')

# 组合条件查找Chrome窗口
handle = get_handle(
    process_name='chrome.exe',
    class_name='Chrome_WidgetWin_1',
    title_key='Python'
)

# 精确标题查找
handle = get_handle(title_key="'无标题 - 记事本'")


[size=16.002px]需要安装依赖库:
[Bash shell] 纯文本查看 复制代码
pip install pywin32 psutil

回复

使用道具 举报

结帖率:82% (9/11)

签到天数: 2 天

 楼主| 发表于 2025-5-26 22:55:28 | 显示全部楼层   四川省德阳市
import win32gui
import win32con

def window_enum_handler(hwnd, result):
    if win32gui.IsWindowVisible(hwnd):  # 确保窗口是可见的
        length = win32gui.GetWindowTextLength(hwnd)
        if length:
            text = win32gui.GetWindowText(hwnd)
            if "记事本" in text:
                result.append((hwnd, text))
                return  # 如果只想找到第一个匹配项,可以返回以停止枚举


result = []
win32gui.EnumWindows(window_enum_handler, result)
print("找到的窗口:")
for hwnd, title in result:
    print(f"句柄:{hwnd}, 标题:{title}")




枚举出句柄  怎么封装子程序
回复

使用道具 举报

结帖率:82% (9/11)

签到天数: 2 天

 楼主| 发表于 2025-5-26 22:56:48 | 显示全部楼层   四川省德阳市
把“记事本”用个变量存起来  下次调用   XXX("记事本")   请问下转PY怎么实现
回复

使用道具 举报

结帖率:71% (5/7)
发表于 7 天前 | 显示全部楼层   云南省昆明市
[Python] 纯文本查看 复制代码
import win32gui
import win32con

result = []
def window_enum_handler(hwnd, result,serach_text="记事本"):
    if win32gui.IsWindowVisible(hwnd):  # 确保窗口是可见的
        length = win32gui.GetWindowTextLength(hwnd)
        if length:
            text = win32gui.GetWindowText(hwnd)
            if serach_text in text:
                result.append((hwnd, text))
                return  # 如果只想找到第一个匹配项,可以返回以停止枚举



def enum_windows():
    result_final = []

    win32gui.EnumWindows(window_enum_handler, result)
    #print("找到的窗口:")
    for hwnd, title in result:
        print(f"句柄:{hwnd}, 标题:{title}")
        result_final.append((hwnd, title))
    return result_final

def get_window_by_text(text):
    result = []
    win32gui.EnumWindows(lambda hwnd, result: window_enum_handler(hwnd, result, text), result)
    return result


print(get_window_by_text("记事本"))

print(enum_windows())

你看下这个
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表