如何使一个全屏窗口非置顶显示但永久覆盖桌面任务栏【已解决】
本帖最后由 sanmoking 于 2012-2-29 18:57 编辑研究好久没有找到,如何创建一个全屏gui,不置顶显示(就是非激活时不遮挡其他普通窗口),却能一直在系统任务栏之上显示界面,即使该窗口处于非激活状态也能覆盖任务栏。且任务栏不出现按钮。
感觉比较难,换个问题,看有高手能达到不能:【窗口gui永远置于当前激活窗口的下方,要求不改变当前激活的窗口是否顶层显示的属性】
第一个问题,随着我程序的进度,已经脱离了我原来的要求,现在已经不用上边的解决方法了。不过还是谢谢大家。
第二个问题其实我已经有想法了,我最后还是用的顶层显示的手段暂时达到效果。。请移步【关灯】 本帖最后由 sanmoking 于 2012-2-29 12:05 编辑
一般的窗口不想置顶,一旦非激活的时候,任务栏就会遮住该窗口了,所以要求自己程序的窗口即使非激活状态也能在任务栏之上,不要那种单纯设置成顶层窗口的。 指定父窗口为 WinGetHandle('') 就ok了 #include <WindowsConstants.au3>
HotKeySet('^q', '_Exit')
$hGui = GUICreate('任务栏 by afan', @DesktopWidth + 3, 50, 0, 2, $WS_POPUP, $WS_EX_LAYERED + $WS_EX_MDICHILD, WinGetHandle(''))
GUICtrlCreateLabel('Ctrl - Q 退出', 100, 10, 100, 12)
GUISetBkColor(0x5896DF, $hGui)
WinSetTrans($hGui, '', 255)
GUISetState()
Do
Until GUIGetMsg() = -3
Func _Exit()
Exit
EndFunc 回复 3# afan
我不是要一直显示任务栏,我是要让我自己的程序盖住任务栏。 回复 5# sanmoking
4#不是吗 本帖最后由 sanmoking 于 2012-2-29 12:17 编辑
回复 6# afan
你的代码我在win7和3.3.1.6环境下,运行显示不了界面
我用
$hGui = GUICreate("关灯", @DesktopWidth, @DesktopHeight, 0, 0, $WS_POPUP, -1, WinGetHandle(''))
的话,任务栏是在自己程序的上层。 回复 7# sanmoking
没有 win7,可能 win7 的任务栏类不是 Shell_TrayWnd win7的任务栏是Shell_TrayWnd没错 回复 9# sanmoking
你 7# 代码的扩展样式是默认的,那更会没效果 居然没有用 Win7 的帮忙测试下,这个论坛…
sanmoking 可是热心人啊。
afan 发表于 2012-2-29 12:03 http://www.autoitx.com/images/common/back.gif
xp下测试通过,这代码太牛了,收藏了。现在没win7,晚上回去才能测试 终于有人帮忙测试了,谢谢
我这也是 XP 本帖最后由 痒痒 于 2012-2-29 14:38 编辑
win7下 可以覆盖 其他程序可以点击使用。 本帖最后由 lixiaolong 于 2012-2-29 15:33 编辑
回复 1# sanmoking
XP,Win7测试成功.
Global Const $WM_MOVE = 0x0003
Global Const $GUI_RUNDEFMSG = 'GUI_RUNDEFMSG'
$Width = 500
$Hight = 300
$WinHight = @DesktopHeight - 60 - $Hight
$hGui = GUICreate('窗口非置顶显示但永久覆盖桌面任务栏 by lixiaolong', $Width, $Hight, -1, -1)
GUISetState()
GUIRegisterMsg($WM_MOVE, "WM_MOVE")
Do
Until GUIGetMsg() = -3
Func WM_MOVE($hWnd, $iMsg, $iwParam, $ilParam)
#forceref $hWnd, $iMsg, $iwParam, $ilParam
$pos = WinGetPos($hGui)
;~ ConsoleWrite($pos & 'x ' & $pos & @CRLF)
If $pos > $WinHight Then
GUISetStyle(-1, 0x00000008, $hGui)
WinSetOnTop($hGui, '', 1)
Else
GUISetStyle(-1, -1, $hGui)
WinSetOnTop($hGui, '', 0)
EndIf
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_MOVE