anythinging 发表于 2019-12-5 20:21:40

【已解决】关于防止窗口被最小化

本帖最后由 anythinging 于 2019-12-7 08:19 编辑

各位大神,我想创建一个窗口,使其不被通过使用win+D或显示桌面最小化,现在通过$WS_EX_TOPMOST可以实现,但存在个问题,会挡住所有窗口,想请教下有没有好的方法来实现
$WinMain = GUICreate("WinMain",@DesktopWidth,@DesktopHeight,0,0,$WS_POPUP,$WS_EX_LAYERED+$WS_EX_TOOLWINDOW+$WS_EX_TOPMOST)
感谢指点!

zghwelcome 发表于 2019-12-6 23:15:59

**** Hidden Message *****

nmgwddj 发表于 2019-12-6 09:49:51

$Form1 = GUICreate("WinMain", 615, 437, 192, 124, $WS_POPUP, $WS_EX_TOOLWINDOW)
_WinAPI_SetParent(WinGetHandle($Form1), WinGetHandle(""))

haijie1223 发表于 2019-12-6 12:51:35

看了你的帖子,先是防止被关闭,然后是防止被最小化。
一个消息就可以搞定的。如此这般:

#NoTrayIcon
Global $MainForm = GUICreate("WinMain")
GUISetState()
GUIRegisterMsg(0x0112, 'WM_SYSCOMMAND')
While 1
WEnd
Func WM_SYSCOMMAND($hWnd, $iMsg, $wParam, $lParam)
      Switch $hWnd
                Case $MainForm
                        Switch $wParam
                              Case 0xF060 ;关闭
;~                                       Exit
                              Case 0xF020 ;最小化
;~                                       GUISetState(@SW_MINIMIZE)
                                        Return 0
                        EndSwitch
      EndSwitch
      Return 'GUI_RUNDEFMSG'
EndFunc   ;==>WM_SYSCOMMAND

anythinging 发表于 2019-12-6 16:42:15

haijie1223 发表于 2019-12-6 12:51
看了你的帖子,先是防止被关闭,然后是防止被最小化。
一个消息就可以搞定的。如此这般:

感谢回复,这个好象还是不能防止使用win+d,或点击显示桌面实现最小化的操作。

anythinging 发表于 2019-12-6 16:48:34

nmgwddj 发表于 2019-12-6 09:49


感谢回复,测试了这个代码点击最小化后窗口就不见了,同时也不能防止 显示桌面和win+d

haijie1223 发表于 2019-12-6 18:21:30

anythinging 发表于 2019-12-6 16:42
感谢回复,这个好象还是不能防止使用win+d,或点击显示桌面实现最小化的操作。

你说的那个软件是用的定时器,每隔两秒激活一次窗口而已。
#NoTrayIcon
Global $MainForm = GUICreate("WinMain")
GUISetState()
WinSetOnTop($MainForm,'',1)
GUIRegisterMsg(0x0112, 'WM_SYSCOMMAND')
While 1
        Sleep(2000)
        WinActivate($MainForm)
WEnd
Func WM_SYSCOMMAND($hWnd, $iMsg, $wParam, $lParam)
        Switch $hWnd
                Case $MainForm
                        Switch $wParam
                                Case 0xF060 ;关闭
;~                                         Exit
                                Case 0xF020 ;最小化
;~                                         GUISetState(@SW_MINIMIZE)
                                        Return 0
                        EndSwitch
        EndSwitch
        Return 'GUI_RUNDEFMSG'
EndFunc   ;==>WM_SYSCOMMAND

nmgwddj 发表于 2019-12-6 18:27:32

Windows 10 1809 17763 通过
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <WinAPI.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("WinMain", 615, 437, 192, 124, $WS_POPUP, $WS_EX_TOOLWINDOW)
_WinAPI_SetParent(WinGetHandle($Form1), WinGetHandle(""))
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit

        EndSwitch
WEnd

anythinging 发表于 2019-12-6 19:14:31

nmgwddj 发表于 2019-12-6 18:27
Windows 10 1809 17763 通过

感谢回复!一直用的系统是win10 10.0.17763.864,不行。
我换了一个虚拟机系统,2019,确实可以了。
;$Form1 = GUICreate("WinMain", 615, 437, 192, 124, $WS_POPUP, $WS_EX_TOOLWINDOW)
$Form1 = GUICreate("WinMain", @DesktopWidth, @DesktopHeight, 0, 0, $WS_POPUP, $WS_EX_TOOLWINDOW)
_WinAPI_SetParent(WinGetHandle($Form1), WinGetHandle(""))
但还遇到一个问题,如果用您的代码宽高是正常的,如果用变量@DesktopWidth, @DesktopHeight,就会变小,不知是什么原因。这个是加了_WinAPI_SetParent(WinGetHandle($Form1), WinGetHandle(""))后的效果

anythinging 发表于 2019-12-7 08:18:24

zghwelcome 发表于 2019-12-6 23:15
**** 本内容被作者隐藏 ****

感谢指点,这个是真真好用,不挑系统。:face (36):

zch11230 发表于 2019-12-8 11:55:27

看看隐藏回复

yuantian 发表于 2019-12-9 21:06:14

学习一下,的确很想知道如何办到。

chzj589 发表于 2019-12-11 12:20:19

回复看看本帖隐藏内容

boyhong 发表于 2019-12-15 16:33:47

学习一下~~~~~~~~~~~···

zhaoceshi 发表于 2020-1-3 09:44:19

先做个记号,以免以后会用到
页: [1]
查看完整版本: 【已解决】关于防止窗口被最小化