Найти ширину и высоту приложения - кроссплатформенность - PullRequest
0 голосов
/ 25 января 2012

Я ищу способ найти указанные размеры окна (ширина и высота). До сих пор я использовал функции AutoIt, просто записывая части имени окна / фрейма, и он работает так, как я этого хочу. Единственная проблема в том, что он работает только в MS Windows. Мне это нужно для работы кроссплатформенности (Windows & Linux).

Поскольку платформы очень разные, было бы необходимо иметь два сценария, один для системы Windows и один для Linux. И я не хотел бы полагаться на дополнительные программы (например, AutoIt). Я не хочу, чтобы это было "жестко закодировано" в сценарии, какой кадр выбрать. Мне нужно / хочу, чтобы он работал как AutoIt, указав имя фрейма или его части.

1 Ответ

0 голосов
/ 25 января 2012

Я понял, как я могу сделать это в Windows, благодаря Юриб ..

import win32con
import win32gui

def inText(haystack, needle, n):
    parts= haystack.split(needle, n+1)
    if len(parts)<=n+1:
        return False
    if len(haystack)-len(parts[-1])-len(needle):
        return True

def isRealWindow(hWnd):
    '''Return True if 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(text):
    '''Return a list of tuples (handler, (width, height)) for each real window.'''
    def callback(hWnd, extra):
        if not isRealWindow(hWnd):
            return
        title   = win32gui.GetWindowText(hWnd)
        rect    = win32gui.GetWindowRect(hWnd)
        isFrame = inText(title, text, 0)
        if(isFrame):
            windows.append((title, rect[2] - rect[0], rect[3] - rect[1], rect[0],rect[1]))
    windows = []
    win32gui.EnumWindows(callback, windows)
    return windows

def findWindow(text):
    window = getWindowSizes(text)
    name = window[0][0]
    w = window[0][1]
    h = window[0][2]
    x = window[0][3]
    y = window[0][4]

    return name,w,h,x,y

Теперь мне нужно знать, как я могу сделать что-то подобное в Linux .. Любые подсказки?

...