windows 我想在pywin32模块中创建窗口动画()

qv7cva1a  于 2023-01-06  发布在  Windows
关注(0)|答案(1)|浏览(241)

我想使用某个函数AnimateWindow()(来自API Windows函数)执行Python中以下代码的操作

var
   hWind: HWND;

begin
   Label1.Caption := 'function: AnimateWindow';
   Label1.Font.Size := 15;

   hWind := Form1.Handle;
   If (AnimateWindow(hWind, 1500, AW_HIDE) = True) Then
       Edit1.Text := 'Done'
   Else
   Begin
       Edit1.Text := 'ERROR';
       Edit2.Text := IntToStr(GetLastError());
   End;
end;

我尝试了下面的代码,但没有工作

import win32gui

hwnd = win32gui.FindWindow(None, "Untitled - Notepad")
win32gui.AnimateWindow(hwnd, 1500,0x00010000, True)
bbox = win32gui.GetWindowRect(hwnd)
xmakbtuz

xmakbtuz1#

问题:
1.* * 这不是[SO]: How to create a Minimal, Reproducible Example (reprex (mcve))(不包含预期和实际输出),因此人们必须猜测问题所在**

  1. [ME.TimGolden]: win32gui.AnimateWindow[GitHub]: mhammond/pywin32 - Python for Windows (pywin32) Extensions的一部分)只接受3个参数,但您传递了4个
    1.根据( Package )[MS.Learn]: AnimateWindow function (winuser.h)强调是我的):
    第一个月
    类型:* HWND *
    要动画的窗口的句柄。调用线程必须拥有此窗口
    因此,这可以在(线程或)进程拥有的窗口上完成(与使用任何窗口的其他函数(如 * ShowWindow *)相反(如果用户有足够的权限))。
    我敢肯定,您的 * 记事本 * 窗口不符合标准,它很可能是独立于您的脚本启动的。
    我准备了一个小例子。
  • 代码00.py *:
#!/usr/bin/env python

import sys
import traceback as tb

import pywintypes as pwts
import win32api as wapi
import win32con as wcon
import win32gui as wgui

def main(*argv):
    if argv:  # Pass (at least) an argument when launching the script
        print("Create window")
        title = "Dummy Title"
        res = wgui.CreateWindow("SysListView32", title, 0, 1500, 700, 160, 90, None, None, None, None)
        print("CreateWindow returned {:}".format(res))
    else:
        title = "Untitled - Notepad"
    hwnd = wgui.FindWindow(None, title)
    if not hwnd:
        print("No window found")
        return -1
    print("Window {:} (title: {:s}) original rect: {:}".format(hwnd, title, wgui.GetWindowRect(hwnd)))
    flags = wcon.AW_CENTER
    print("Start animation")
    try:
        wgui.AnimateWindow(hwnd, 1500, flags)
    except pwts.error as e:
        tb.print_exc()
        return -1
    print("Animation done")
    print("Window final rect: {:}".format(wgui.GetWindowRect(hwnd)))
    input("Press <Enter> to exit... ")

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:\Work\Dev\StackOverflow\q074968476]> "e:\Work\Dev\VEnvs\py_pc064_03.10_test0\Scripts\python.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

Window 2623562 (title: Untitled - Notepad) original rect: (146, 161, 1834, 920)
Start animation
Traceback (most recent call last):
  File "e:\Work\Dev\StackOverflow\q074968476\code00.py", line 28, in main
    wgui.AnimateWindow(hwnd, 1500, flags)
pywintypes.error: (0, 'AnimateWindow', 'No error message is available')

Done.

[cfati@CFATI-5510-0:e:\Work\Dev\StackOverflow\q074968476]> "e:\Work\Dev\VEnvs\py_pc064_03.10_test0\Scripts\python.exe" code00.py 1
Python 3.10.9 (tags/v3.10.9:1dd9be6, Dec  6 2022, 20:01:21) [MSC v.1934 64 bit (AMD64)] 064bit on win32

Create window
CreateWindow returned 1183484
Window 1183484 (title: Dummy Title) original rect: (1500, 700, 1660, 790)
Start animation
Animation done
Window final rect: (1500, 700, 1660, 790)
Press <Enter> to exit...

Done.

在第2次运行期间,当窗口扩大("增长")时,拍摄了一张屏幕截图:

相关问题