我想在pywin32模块中级联窗口。我使用:win32gui.CascadeWindow()
但是引发了一个错误:
AttributeError:模块'win32gui'没有属性'CascadeWindow'。我该如何解决这个问题?
AttributeError:模块'win32gui'没有属性' cascade '。你是说:"CreateWindow"吗?
[MS。学习]:CascadeWindows函数(winuser.h)不是由Win32GUI(或任何其他)模块([GitHub]: mhammond/pywin32 - Python for Windows (pywin32) Extensions)的一部分)包装(导出)。
另一种方法是通过[Python]"直接"调用函数。ctypes - Python的外部函数库。
检查[SO]:在进一步执行之前,通过ctypes从Python调用的C函数返回错误的值(@CristiFati的答案)。
code00.py:
#!/usr/bin/env python
import ctypes as cts
import sys
from ctypes import wintypes as wts
#import win32api as wapi
MDITILE_SKIPDISABLED = 0x0002
MDITILE_ZORDER = 0x0004
def main(*argv):
kernel32 = cts.WinDLL("Kernel32.dll")
user32 = cts.WinDLL("User32.dll")
GetLastError = kernel32.GetLastError
GetLastError.argtypes = ()
GetLastError.restype = wts.DWORD
CascadeWindows = user32.CascadeWindows
CascadeWindows.argtypes = (wts.HWND, wts.UINT, wts.LPRECT, wts.UINT, wts.LPVOID)
CascadeWindows.restype = wts.WORD
hwnd = 0 # Desktop window
res = CascadeWindows(hwnd, MDITILE_ZORDER, None, 0, None)
print("Result: {:d}".format(res))
if res == 0:
# Could call wapi.GetLastError() instead, and avoid all CTypes boilerplate (the 4 lines above) for this function
print("GLE: {:d}".format(GetLastError()))
if __name__ == "__main__":
print("Python {:s} {:03d}bit on {:s}n".format(" ".join(elem.strip() for elem in sys.version.split("n")),
64 if sys.maxsize > 0x100000000 else 32, sys.platform))
rc = main(*sys.argv[1:])
print("nDone.n")
sys.exit(rc)
:
[cfati@CFATI-5510-0:e:WorkDevStackOverflowq074953594]> "e:WorkDevVEnvspy_pc064_03.10_test0Scriptspython.exe" code00.py Python 3.10.9 (tags/v3.10.9:1dd9be6, Dec 6 2022, 20:01:21) [MSC v.1934 64 bit (AMD64)] 064bit on win32 Result: 29 Done.
作为旁注,我设法弄乱了桌面上的窗口(幸运的是,我没有像往常那样有那么多窗口,打开:))。
更新# 0
我提交了[GitHub]: mhammond/pywin32 -添加CascadeWindows包装(合并到mainon230104)。
Check [SO]:如何使用python更改打印队列中作业的用户名&win32print (@CristiFati的答案)(在最后)可能的方法走得更远。