找回密码
 加入
搜索
楼主: sanmoking

[GUI管理] 如何使一个全屏窗口非置顶显示但永久覆盖桌面任务栏【已解决】

 火... [复制链接]
发表于 2012-2-29 15:37:11 | 显示全部楼层
回复 1# sanmoking

刚测试去掉GUISetStyle() 也可以.
 楼主| 发表于 2012-2-29 15:47:26 | 显示全部楼层
回复 14# 痒痒


    我换成最新的3.3.6.1,运行还是没有窗口,应该是$WS_POPUP, $WS_EX_LAYERED + $WS_EX_MDICHILD不能共存吧?
 楼主| 发表于 2012-2-29 15:55:00 | 显示全部楼层
回复 15# lixiaolong


    你这还是置顶啊
发表于 2012-2-29 16:51:59 | 显示全部楼层
好像大家都没明白你的意思,截一个式样看看。
发表于 2012-2-29 17:54:26 | 显示全部楼层
本帖最后由 lixiaolong 于 2012-2-29 18:33 编辑

回复 18# sanmoking

这个怎么样?XP不行Win7成功.

Global Const $WM_MOVE = 0x0003
Global Const $WM_LBUTTONDOWN = 0x0201
Global Const $GUI_RUNDEFMSG = 'GUI_RUNDEFMSG'
Global $TrayWnd = WinGetHandle('[CLASS:Shell_TrayWnd]')

$Width = 500
$Hight = 300
$WinHight = @DesktopHeight - 38 - $Hight

$hGui = GUICreate('窗口非置顶显示但永久覆盖桌面任务栏 by lixiaolong', $Width, $Hight, -1, -1)
GUISetState()

GUIRegisterMsg($WM_MOVE, "WM_MOVE")

While 1
        $msg = GUIGetMsg()
        If Not WinActive($hGui) Then
                WinSetOnTop($hGui, '', 0)
        EndIf
        Switch $msg
                Case -3
                        Exit
                Case -7
                        WinSetOnTop($TrayWnd, '', 0)
                        WinSetOnTop($hGui, '', 1)
                        WinSetOnTop($hGui, '', 0)
        EndSwitch
WEnd

Func WM_MOVE($hWnd, $iMsg, $iwParam, $ilParam)
        #forceref $hWnd, $iMsg, $iwParam, $ilParam
        Local $nY = BitShift($ilParam, 16)

        If $nY > $WinHight Then WinSetOnTop($hGui, '', 1)
        Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_MOVE

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×

评分

参与人数 1金钱 +22 收起 理由
sanmoking + 22 多谢帮助。

查看全部评分

发表于 2012-2-29 18:18:02 | 显示全部楼层
回复 4# afan
这是win7下的测试效果,好像是在任务栏下的

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×

评分

参与人数 1金钱 +30 收起 理由
afan + 30

查看全部评分

发表于 2012-2-29 18:21:56 | 显示全部楼层
回复  afan
这是win7下的测试效果,好像是在任务栏下的
zldfsz 发表于 2012-2-29 18:18



    那肯定是在下面了,没 Win7,没办法调试…
发表于 2012-2-29 18:34:58 | 显示全部楼层
回复 22# afan
将你的代码做了一点改动:将CLASS:Shell_TrayWnd改成CLASS:Button,在win7下也实现了之前xp下测试的效果,但现在用的win7,不知道在xp下是否有用
#include <WindowsConstants.au3>
HotKeySet('^q', '_Exit')
$hGui = GUICreate('任务栏 by afan', @DesktopWidth + 3, 50, 0, 2, $WS_POPUP, $WS_EX_LAYERED + $WS_EX_MDICHILD, WinGetHandle('[CLASS:Button]'))
GUICtrlCreateLabel('Ctrl - Q 退出', 100, 10, 100, 12)
GUISetBkColor(0x5896DF, $hGui)
WinSetTrans($hGui, '', 255)
GUISetState()

Do
Until GUIGetMsg() = -3

Func _Exit()
        Exit
EndFunc

评分

参与人数 1金钱 +22 收起 理由
sanmoking + 22 多谢帮助。

查看全部评分

发表于 2012-2-29 18:36:30 | 显示全部楼层
回复 23# zldfsz


    Xp 下不成,呵呵
发表于 2012-2-29 18:40:01 | 显示全部楼层
本帖最后由 zldfsz 于 2012-2-29 18:47 编辑

回复 24# afan


那就先判断是什么操作系统,再执行代码:
#include <WindowsConstants.au3>
If @OSVersion="WIN_7" Then
        $Handle=WinGetHandle('[CLASS:Button]')
Else
        $Handle=WinGetHandle('[CLASS:Shell_TrayWnd]')
EndIf
HotKeySet('^q', '_Exit')
$hGui = GUICreate('任务栏 by afan', @DesktopWidth + 3, 50, 0, 2, $WS_POPUP, $WS_EX_LAYERED + $WS_EX_MDICHILD,$Handle )
GUICtrlCreateLabel('Ctrl - Q 退出', 100, 10, 100, 12)
GUISetBkColor(0x5896DF, $hGui)
WinSetTrans($hGui, '', 255)
GUISetState()

Do
Until GUIGetMsg() = -3
 
Func _Exit()
        Exit
EndFunc

评分

参与人数 1金钱 +16 收起 理由
sanmoking + 16 多谢帮助。

查看全部评分

发表于 2012-3-2 20:30:01 | 显示全部楼层
好东西啊!
发表于 2012-3-2 20:30:03 | 显示全部楼层
好东西啊!好东西啊!
发表于 2012-3-3 23:37:51 | 显示全部楼层
AFAN现在很利害了啊
发表于 2012-3-4 15:22:45 | 显示全部楼层
高手就是高手,解决问题就是快!
发表于 2012-3-5 20:09:13 | 显示全部楼层
我觉得很简单啊
#include <WindowsConstants.au3>

$Pos = WinGetPos("[CLASS:Shell_TrayWnd]", "")                        ;取任务栏高度

$Gui = GUICreate("", @DesktopWidth, $Pos[3], 0, @DesktopHeight-$Pos[3], $WS_POPUP, $WS_EX_TOPMOST)
$Label = GUICtrlCreateLabel("单击退出", 1000, 10, 50, 15)

GUISetState()

Do
Until GUIGetMsg() = $Label
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-16 21:09 , Processed in 0.075875 second(s), 15 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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