احصل على أحجام نوافذ العمليات الجارية الأخرى في Python

StackOverflow https://stackoverflow.com/questions/151846

سؤال

هذا ليس ضارًا كما يبدو، أريد الحصول على الحجم الحالي لنوافذهم، وليس النظر إلى ما بداخلها.والغرض من ذلك هو معرفة أنه إذا كانت كل نافذة أخرى في وضع ملء الشاشة، فيجب أن أبدأ بهذه الطريقة أيضًا.أو إذا كانت جميع العمليات الأخرى تبلغ 800 × 600 فقط على الرغم من وجود دقة كبيرة، فمن المحتمل أن يكون هذا ما يريده المستخدم.لماذا يجعلهم يضيعون الوقت والطاقة في تغيير حجم نافذتي لتتناسب مع جميع النوافذ الأخرى الموجودة لديهم؟أنا في المقام الأول مطور Windows ولكن لن يزعجني ذلك على الأقل إذا كانت هناك طريقة عبر الأنظمة الأساسية للقيام بذلك.

هل كانت مفيدة؟

المحلول

باستخدام تلميحات من مقالة 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 لوحدة بايثون لهذا العمل.

يحرر:لقد اكتشفت ذلك GetWindowRect يعطي نتائج صحيحة أكثر من GetClientRect.تم تحديث المصدر.

نصائح أخرى

أنا معجب كبير ب AutoIt.لديهم إصدار COM الذي يسمح لك باستخدام معظم وظائفهم من Python.

import win32com.client
oAutoItX = win32com.client.Dispatch( "AutoItX3.Control" )

oAutoItX.Opt("WinTitleMatchMode", 2) #Match text anywhere in a window title

width = oAutoItX.WinGetClientSizeWidth("Firefox")
height = oAutoItX.WinGetClientSizeHeight("Firefox")

print width, height

تفحص ال win32gui وحدة في ملحقات Windows لـ Python.قد يوفر بعض الوظائف التي تبحث عنها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top