找回密码
 加入
搜索
查看: 22778|回复: 37

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

 火... [复制链接]
发表于 2012-2-29 11:15:42 | 显示全部楼层 |阅读模式
本帖最后由 sanmoking 于 2012-2-29 18:57 编辑

研究好久没有找到,如何创建一个全屏gui,不置顶显示(就是非激活时不遮挡其他普通窗口),却能一直在系统任务栏之上显示界面,即使该窗口处于非激活状态也能覆盖任务栏。且任务栏不出现按钮。
感觉比较难,换个问题,看有高手能达到不能:【窗口gui永远置于当前激活窗口的下方,要求不改变当前激活的窗口是否顶层显示的属性】


第一个问题,随着我程序的进度,已经脱离了我原来的要求,现在已经不用上边的解决方法了。不过还是谢谢大家。

第二个问题其实我已经有想法了,我最后还是用的顶层显示的手段暂时达到效果。。请移步【关灯】

评分

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

查看全部评分

 楼主| 发表于 2012-2-29 11:16:58 | 显示全部楼层
本帖最后由 sanmoking 于 2012-2-29 12:05 编辑

一般的窗口不想置顶,一旦非激活的时候,任务栏就会遮住该窗口了,所以要求自己程序的窗口即使非激活状态也能在任务栏之上,不要那种单纯设置成顶层窗口的。
发表于 2012-2-29 11:43:16 | 显示全部楼层
指定父窗口为 WinGetHandle('[CLASS:Shell_TrayWnd]') 就ok了
发表于 2012-2-29 12:03:55 | 显示全部楼层
#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:Shell_TrayWnd]'))
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 12:04:30 | 显示全部楼层
回复 3# afan


    我不是要一直显示任务栏,我是要让我自己的程序盖住任务栏。
发表于 2012-2-29 12:05:06 | 显示全部楼层
回复 5# sanmoking


    4#不是吗
 楼主| 发表于 2012-2-29 12:13:49 | 显示全部楼层
本帖最后由 sanmoking 于 2012-2-29 12:17 编辑

回复 6# afan


    你的代码我在win7和3.3.1.6环境下,运行显示不了界面
我用
$hGui = GUICreate("关灯", @DesktopWidth, @DesktopHeight, 0, 0, $WS_POPUP, -1, WinGetHandle('[CLASS:Shell_TrayWnd]'))
的话,任务栏是在自己程序的上层。
发表于 2012-2-29 12:17:15 | 显示全部楼层
回复 7# sanmoking


    没有 win7,可能 win7 的任务栏类不是 Shell_TrayWnd
 楼主| 发表于 2012-2-29 12:20:00 | 显示全部楼层
win7的任务栏是Shell_TrayWnd没错
发表于 2012-2-29 12:23:30 | 显示全部楼层
回复 9# sanmoking


    你 7# 代码的扩展样式是默认的,那更会没效果
发表于 2012-2-29 12:28:43 | 显示全部楼层
居然没有用 Win7 的帮忙测试下,这个论坛…
sanmoking 可是热心人啊。
发表于 2012-2-29 14:11:41 | 显示全部楼层
afan 发表于 2012-2-29 12:03


xp下测试通过,这代码太牛了,收藏了。现在没win7,晚上回去才能测试

评分

参与人数 2金钱 +29 贡献 +1 收起 理由
sanmoking + 9 多谢帮助。
afan + 20 + 1 +

查看全部评分

发表于 2012-2-29 14:19:03 | 显示全部楼层
终于有人帮忙测试了,谢谢
我这也是 XP
发表于 2012-2-29 14:37:37 | 显示全部楼层
本帖最后由 痒痒 于 2012-2-29 14:38 编辑

win7下 可以覆盖 其他程序可以点击使用。

评分

参与人数 2金钱 +29 收起 理由
sanmoking + 9 多谢帮助。
afan + 20 +

查看全部评分

发表于 2012-2-29 15:29:09 | 显示全部楼层
本帖最后由 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[0] & 'x ' & $pos[1] & @CRLF)
        If $pos[1] > $WinHight Then
                GUISetStyle(-1, 0x00000008, $hGui)
                WinSetOnTop($hGui, '', 1)
        Else
                GUISetStyle(-1, -1, $hGui)
                WinSetOnTop($hGui, '', 0)
        EndIf
        Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_MOVE

评分

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

查看全部评分

您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-12-31 07:15 , Processed in 0.098863 second(s), 31 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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