[已解决]-答案见三楼--禁止指定的窗口关闭,最小化,最大化
本帖最后由 kingfirekkk 于 2011-1-14 08:06 编辑AU3有没有函数或者代码禁止指定窗口关闭,最大化,最小化?(此程式非AU3生成) 现成的函数没有。代码肯定可以实现,期待高手出现吧! 本帖最后由 sanhen 于 2011-1-13 20:43 编辑
禁用的可以这样:
#include <winapi.au3>
#include <WindowsConstants.au3>
#include <Constants.au3>
#include <GuiMenu.au3>
Const $MF_BYCOMMAND = 0x0
$hWnd=WinGetHandle("我的文档","")
_GUICtrlMenu_RemoveMenu(_GUICtrlMenu_GetSystemMenu($hWnd,FALSE),$SC_MINIMIZE,$MF_BYCOMMAND)
_GUICtrlMenu_RemoveMenu(_GUICtrlMenu_GetSystemMenu($hWnd,FALSE),$SC_MAXIMIZE,$MF_BYCOMMAND)
_GUICtrlMenu_RemoveMenu(_GUICtrlMenu_GetSystemMenu($hWnd,FALSE),$SC_RESTORE,$MF_BYCOMMAND)
_GUICtrlMenu_RemoveMenu(_GUICtrlMenu_GetSystemMenu($hWnd,FALSE),$SC_CLOSE,$MF_BYCOMMAND)
全部去掉的,可以这样:
_Winapi_SetWindowLong($hWnd,$GWL_STYLE,BitXOR (_Winapi_GetWindowLong($hWnd,$GWL_STYLE), $WS_SYSMENU))
本帖最后由 pusofalse 于 2011-1-13 21:11 编辑
回复 3# sanhen
学习了。
第二种方法,可能会存在一些问题,比如,对于原本就没有系统菜单的窗口,使用BitXOR就会给它加上系统菜单。使用BitAnd(_WinAPI_GetWindowLong($hWnd, $GWL_STYLE), BitXOR(-1, $WS_SYSMENU)) 应该会保险一点。 第二种方法是用BitXOR直接删除WS_SYSMENU风格,不管有没有,都是直接删除的。应该不会加上去吧? 回复 5# sanhen
对于没有WS_SYSMENU风格的窗口,用BitXOR会给它加上这个风格,并不是直接删除的。
比如GetWindowLong函数返回的值是0xC20000,这个值中没有包含WS_SYSMENU,因为WS_SYSMENU的值是0x80000,用BitXOR(0xC20000, $WS_SYSMENU)得到的结果是0xCA0000,结果WS_SYSMENU被包含进去了。
相反的,如果原本的窗口已经有了WS_SYSMENU风格,比如风格值是0xCA0000,用BitXOR(0xCA0000, $WS_SYSMENU)得到0xC20000,即删除了WS_SYSMENU,这样情况下,sanhen兄的代码是正确的。 两位神仙,这个把标题栏的控件屏蔽了,如果程序有任务栏项的的话,应该还可以最小化吧 回复 6# pusofalse
学习了。没有认真测试,我以为删除的呢。多谢P版指点。 sanhen & pusofalse
又帮我大忙!``` 如果要恢复又应该怎样做? 回复 3# sanhen
如果要恢复,又应该怎样写代码?谢谢。我实在找不到_WinAPI_GetWindowLong的说明 谢谢楼主共享 禁用的可以这样:
全部去掉的,可以这样:
sanhen 发表于 2011-1-13 20:41 http://www.autoitx.com/images/common/back.gif
好象不能单独禁止最小化啊,还有请问怎么恢复原状呢? _Winapi_SetWindowLong($hWnd,$GWL_STYLE,BitXOR (_Winapi_GetWindowLong($hWnd,$GWL_STYLE), $WS_SYSMENU))
原来用这一句就可以恢复了,谢谢分享! 没用的,点'显示桌面' 就没了
页:
[1]
2