加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

Windows Python:为什么第一个打开的窗口未显示为活动状态?

发布时间:2020-12-16 21:43:22 所属栏目:Python 来源:网络整理
导读:我发现在Python Windows命令行提示下使用python脚本有一个非常奇怪的问题,为了重现这个问题,你可以简单地执行以下步骤: 启动Python命令行提示符(这通常是点击开始菜单 Python 2.7-> Python(命令行). 键入以下文本,然后按Enter键. import ctypes 键入以下文

我发现在Python Windows命令行提示下使用python脚本有一个非常奇怪的问题,为了重现这个问题,你可以简单地执行以下步骤:

>启动Python命令行提示符(这通常是点击开始菜单 – > Python 2.7-> Python(命令行).
>键入以下文本,然后按Enter键.

import ctypes

>键入以下文本,然后按Enter键.

ctypes.windll.user32.MessageBoxA(0,"Your text","Your title",1)

>您将看到一个消息框已打开,但此消息框窗口未激活.
>使用鼠标单击任务栏中消息框的图标以激活消息框
>关闭消息框
>在Python提示shell中再次键入文本

ctypes.windll.user32.MessageBoxA(0,1)

>现在,消息框显示已激活(预期行为)

所以,我的问题是,为什么第一个消息框(窗口)没有显示为活动状态?我最初在GDB命令行下运行Python漂亮的打印机时发现这个问题,因为我想使用一些python漂亮的打印机来查看数据,比如这个GDB cv::Mat python object issue when debugging a c++ program,我需要在输入plot命令后立即显示OpenCV Image窗口.

但后来我发现这是一个与Python本身有关的问题.

最佳答案
我意识到原来的答案实际上并没有像第一次尝试那样激活窗口.但是,this SO answer在第一次尝试时对我有用.使用MB_SETMODAL标志(0x00001000)作为解决方法:

set_modal_flag = 0x00001000
ctypes.windll.user32.MessageBoxA(0,set_modal_flag)

(*编辑 – 以前的代码,可能“应该”工作,但没有.)

你能试试吗? 0x10选项是我在评论中提到的MB_SETFOREGROUNDWINDOW选项.它能做你想要的吗?

set_foreground_flag = 0x00010000
ctypes.windll.user32.MessageBoxA(0,set_foreground_flag)

至于“为什么”它不起作用,上面的答案也解释了这一点.我在过去也无法激活窗口并直接使用SetForegroundWindow()但在异步窗口上我可以直接调用它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读