您好,我正在尝试使用ctypes和window API更改活动窗口的样式。
import ctypes
from ctypes import *
title = "MY CUSTOM WINDOW NAME"
b_string1 = title.encode('utf-8')
Active_W = ctypes.windll.user32.GetActiveWindow()
ctypes.windll.user32.SetWindowTextA(Active_W,ctypes.c_char_p(b_string1)) #rename window not working
成功更改了活动名称。
但是
import bpy
import ctypes
from ctypes import *
SWP_HIDEWINDOW = 0x80 #HIDE
SWP_SHOWWINDOW = 0x40 #SHOW
SWP_NOMOVE = 0x0002 #NO MOVE
SWP_NOSIZE = 0x0001 #NO SIZE
SIZESW_MINIMIZE = 6
SW_RESTORE = 9
GWL_STYLE = -16
GWL_EXSTYLE = -20
title = "0x00200000L"
b_string1 = title.encode('utf-8')
Active_W = ctypes.windll.user32.GetActiveWindow()
ctypes.windll.user32.SetWindowLongPtrA(Active_W,GWL_STYLE,b_string1)
ctypes.windll.user32.SetWindowPos(Active_W,-1,2560,60,1000,1000,SWP_SHOWWINDOW|SWP_NOMOVE)
使窗口冻结?没有任何一种样式对我有用,它会保持冻结状态(例如,通过Blender进行此操作,是否可以将其链接起来?或者我做错了吗?)有时它会立即冻结,有时只有当我单击鼠标离开时才会冻结新窗口有关于SetWindowLongPtr和ctypes的示例吗?
我从倪的建议中尝试过
import ctypes
from ctypes import *
Active_W = ctypes.windll.user32.GetActiveWindow()
SWP_SHOWWINDOW = 0x40 #SHOW
SWP_NOMOVE = 0x0002 #NO MOVE
GWL_STYLE = -16
GWL_EXSTYLE = -20
EXSTYLE = ctypes.windll.user32.GetWindowLongPtrA(Active_W,GWL_EXSTYLE)
STYLE = ctypes.windll.user32.GetWindowLongPtrA(Active_W,GWL_STYLE)
flags = ctypes.c_long(0x00800000|STYLE)
b_string1 = ctypes.byref(flags)
ctypes.windll.user32.SetWindowLongPtrA(Active_W,GWL_STYLE,b_string1)
ctypes.windll.user32.SetWindowPos(Active_W,-1,2560,60,1000,1000,SWP_SHOWWINDOW|SWP_NOMOVE)
它不再冻结了,但是我没有看到样式改变吗? 如果我更改EXSTYLE,则任何代码会将窗口转换为此。 exstyle change对此进行任何样式更改any style change
答案 0 :(得分:0)
您传递给b_string1
的参数SetWindowLongPtrA
似乎是完全错误的。第三个参数应为窗口样式,类型为LONG_PTR
,同时将其传递给字符串。请尝试以下操作:
flags = ctypes.c_long(0x00200000L)
b_string1 = ctypes.byref(flags)
此外,您可能应该首先使用GetWindowLongPtrA
来获取当前标志,并避免覆盖所有标志。