Tôi đang cố gắng viết một chương trình tìm thấy một cửa sổ bằng cách tìm kiếm tiêu đề của nó. Một khi nó đã tìm thấy cửa sổ, nó sẽ cố gắng để đưa nó lên phía trước. Tôi đang sử dụng API win32gui
để đạt được điều này. Tôi có thể làm cho nó hoạt động được nhiều nhất, nhưng vì lý do nào đó nó không hoạt động nếu taskmanager ở phía trước. Tôi có mã mẫu sau.Python win32gui SetAsForegroundWindow chức năng không hoạt động đúng
import win32gui, win32con
import re, traceback
from time import sleep
class cWindow:
def __init__(self):
self._hwnd = None
def BringToTop(self):
win32gui.BringWindowToTop(self._hwnd)
def SetAsForegroundWindow(self):
win32gui.SetForegroundWindow(self._hwnd)
def Maximize(self):
win32gui.ShowWindow(self._hwnd, win32con.SW_MAXIMIZE)
def setActWin(self):
win32gui.SetActiveWindow(self._hwnd)
def _window_enum_callback(self, hwnd, wildcard):
'''Pass to win32gui.EnumWindows() to check all the opened windows'''
if re.match(wildcard, str(win32gui.GetWindowText(hwnd))) != None:
self._hwnd = hwnd
def find_window_wildcard(self, wildcard):
self._hwnd = None
win32gui.EnumWindows(self._window_enum_callback, wildcard)
def main():
sleep(5)
try:
wildcard = ".*Building Operation WorkStation.*"
cW = cWindow()
cW.find_window_wildcard(wildcard)
cW.Maximize()
cW.BringToTop()
cW.SetAsForegroundWindow()
except:
f = open("log.txt", "w")
f.write(traceback.format_exc())
print traceback.format_exc()
main()
Tôi đã ghép nối chúng với nhau từ nhiều nguồn trực tuyến. Nó có vẻ làm việc cho hầu hết các phần nhưng đối với một số cửa sổ như trình quản lý tác vụ, nó sẽ làm việc đôi khi nhưng không thành công. Khi nó không hoạt động đúng, tất cả những gì tôi thấy là biểu tượng ứng dụng nhấp nháy màu vàng. Có một cách thích hợp để làm điều này để đảm bảo rằng cửa sổ mà tôi quan tâm được thiết lập để foreground 100% số lần? Tôi không chắc chắn nếu điều này là có liên quan nhưng tôi đang sử dụng Windows 7 Professional (32-bit) với Gói Dịch vụ 1.
nên không này: 'win32gui.GetWindowLong (hwnd, win32con.GWL_EXSTYLE) & win32con.WS_EX_TOPMOST' được' win32gui.GetWindowLong (hwnd, win32con.GWL_EXSTYLE & win32con.WS_EX_TOPMOST) '? Bạn đang cố gắng để bit và chúng lại với nhau phải không? – IronManMark20
@ IronManMark20: 'win32gui.GetWindowLong (hwnd, win32con.GWL_EXSTYLE)' trả về một trường bit, và '& win32con.WS_EX_TOPMOST' kiểm tra nếu một bit cụ thể được thiết lập. Những gì bạn đang làm có khả năng dẫn đến một cờ không hợp lệ được chuyển đến 'GetWindowLong'. – mklement0
OK. Nó trông có vẻ sai. Cảm ơn. – IronManMark20