kingfirekkk 发表于 2011-1-13 17:15:45

[已解决]-答案见三楼--禁止指定的窗口关闭,最小化,最大化

本帖最后由 kingfirekkk 于 2011-1-14 08:06 编辑

AU3有没有函数或者代码禁止指定窗口关闭,最大化,最小化?(此程式非AU3生成)

gzh888666 发表于 2011-1-13 19:33:44

现成的函数没有。代码肯定可以实现,期待高手出现吧!

sanhen 发表于 2011-1-13 20:41:16

本帖最后由 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:05:52

本帖最后由 pusofalse 于 2011-1-13 21:11 编辑

回复 3# sanhen


    学习了。
第二种方法,可能会存在一些问题,比如,对于原本就没有系统菜单的窗口,使用BitXOR就会给它加上系统菜单。使用BitAnd(_WinAPI_GetWindowLong($hWnd, $GWL_STYLE), BitXOR(-1, $WS_SYSMENU)) 应该会保险一点。

sanhen 发表于 2011-1-13 21:19:21

第二种方法是用BitXOR直接删除WS_SYSMENU风格,不管有没有,都是直接删除的。应该不会加上去吧?

pusofalse 发表于 2011-1-13 23:17:25

回复 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兄的代码是正确的。

netegg 发表于 2011-1-13 23:24:28

两位神仙,这个把标题栏的控件屏蔽了,如果程序有任务栏项的的话,应该还可以最小化吧

sanhen 发表于 2011-1-14 01:06:04

回复 6# pusofalse

学习了。没有认真测试,我以为删除的呢。多谢P版指点。

liyi-softs 发表于 2011-8-25 03:10:29

sanhen & pusofalse
又帮我大忙!```

chenbaker 发表于 2012-1-2 14:51:38

如果要恢复又应该怎样做?

chenbaker 发表于 2012-1-2 15:32:09

回复 3# sanhen

如果要恢复,又应该怎样写代码?谢谢。我实在找不到_WinAPI_GetWindowLong的说明

zxxputian1 发表于 2012-1-3 10:41:45

谢谢楼主共享

lnlyf 发表于 2012-1-14 11:11:40

禁用的可以这样:

全部去掉的,可以这样:
sanhen 发表于 2011-1-13 20:41 http://www.autoitx.com/images/common/back.gif

好象不能单独禁止最小化啊,还有请问怎么恢复原状呢?

lnlyf 发表于 2012-1-14 11:51:44

_Winapi_SetWindowLong($hWnd,$GWL_STYLE,BitXOR (_Winapi_GetWindowLong($hWnd,$GWL_STYLE), $WS_SYSMENU))
原来用这一句就可以恢复了,谢谢分享!

tttbbb999 发表于 2012-3-12 16:22:29

没用的,点'显示桌面' 就没了
页: [1] 2
查看完整版本: [已解决]-答案见三楼--禁止指定的窗口关闭,最小化,最大化