احصل على أحجام نوافذ العمليات الجارية الأخرى في Python
سؤال
هذا ليس ضارًا كما يبدو، أريد الحصول على الحجم الحالي لنوافذهم، وليس النظر إلى ما بداخلها.والغرض من ذلك هو معرفة أنه إذا كانت كل نافذة أخرى في وضع ملء الشاشة، فيجب أن أبدأ بهذه الطريقة أيضًا.أو إذا كانت جميع العمليات الأخرى تبلغ 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.قد يوفر بعض الوظائف التي تبحث عنها.