新手求助 win+D 或者任务栏”返回桌面“ 后怎么让窗口不被隐藏
本帖最后由 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
Local $macadd = $NetworkAdapterInfo
Local $dns = $NetworkAdapterInfo
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)
$MenuItem1 = TrayCreateItem("IP :" & $NetworkAdapterInfo)
$MenuItem2 = TrayCreateItem("MAC :" & $NetworkAdapterInfo)
TrayCreateItem("DNS :" & $NetworkAdapterInfo)
TrayCreateItem("")
$MenuItem3 = TrayCreateItem("信息报修")
TrayCreateItem("")
$MenuItem4 = TrayCreateItem("exit")
While 1
$msg = TrayGetMsg()
Select
Case $msg = $MenuItem1
_ClipBoard_SetData($NetworkAdapterInfo)
TrayTip("当前IP地址已复制到剪贴板", $NetworkAdapterInfo, 0, $TIP_ICONASTERISK)
Case $msg = $MenuItem2
_ClipBoard_SetData($NetworkAdapterInfo)
TrayTip("当前MAC地址已复制到剪贴板", $NetworkAdapterInfo, 0, $TIP_ICONASTERISK)
Case $msg = $MenuItem3
Case $msg = $MenuItem4
ExitLoop
Exit
EndSelect
WEnd _Winapi_SetParent($Form1, WinGetHandle('Program Manager')) 设置桌面为父窗口 afan 发表于 2023-9-18 20:40
_Winapi_SetParent($Form1, WinGetHandle('Program Manager')) 设置桌面为父窗口
感谢版主,学习了。设置桌面为父窗口后控件好像也变透明了,运行后什么窗口也不显示,如果我不设置透明窗口的话可以显示(也达到我想要的不被隐藏的效果了,但桌面啥也没有了:face (13):),还请版主解惑。 afan 发表于 2023-9-18 20:40
_Winapi_SetParent($Form1, WinGetHandle('Program Manager')) 设置桌面为父窗口
我发现win11中好像不行,但是win10可以。 24779987 发表于 2023-9-18 21:35
我发现win11中好像不行,但是win10可以。
没用过Win11,不知道桌面控件是什么
你可以看看是否存在且唯一
#include <Array.au3>
$aWin = WinList('Program Manager')
_ArrayDisplay($aWin) 本帖最后由 w60711 于 2023-9-19 20:23 编辑
afan 发表于 2023-9-18 22:06
没用过Win11,不知道桌面控件是什么
你可以看看是否存在且唯一
目前手边只有Win 11
但我之前在Win 10也是不行...
真的很奇怪~
:face (32):
本帖最后由 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('')
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 & ' x ' & $aPos & @LF & $iRt)
GUISetState()
Opt("TrayMenuMode", 3)
$MenuItem4 = TrayCreateItem("exit")
While TrayGetMsg() <> $MenuItem4
WEnd 本帖最后由 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('')
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
w60711 发表于 2023-9-19 21:04
有,測試過了~
官方幫助文檔也是同情形...
你的系统64位,但默认执行的居然是 AutoIt3.exe 而不是 AutoIt3_x64.exe?
那就加上 #AutoIt3Wrapper_UseX64=y 试试 afan 发表于 2023-9-19 21:13
你的系统64位,但默认执行的居然是 AutoIt3.exe 而不是 AutoIt3_x64.exe?
那就加上 #AutoIt3Wrapper_Us ...
安裝時我有默認使用x86~
#AutoIt3Wrapper_UseX64=y
這我有添加了,結果一樣~ w60711 发表于 2023-9-19 23:11
安裝時我有默認使用x86~
#AutoIt3Wrapper_UseX64=y
可能桌面有遮挡层需要隐藏,没有11系统,无法测试~ afan 发表于 2023-9-20 10:36
可能桌面有遮挡层需要隐藏,没有11系统,无法测试~
看來...可能和虛擬桌面/task view有關...
https://www.autoitscript.com/forum/topic/187374-sometimes-window-doesnt-show-with-_winapi_setparent/ w60711 发表于 2023-9-20 13:53
看來...可能和虛擬桌面/task view有關...
https://www.autoitscript.com/forum/topic/187374-sometimes- ...
之前我在win10上测试了,同样不显示……调试了一些代码后正常显示了,也正常固定不会被Win-D隐藏,现在在查原因,一会再看看你提供的链接~ afan 发表于 2023-9-20 14:07
之前我在win10上测试了,同样不显示……调试了一些代码后正常显示了,也正常固定不会被Win-D隐藏,现在 ...
win7没测试
win10 上如果设置桌面为父窗口,且窗口设置透明就不会显示Label 的 文字(相当于什么都没显示),
如果不设置父窗口,还是有文字显示,就是不会固定在桌面 win+D 就被隐藏了。
win11下 只要设置桌面为父窗口不管设不设置透明都不会显示。 win10操作比较麻烦,需要将桌面 _SendMessage($hWin, 0x52c, 0) “炸开”,类似动态壁纸之类的操作,原理如 https://blog.csdn.net/m0_46239139/article/details/128713234
再隐藏其中的一个 WorkerW 窗口。带有透明分层样式的窗口无需设置桌面为父窗口即可正常显示
页:
[1]
2