找回密码
 加入
搜索
查看: 11275|回复: 15

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

 火.. [复制链接]
发表于 2011-1-13 17:15:45 | 显示全部楼层 |阅读模式
本帖最后由 kingfirekkk 于 2011-1-14 08:06 编辑

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

评分

参与人数 1金钱 +20 收起 理由
afan + 20 感谢主动将修改帖子分类为[已解决],请继续 ...

查看全部评分

发表于 2011-1-13 19:33:44 | 显示全部楼层
现成的函数没有。代码肯定可以实现,期待高手出现吧!
发表于 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))

评分

参与人数 3金钱 +60 贡献 +6 收起 理由
lnlyf + 20 + 1
kingfirekkk + 30 + 5 谢谢三恨兄!学习了..
pusofalse + 10 学习了。

查看全部评分

发表于 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)) 应该会保险一点。
发表于 2011-1-13 21:19:21 | 显示全部楼层
第二种方法是用BitXOR直接删除WS_SYSMENU风格,不管有没有,都是直接删除的。应该不会加上去吧?
发表于 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兄的代码是正确的。
发表于 2011-1-13 23:24:28 | 显示全部楼层
两位神仙,这个把标题栏的控件屏蔽了,如果程序有任务栏项的的话,应该还可以最小化吧
发表于 2011-1-14 01:06:04 | 显示全部楼层
回复 6# pusofalse

学习了。没有认真测试,我以为删除的呢。多谢P版指点。
发表于 2011-8-25 03:10:29 | 显示全部楼层
sanhen & pusofalse
又帮我大忙!```
发表于 2012-1-2 14:51:38 | 显示全部楼层
如果要恢复又应该怎样做?
发表于 2012-1-2 15:32:09 | 显示全部楼层
回复 3# sanhen

如果要恢复,又应该怎样写代码?谢谢。我实在找不到_WinAPI_GetWindowLong的说明
发表于 2012-1-3 10:41:45 | 显示全部楼层
谢谢楼主共享
发表于 2012-1-14 11:11:40 | 显示全部楼层
禁用的可以这样:

全部去掉的,可以这样:
sanhen 发表于 2011-1-13 20:41


好象不能单独禁止最小化啊,还有请问怎么恢复原状呢?
发表于 2012-1-14 11:51:44 | 显示全部楼层
_Winapi_SetWindowLong($hWnd,$GWL_STYLE,BitXOR (_Winapi_GetWindowLong($hWnd,$GWL_STYLE), $WS_SYSMENU))
原来用这一句就可以恢复了,谢谢分享!
发表于 2012-3-12 16:22:29 | 显示全部楼层
没用的,点'显示桌面' 就没了
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-19 11:18 , Processed in 0.077936 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表