当前位置: 首页 > 面试题库 >

在Python中获取其他正在运行的进程窗口大小

张逸清
2023-03-14
问题内容

这听起来并不像恶意的那样,我想获取当前窗口的大小,而不是查看它们的内容。目的是弄清楚如果其他所有窗口都全屏显示,那么我也应该像这样启动。或者,尽管分辨率很高,但所有其他进程的分辨率仅为800x600,那么这可能正是用户想要的。为什么要让他们浪费时间和精力来调整我的窗口的大小以匹配他们拥有的所有其他窗口?我主要是Windows
devoloper,但如果有跨平台的方法可以做到,那么至少不会让我感到不安。


问题答案:

使用WindowMover文章和Nattee
Niparnan的博客
文章中的提示,我设法创建了这个:

import win32con
import win32gui

def isRealWindow(hWnd):
    '''Return True iff given window is a real Windows application window.'''
    if not win32gui.IsWindowVisible(hWnd):
        return False
    if win32gui.GetParent(hWnd) != 0:
        return False
    hasNoOwner = win32gui.GetWindow(hWnd, win32con.GW_OWNER) == 0
    lExStyle = win32gui.GetWindowLong(hWnd, win32con.GWL_EXSTYLE)
    if (((lExStyle & win32con.WS_EX_TOOLWINDOW) == 0 and hasNoOwner)
      or ((lExStyle & win32con.WS_EX_APPWINDOW != 0) and not hasNoOwner)):
        if win32gui.GetWindowText(hWnd):
            return True
    return False

def getWindowSizes():
    '''
    Return a list of tuples (handler, (width, height)) for each real window.
    '''
    def callback(hWnd, windows):
        if not isRealWindow(hWnd):
            return
        rect = win32gui.GetWindowRect(hWnd)
        windows.append((hWnd, (rect[2] - rect[0], rect[3] - rect[1])))
    windows = []
    win32gui.EnumWindows(callback, windows)
    return windows

for win in getWindowSizes():
    print win

您需要Win32 Extensions for
Python模块
才能正常工作。

编辑:我发现GetWindowRect比给出了更正确的结果GetClientRect。来源已更新。



 类似资料:
  • 问题内容: 我有两个Java swing应用程序(意味着在两个JVM中运行)。有什么办法可以在它们之间切换吗?通过Java代码激活另一个应用程序的窗口? 问题答案: 您可以尝试使用JNA。我将使用Maven为您提供一些适用于Windows的代码(或多或少适用于其他系统):(对不起,但我无法正确设置格式) 创建Maven项目,并添加依赖项:

  • 问题内容: 我正在尝试获取Windows机器上所有当前正在运行的进程的列表。 我正在尝试通过JNA的winapi调用EnumProcesses-> OpenProcess-> GetModuleBaseNameW-> CloseHandle尝试OpenProcess调用时失败。GetLastError返回5(ERROR_ACCESS_DENIED)。 这是我的代码: 问题答案: 调用with 表示

  • 问题内容: 我有两个pandas数据框,它们有一些共同点。 假设是的子集。 如何获取dataframe1中不在dataframe2中的行? 问题答案: 一种方法是存储两个df的内部合并结果,然后我们可以简单地在一行的值不在此通用值中时选择行: 编辑 你发现的另一种方法是使用isin它将产生NaN可删除的行: 但是,如果df2不能以相同的方式开始行,那么它将行不通: 将产生整个df:

  • 我正在运行基于这里所示示例的代码,在OS X上使用Eclipse,我正在使用JFreeChart和JCommon库。 正如我在标题中所说,程序正在运行,但没有显示任何内容。作为检查,我尝试使用printData()方法打印数据,它工作得非常好。它正确地从yahoo csv文件中获取数据。 我甚至尝试过使用一小部分数据(20行),但它一直不显示。 问题可能只是在显示JFrame窗口时。 我插入的试图

  • 我有一个流是消费的Flink Kafka消费者将加入另一个流为定义的窗口大小,如Time.milliseconds(10000)。 如何在运行时将窗口大小更改为Time.milliseconds(20000)?

  • 问题内容: 如何使用python获取和设置窗口(任何Windows程序)的位置和大小? 问题答案: 假设您使用的是Windows,请尝试使用带有和功能的的模块。 如果您使用的是Mac OS X,则可以尝试使用。 对于Linux,您可以尝试X11的众多接口之一。 编辑: Windows的示例(未测试):