24779987 发表于 2023-9-18 20:10:12

新手求助 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

afan 发表于 2023-9-18 20:40:03

_Winapi_SetParent($Form1, WinGetHandle('Program Manager')) 设置桌面为父窗口

24779987 发表于 2023-9-18 21:31:38

afan 发表于 2023-9-18 20:40
_Winapi_SetParent($Form1, WinGetHandle('Program Manager')) 设置桌面为父窗口

感谢版主,学习了。设置桌面为父窗口后控件好像也变透明了,运行后什么窗口也不显示,如果我不设置透明窗口的话可以显示(也达到我想要的不被隐藏的效果了,但桌面啥也没有了:face (13):),还请版主解惑。

24779987 发表于 2023-9-18 21:35:13

afan 发表于 2023-9-18 20:40
_Winapi_SetParent($Form1, WinGetHandle('Program Manager')) 设置桌面为父窗口

我发现win11中好像不行,但是win10可以。

afan 发表于 2023-9-18 22:06:54

24779987 发表于 2023-9-18 21:35
我发现win11中好像不行,但是win10可以。

没用过Win11,不知道桌面控件是什么
你可以看看是否存在且唯一
#include <Array.au3>
$aWin = WinList('Program Manager')
_ArrayDisplay($aWin)

w60711 发表于 2023-9-19 20:21:02

本帖最后由 w60711 于 2023-9-19 20:23 编辑

afan 发表于 2023-9-18 22:06
没用过Win11,不知道桌面控件是什么
你可以看看是否存在且唯一

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





afan 发表于 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('')
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: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('')

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





afan 发表于 2023-9-19 21:13:42

w60711 发表于 2023-9-19 21:04
有,測試過了~
官方幫助文檔也是同情形...



你的系统64位,但默认执行的居然是 AutoIt3.exe 而不是 AutoIt3_x64.exe?
那就加上 #AutoIt3Wrapper_UseX64=y 试试

w60711 发表于 2023-9-19 23:11:12

afan 发表于 2023-9-19 21:13
你的系统64位,但默认执行的居然是 AutoIt3.exe 而不是 AutoIt3_x64.exe?
那就加上 #AutoIt3Wrapper_Us ...

安裝時我有默認使用x86~

#AutoIt3Wrapper_UseX64=y
這我有添加了,結果一樣~

afan 发表于 2023-9-20 10:36:05

w60711 发表于 2023-9-19 23:11
安裝時我有默認使用x86~

#AutoIt3Wrapper_UseX64=y


可能桌面有遮挡层需要隐藏,没有11系统,无法测试~

w60711 发表于 2023-9-20 13:53:56

afan 发表于 2023-9-20 10:36
可能桌面有遮挡层需要隐藏,没有11系统,无法测试~

看來...可能和虛擬桌面/task view有關...
https://www.autoitscript.com/forum/topic/187374-sometimes-window-doesnt-show-with-_winapi_setparent/

afan 发表于 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隐藏,现在在查原因,一会再看看你提供的链接~

24779987 发表于 2023-9-20 21:20:07

afan 发表于 2023-9-20 14:07
之前我在win10上测试了,同样不显示……调试了一些代码后正常显示了,也正常固定不会被Win-D隐藏,现在 ...

win7没测试

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

win11下 只要设置桌面为父窗口不管设不设置透明都不会显示。

afan 发表于 2023-9-20 22:21:24

win10操作比较麻烦,需要将桌面 _SendMessage($hWin, 0x52c, 0) “炸开”,类似动态壁纸之类的操作,原理如 https://blog.csdn.net/m0_46239139/article/details/128713234
再隐藏其中的一个 WorkerW 窗口。带有透明分层样式的窗口无需设置桌面为父窗口即可正常显示
页: [1] 2
查看完整版本: 新手求助 win+D 或者任务栏”返回桌面“ 后怎么让窗口不被隐藏