我们从Python开源项目中,提取了以下26个代码示例,用于说明如何使用ctypes.wintypes.HWND。
def window__find_handles(): """ Find all the top-level window handles (type HWND) :return: list of window handles. """ ret = [] def callback(hwnd): ret.append(hwnd) # return True to continue the enumeration return True window__enum_window_handles(callback) return ret
def get_actual_rect(hwnd): """Gets correct dimensions of a DWM controlled window "Retrieves the extended frame bounds rectangle in screen space". Windows 10 reports (technically) incorrect window dimensions, so this is used to obtain the correct window dimensions. Args: hwnd: The handle to the window from which the attribute data is retrieved. Returns: A windows RECT structure of the correct window dimensions. """ rect = RECT() DWMWA_EXTENDED_FRAME_BOUNDS = 9 dwmapi.DwmGetWindowAttribute(HWND(hwnd), DWORD(DWMWA_EXTENDED_FRAME_BOUNDS), ctypes.byref(rect), ctypes.sizeof(rect)) # actual_x1 = rect.left # actual_y1 = rect.top # actual_x2 = rect.right # actual_y2 = rect.bottom # return [actual_x1, actual_y1, actual_x2, actual_y2] return rect
def _set_argtypes(self): ''' Functions arguments. ''' self.MONITORENUMPROC = WINFUNCTYPE(INT, DWORD, DWORD, POINTER(RECT), DOUBLE) windll.user32.GetSystemMetrics.argtypes = [INT] windll.user32.EnumDisplayMonitors.argtypes = [HDC, c_void_p, self.MONITORENUMPROC, LPARAM] windll.user32.GetWindowDC.argtypes = [HWND] windll.gdi32.CreateCompatibleDC.argtypes = [HDC] windll.gdi32.CreateCompatibleBitmap.argtypes = [HDC, INT, INT] windll.gdi32.SelectObject.argtypes = [HDC, HGDIOBJ] windll.gdi32.BitBlt.argtypes = [HDC, INT, INT, INT, INT, HDC, INT, INT, DWORD] windll.gdi32.DeleteObject.argtypes = [HGDIOBJ] windll.gdi32.GetDIBits.argtypes = [HDC, HBITMAP, UINT, UINT, c_void_p, POINTER(BITMAPINFO), UINT]
def finder(register): ''' ???????broker??????? ''' team = set() buff = buffer(32) @ctypes.WINFUNCTYPE(BOOL, HWND, LPARAM) def check(hwnd, extra): if op.IsWindowVisible(hwnd): op.GetWindowTextW(hwnd, buff, 32) if '????' in buff.value: team.add(hwnd) return 1 op.EnumWindows(check, 0) def get_nickname(hwnd): account = hwnd for i in 59392, 0, 1711: account = op.GetDlgItem(account, i) op.SendMessageW(account, WM_GETTEXT, 32, buff) return register.get(buff.value[-3:]) return {get_nickname(hwnd): unity(hwnd) for hwnd in team if hwnd}
def test_issue_8959_b(self): from ctypes.wintypes import BOOL, HWND, LPARAM global windowCount windowCount = 0 @WINFUNCTYPE(BOOL, HWND, LPARAM) def EnumWindowsCallbackFunc(hwnd, lParam): global windowCount windowCount += 1 return True #Allow windows to keep enumerating windll.user32.EnumWindows(EnumWindowsCallbackFunc, 0)
def test_HWND(self): from ctypes import wintypes self.assertEqual(sizeof(wintypes.HWND), sizeof(c_void_p))
def get(intFolder): _SHGetFolderPath.argtypes = [_HWND, _ctypes.c_int, _HANDLE, _DWORD, _LPCWSTR] auPathBuffer = _cub(_MAX_PATH) exit_code=_SHGetFolderPath(0, intFolder, 0, 0, auPathBuffer) return auPathBuffer.value
def get_user_config_dir(): """Platform specific directory for user configuration. :returns: returns the user configuration directory. :rtype: string """ if os.name == 'nt': try: csidl_appdata = 26 shgetfolderpath = windll.shell32.SHGetFolderPathW shgetfolderpath.argtypes = [wintypes.HWND, ctypes.c_int, \ wintypes.HANDLE, wintypes.DWORD, wintypes.LPCWSTR] path_buf = wintypes.create_unicode_buffer(wintypes.MAX_PATH) result = shgetfolderpath(0, csidl_appdata, 0, 0, path_buf) if result == 0: return path_buf.value except ImportError: pass return os.environ['APPDATA'] else: return os.path.expanduser('~')
def WinMSGLoop(): """Run the main windows message loop.""" LPMSG = POINTER(MSG) LRESULT = c_ulong GetMessage = get_winfunc("user32", "GetMessageW", BOOL, (LPMSG, HWND, UINT, UINT)) TranslateMessage = get_winfunc("user32", "TranslateMessage", BOOL, (LPMSG,)) # restype = LRESULT DispatchMessage = get_winfunc("user32", "DispatchMessageW", LRESULT, (LPMSG,)) msg = MSG() lpmsg = byref(msg) while GetMessage(lpmsg, HWND(), 0, 0) > 0: TranslateMessage(lpmsg) DispatchMessage(lpmsg)
def shell__open_start_menu(show_taskbar): # Find the task bar window taskbar_hwnd = windll.user32.FindWindowW("Shell_TrayWnd", None) if taskbar_hwnd is None or 0 == taskbar_hwnd: raise WinError() taskbar_size = wintypes.RECT() windll.user32.GetWindowRect(taskbar_hwnd, byref(taskbar_size)) # Find the process ID of the taskbar window. taskbar_pid = wintypes.DWORD() windll.user32.GetWindowThreadProcessId(taskbar_hwnd, byref(taskbar_pid)) triggered_start = [False] # Find the "Start" button in the taskbar. def child_window_callback(hwnd, lparam): class_buff = create_unicode_buffer(256) length = windll.user32.GetClassNameW(hwnd, class_buff, 256) if length <= 0: class_buff = None else: class_buff = class_buff.value[:length] length = windll.user32.GetWindowTextLengthW(hwnd) if length > 0: title_buff = create_unicode_buffer(length + 1) windll.user32.GetWindowTextW(hwnd, title_buff, length + 1) print("DEBUG - Inspecting {0} | {2} = {1}".format(hwnd, title_buff.value, class_buff)) if title_buff.value == "Start": # Found the window print("DEBUG sending Click message") # Attach our thread input to the start button, so we can send it a message. current_thread_id = windll.kernel32.GetCurrentThreadId() thread_process_id = windll.user32.GetWindowThreadProcessId(hwnd, None) m_res = windll.user32.AttachThreadInput(thread_process_id, current_thread_id, True) m_res = windll.user32.SendMessageW(hwnd, WM_LBUTTONDOWN, MK_LBUTTON, 0) if m_res == 0: # Don't look anymore triggered_start[0] = True return False else: try: print("<<ERROR pressing start button>>") raise WinError() except OSError: import traceback traceback.print_exc() return True callback_type = CFUNCTYPE(wintypes.BOOL, wintypes.HWND, wintypes.LPARAM) callback_ptr = callback_type(child_window_callback) print("DEBUG Iterating over windows for taskbar pid {0}".format(taskbar_pid.value)) windll.user32.EnumChildWindows(taskbar_hwnd, callback_ptr, 0) # if not triggered_start[0]: # raise OSError("Could not find start button")