找回密码
 加入
搜索
查看: 715|回复: 16

新手求助 win+D 或者任务栏”返回桌面“ 后怎么让窗口不被隐藏

[复制链接]
发表于 2023-9-18 20:10:12 | 显示全部楼层 |阅读模式
本帖最后由 24779987 于 2023-9-18 20:24 编辑

请教一个问题 win+D 或者任务栏”返回桌面“ 返回桌面后会隐藏所有窗口(并不是最小化窗口),如果添加 $WS_EX_TOPMOST 拓展样式后窗口会置顶不会被隐藏,但是这样窗口会在所有其他窗口之前,请大佬赐教怎么才能 不被 “返回桌面” 隐藏窗口,且窗口在桌面上,请赐教!
#RequireAdmin
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <WinAPI.au3>
#include <ACN_NET.au3>
#include <TrayConstants.au3>
#include <Clipboard.au3>

Local $sMyAutoItTitle = "network_info" ;
If WinExists($sMyAutoItTitle) Then Exit ;检测程序是否重复运行
AutoItWinSetTitle($sMyAutoItTitle)

Local $NetworkAdapterInfo = _NetworkAdapterInfo()
Local $ipadd = $NetworkAdapterInfo[1][4]
Local $macadd = $NetworkAdapterInfo[1][8]
Local $dns = $NetworkAdapterInfo[1][5]
Local $Form1


Local $iWidth = 230, $iHeight = 300, $iX = @DesktopWidth - $iWidth, $iY = 0
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("network_info", $iWidth, $iHeight, $iX, $iY, $WS_POPUP, $WS_EX_LAYERED + $WS_EX_TOOLWINDOW + $WS_EX_TOPMOST)
GUISetBkColor(0xF1F1F1)
_WinAPI_SetLayeredWindowAttributes($Form1, 0xF1F1F1, 0, $LWA_COLORKEY) ;设置透明

$Label1 = GUICtrlCreateLabel("计算机名:" & @ComputerName, 0, 10, 300, 50)
$Label2 = GUICtrlCreateLabel("系统版本:" & @OSVersion & " " & @OSArch, 0, 30, 300, 50)
$Label3 = GUICtrlCreateLabel("IP地址  :" & $ipadd, 0, 50, 300, 50)
$Label4 = GUICtrlCreateLabel("MAC地址 :" & $macadd, 0, 70, 300, 50)
$Label5 = GUICtrlCreateLabel("DNS地址 :" & $dns, 0, 90, 300, 50)


GUICtrlSetColor($Label1, 0xFFFFFF)
GUICtrlSetColor($Label2, 0xFFFFFF)
GUICtrlSetColor($Label3, 0xFFFFFF)
GUICtrlSetColor($Label4, 0xFFFFFF)
GUICtrlSetColor($Label5, 0xFFFFFF)


GUISetState(@SW_SHOW,$Form1)

#EndRegion ### END Koda GUI section ###





Local $NetworkAdapterInfo = _NetworkAdapterInfo()

Opt("TrayMenuMode", 3)

TraySetClick("9")
TraySetIcon("ip.ico")
TraySetState($TRAY_ICONSTATE_SHOW)
TraySetToolTip("IP地址:" & $NetworkAdapterInfo[1][4]) 
$MenuItem1 = TrayCreateItem("IP     :" & $NetworkAdapterInfo[1][4])
$MenuItem2 = TrayCreateItem("MAC :" & $NetworkAdapterInfo[1][8])
TrayCreateItem("DNS :" & $NetworkAdapterInfo[1][5])
TrayCreateItem("")
$MenuItem3 = TrayCreateItem("信息报修")
TrayCreateItem("")
$MenuItem4 = TrayCreateItem("exit")


While 1
        $msg = TrayGetMsg()

        Select
                Case $msg = $MenuItem1
                        _ClipBoard_SetData($NetworkAdapterInfo[1][4])
                        TrayTip("当前IP地址已复制到剪贴板", $NetworkAdapterInfo[1][4], 0, $TIP_ICONASTERISK)

                        
                Case $msg = $MenuItem2
                        _ClipBoard_SetData($NetworkAdapterInfo[1][8])
                        TrayTip("当前MAC地址已复制到剪贴板", $NetworkAdapterInfo[1][8], 0, $TIP_ICONASTERISK)
                        
                Case $msg = $MenuItem3
                        
                Case $msg = $MenuItem4
                        ExitLoop
                        Exit
        EndSelect
WEnd
发表于 2023-9-18 20:40:03 | 显示全部楼层
_Winapi_SetParent($Form1, WinGetHandle('Program Manager')) 设置桌面为父窗口
 楼主| 发表于 2023-9-18 21:31:38 | 显示全部楼层
afan 发表于 2023-9-18 20:40
_Winapi_SetParent($Form1, WinGetHandle('Program Manager')) 设置桌面为父窗口

感谢版主,学习了。设置桌面为父窗口后控件好像也变透明了,运行后什么窗口也不显示,如果我不设置透明窗口的话可以显示(也达到我想要的不被隐藏的效果了,但桌面啥也没有了),还请版主解惑。
 楼主| 发表于 2023-9-18 21:35:13 | 显示全部楼层
afan 发表于 2023-9-18 20:40
_Winapi_SetParent($Form1, WinGetHandle('Program Manager')) 设置桌面为父窗口

我发现win11中好像不行,但是win10可以。
发表于 2023-9-18 22:06:54 | 显示全部楼层
24779987 发表于 2023-9-18 21:35
我发现win11中好像不行,但是win10可以。

没用过Win11,不知道桌面控件是什么
你可以看看是否存在且唯一
#include <Array.au3>
$aWin = WinList('Program Manager')
_ArrayDisplay($aWin)
发表于 2023-9-19 20:21:02 | 显示全部楼层
本帖最后由 w60711 于 2023-9-19 20:23 编辑
afan 发表于 2023-9-18 22:06
没用过Win11,不知道桌面控件是什么
你可以看看是否存在且唯一


目前手边只有Win 11
但我之前在Win 10也是不行...
真的很奇怪~






本帖子中包含更多资源

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

×
发表于 2023-9-19 20:31:07 | 显示全部楼层
本帖最后由 afan 于 2023-9-19 21:00 编辑
w60711 发表于 2023-9-19 20:21
目前手边只有Win 11
但我之前在Win 10也是不行...
真的很奇怪~

我是在win7测试ok的~ 添加了调试msg看看
#RequireAdmin
#include <WinAPI.au3>

Local $hWin = WinGetHandle('[TITLE:Program Manager; CLASS:Progman]')
Local $aPos = WinGetPos($hWin)

Local $Form1 = GUICreate("network_info", 230, 200, @DesktopWidth - 230, 0, 0x80000000, 0x080000 + 0x080) ;$WS_POPUP = 0x80000000 ;$WS_EX_LAYERED = 0x080000 ;$WS_EX_TOOLWINDOW = 0x080
GUISetBkColor(0xF1F1F1)
_WinAPI_SetLayeredWindowAttributes($Form1, 0xF1F1F1, 0, 0x01) ;设置透明 ;$LWA_COLORKEY = 0x01
GUICtrlSetDefColor(0xFFFFFF)
GUICtrlCreateLabel("计算机名:" & @ComputerName, 0, 10, 300, 50)
GUICtrlCreateLabel("系统版本:" & @OSVersion & " " & @OSArch, 0, 30, 300, 50)
Local $iRt = _Winapi_SetParent($Form1, $hWin) 
MsgBox(0, $hWin, $aPos[2] & ' x ' & $aPos[3] & @LF & $iRt)
GUISetState()

Opt("TrayMenuMode", 3)
$MenuItem4 = TrayCreateItem("exit")
While TrayGetMsg() <> $MenuItem4
WEnd
发表于 2023-9-19 21:04:28 | 显示全部楼层
本帖最后由 w60711 于 2023-9-19 21:10 编辑
afan 发表于 2023-9-19 20:31
我是在win7测试ok的~ 添加了调试msg看看

有,測試過了~
官方幫助文檔也是同情形...
#include <GUIConstantsEx.au3>
#include <WinAPISysWin.au3>
#include <WindowsConstants.au3>

Local $hParent = WinGetHandle('[CLASS:Progman;TITLE:Program Manager]')

Local $hForm = GUICreate('Test ' & StringReplace(@ScriptName, '.au3', '()'), 400, 400, 100, 100, -1, $WS_EX_TOOLWINDOW)

; Attach window to the desktop (always on bottom)
_WinAPI_SetParent($hForm, $hParent)

GUISetState(@SW_SHOWNOACTIVATE)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE


系統:Win 11 Pro x64, Admin
AU3:3.3.16.1





本帖子中包含更多资源

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

×
发表于 2023-9-19 21:13:42 | 显示全部楼层
w60711 发表于 2023-9-19 21:04
有,測試過了~
官方幫助文檔也是同情形...

你的系统64位,但默认执行的居然是 AutoIt3.exe 而不是 AutoIt3_x64.exe?
那就加上 #AutoIt3Wrapper_UseX64=y 试试
发表于 2023-9-19 23:11:12 | 显示全部楼层
afan 发表于 2023-9-19 21:13
你的系统64位,但默认执行的居然是 AutoIt3.exe 而不是 AutoIt3_x64.exe?
那就加上 #AutoIt3Wrapper_Us ...

安裝時我有默認使用x86~

#AutoIt3Wrapper_UseX64=y
這我有添加了,結果一樣~
发表于 2023-9-20 10:36:05 | 显示全部楼层
w60711 发表于 2023-9-19 23:11
安裝時我有默認使用x86~

#AutoIt3Wrapper_UseX64=y

可能桌面有遮挡层需要隐藏,没有11系统,无法测试~
发表于 2023-9-20 13:53:56 | 显示全部楼层
afan 发表于 2023-9-20 10:36
可能桌面有遮挡层需要隐藏,没有11系统,无法测试~

看來...可能和虛擬桌面/task view有關...
https://www.autoitscript.com/for ... -_winapi_setparent/
发表于 2023-9-20 14:07:01 | 显示全部楼层
w60711 发表于 2023-9-20 13:53
看來...可能和虛擬桌面/task view有關...
https://www.autoitscript.com/forum/topic/187374-sometimes- ...

之前我在win10上测试了,同样不显示……  调试了一些代码后正常显示了,也正常固定不会被Win-D隐藏,现在在查原因,一会再看看你提供的链接~
 楼主| 发表于 2023-9-20 21:20:07 | 显示全部楼层
afan 发表于 2023-9-20 14:07
之前我在win10上测试了,同样不显示……  调试了一些代码后正常显示了,也正常固定不会被Win-D隐藏,现在 ...

win7  没测试

win10 上如果设置桌面为父窗口,且窗口设置透明就不会显示  Label 的 文字(相当于什么都没显示),
如果不设置父窗口,还是有文字显示,就是不会固定在桌面 win+D 就被隐藏了。

win11下 只要设置桌面为父窗口不管设不设置透明都不会显示。
发表于 2023-9-20 22:21:24 | 显示全部楼层
win10操作比较麻烦,需要将桌面 _SendMessage($hWin, 0x52c, 0) “炸开”,类似动态壁纸之类的操作,原理如 https://blog.csdn.net/m0_46239139/article/details/128713234
再隐藏其中的一个 WorkerW 窗口。带有透明分层样式的窗口无需设置桌面为父窗口即可正常显示
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-2 01:48 , Processed in 0.087763 second(s), 22 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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