使用 .bat 检查桌面 window 是否在前台
Check if desktop window is in foreground using .bat
我正在尝试创建一个快捷方式,通过它我可以切换 'Show desktop' 并且如果程序是 运行 通过桌面 'hide desktop icons' 那么这是我的 .bat 文件
set mypath=%cd%
cd C:\Program Files\oneClickHD\
start ShowDesktop.lnk
if "%mypath%"=="C:\Users\admin\Desktop" goto GO
:GO
start HideDesktopIcons.exe
这段代码并没有真正起作用,因为如果我使用它的快捷方式,bat 的目录不会改变 运行 所以我想到了 3 种方法但无法实现它们这些方法是:
1)检测是否有window打开如果是则切换showdesktop.lnk
或者如果当前前景 window 不是桌面切换
2) 检查桌面是否在前台,如果是 运行 hideIcons.exe
3) 不要使用 showdesktop.lnk 来切换显示桌面,而是使用可以打开桌面的东西
为了找到解决方案,我尝试使用 nircmd,但我找不到如何 return 活动值 windows 或检查桌面是否处于活动状态,其中有一个值得称赞的地方:nircmd win最小所有topnodesktop
这是唯一一个似乎有效的方法,但它最小化了所有内容,我只能看到它以一种奇怪的方式工作的墙纸。
然后我也想到了使用 vbs 脚本,但发现更好地使用 .bat 来处理 windows 相关的事情。
然后我也尝试使用 powershell 但它似乎不在我的电脑上。
没有 window 支持的东西比只有最少 window 支持的东西要好。
你需要写一个真正的程序。这会告诉您前景 window 的句柄、class 名称和 window 标题。
请在此处查看我的回答,了解 VBScript 等 COM 语言的方法 How to find the window Title of Active(foreground) window using Window Script Host
创建一个名为 GetForegroundWindow.bas 的文件。把这个放进去。
Imports System
Imports System.IO
Imports System.Runtime.InteropServices
Imports Microsoft.Win32
Public Module MyApplication
Public Declare Function GetForegroundWindow Lib "user32" As Integer
Public Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Public Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Sub Main()
Dim hWnd as Long, WT as String, CN as String, Length as Long
On Error Resume Next
hWnd=GetForegroundWindow()
WT = Space(512)
Length = GetWindowText(hwnd, WT, 508)
WT = Left$(WT, Length)
If WT = "" Then WT = Chr(171) & "No Window Text " & Err.LastDllError & Chr(187)
CN = Space(512)
Length = GetClassName(hwnd, CN, 508)
CN = Left$(CN, Length)
If CN = "" Then CN = "Error=" & Err.LastDllError
Console.Out.WriteLine(hWnd & "," & WT & "," & CN)
'This shows how to toggle desktop, etc
'This will work as a vbscript if you remove "as object"
Dim ShellApp as Object
ShellApp = CreateObject("Shell.Application")
ShellApp.MinimizeAll()
ShellApp.UndoMinimizeAll()
ShellApp.ToggleDesktop()
End Sub
End Module
将以上文件放在桌面上。启动命令提示符并键入
"C:\Windows\Microsoft.NET\Framework\v4.0.30319\vbc.exe" /platform:anycpu /sdkpath:C:\Windows\Microsoft.NET\Framework\v4.0.30319 /target:exe /out:"%userprofile%\desktop\GetForegroundWindow.exe" "%userprofile%\desktop\GetForegroundWindow.bas" /verbose
它给出了这样的输出。
C:\Windows\system32>"C:\Users\User\Desktop\GetForegroundWindow.exe"
593444,Administrator: Command Prompt - "C:\Users\User\Desktop\GetForegroundWindow.exe",ConsoleWindowClass
您可以使用 For /f
循环进行解析。参见 For /?
。
C:\Windows\system32>@for /f "Tokens=1-3 Delims=," %A in ('"C:\Users\User\Desktop\GetForegroundWindow.exe"') Do @Echo %C
ConsoleWindowClass
这些是 Shell
的 windows
Order Level WindowText ClassName HWnd ParentHWnd ProcessID ParentProcessID ThreadID ModuleNameHWin EXENameProcess
21 «No Window Text 0» Shell_TrayWnd 41227310 52039984 12336 5532 10668 «Not Available Error=126» explorer.exe
22 Start Start 43979912 41227310 12336 5532 10668 «Not Available Error=126» explorer.exe
23 «No Window Text 0» TrayDummySearchControl 73536804 41227310 12336 5532 10668 «Not Available Error=126» explorer.exe
24 Search Windows Button 56497500 73536804 12336 5532 10668 «Not Available Error=126» explorer.exe
25 «No Window Text 0» Edit 11736392 73536804 12336 5532 10668 «Not Available Error=126» explorer.exe
26 «No Window Text 0» ToolbarWindow32 23991502 73536804 12336 5532 10668 «Not Available Error=126» explorer.exe
27 Task View TrayButton 33362614 41227310 12336 5532 10668 «Not Available Error=126» explorer.exe
28 «No Window Text 0» TrayNotifyWnd 34476878 41227310 12336 5532 10668 «Not Available Error=126» explorer.exe
29 10:06 AM TrayClockWClass 24449812 34476878 12336 5532 10668 «Not Available Error=126» explorer.exe
30 «No Window Text 0» TrayShowDesktopButtonWClass 40899346 34476878 12336 5532 10668 «Not Available Error=126» explorer.exe
31 Tray Input Indicator TrayInputIndicatorWClass 46273942 34476878 12336 5532 10668 «Not Available Error=126» explorer.exe
32 «No Window Text 0» Button 28185460 46273942 12336 5532 10668 «Not Available Error=126» explorer.exe
33 «No Window Text 0» Button 25170502 46273942 12336 5532 10668 «Not Available Error=126» explorer.exe
34 «No Window Text 0» SysPager 21238280 34476878 12336 5532 10668 C:\Users\David Candy\Desktop\Editor\EditorSdi\Ed.exe explorer.exe
35 User Promoted Notification Area ToolbarWindow32 25628972 21238280 12336 5532 10668 «Not Available Error=126» explorer.exe
36 «No Window Text 0» Button 21107412 34476878 12336 5532 10668 «Not Available Error=126» explorer.exe
37 «No Window Text 0» Button 32313836 21107412 12336 5532 10668 «Not Available Error=126» explorer.exe
38 System Promoted Notification Area ToolbarWindow32 16781596 34476878 12336 5532 10668 «Not Available Error=126» explorer.exe
39 Notification Center TrayButton 18157900 34476878 12336 5532 10668 «Not Available Error=126» explorer.exe
40 Touch keyboard TIPBand 21697390 34476878 12336 5532 10668 «Not Available Error=126» explorer.exe
41 «No Window Text 0» ReBarWindow32 9375916 41227310 12336 5532 10668 «Not Available Error=126» explorer.exe
42 Running applications MSTaskSwWClass 24842334 9375916 12336 5532 10668 «Not Available Error=126» explorer.exe
43 Running applications MSTaskListWClass 18485304 24842334 12336 5532 10668 «Not Available Error=126» explorer.exe
44 Favorites ToolbarWindow32 12193824 9375916 12336 5532 10668 «Not Available Error=126» explorer.exe
45 Desktop ToolbarWindow32 25497672 9375916 12336 5532 10668 «Not Available Error=126» explorer.exe
我正在尝试创建一个快捷方式,通过它我可以切换 'Show desktop' 并且如果程序是 运行 通过桌面 'hide desktop icons' 那么这是我的 .bat 文件
set mypath=%cd%
cd C:\Program Files\oneClickHD\
start ShowDesktop.lnk
if "%mypath%"=="C:\Users\admin\Desktop" goto GO
:GO
start HideDesktopIcons.exe
这段代码并没有真正起作用,因为如果我使用它的快捷方式,bat 的目录不会改变 运行 所以我想到了 3 种方法但无法实现它们这些方法是:
1)检测是否有window打开如果是则切换showdesktop.lnk 或者如果当前前景 window 不是桌面切换
2) 检查桌面是否在前台,如果是 运行 hideIcons.exe
3) 不要使用 showdesktop.lnk 来切换显示桌面,而是使用可以打开桌面的东西
为了找到解决方案,我尝试使用 nircmd,但我找不到如何 return 活动值 windows 或检查桌面是否处于活动状态,其中有一个值得称赞的地方:nircmd win最小所有topnodesktop 这是唯一一个似乎有效的方法,但它最小化了所有内容,我只能看到它以一种奇怪的方式工作的墙纸。 然后我也想到了使用 vbs 脚本,但发现更好地使用 .bat 来处理 windows 相关的事情。 然后我也尝试使用 powershell 但它似乎不在我的电脑上。
没有 window 支持的东西比只有最少 window 支持的东西要好。
你需要写一个真正的程序。这会告诉您前景 window 的句柄、class 名称和 window 标题。
请在此处查看我的回答,了解 VBScript 等 COM 语言的方法 How to find the window Title of Active(foreground) window using Window Script Host
创建一个名为 GetForegroundWindow.bas 的文件。把这个放进去。
Imports System
Imports System.IO
Imports System.Runtime.InteropServices
Imports Microsoft.Win32
Public Module MyApplication
Public Declare Function GetForegroundWindow Lib "user32" As Integer
Public Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Public Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Sub Main()
Dim hWnd as Long, WT as String, CN as String, Length as Long
On Error Resume Next
hWnd=GetForegroundWindow()
WT = Space(512)
Length = GetWindowText(hwnd, WT, 508)
WT = Left$(WT, Length)
If WT = "" Then WT = Chr(171) & "No Window Text " & Err.LastDllError & Chr(187)
CN = Space(512)
Length = GetClassName(hwnd, CN, 508)
CN = Left$(CN, Length)
If CN = "" Then CN = "Error=" & Err.LastDllError
Console.Out.WriteLine(hWnd & "," & WT & "," & CN)
'This shows how to toggle desktop, etc
'This will work as a vbscript if you remove "as object"
Dim ShellApp as Object
ShellApp = CreateObject("Shell.Application")
ShellApp.MinimizeAll()
ShellApp.UndoMinimizeAll()
ShellApp.ToggleDesktop()
End Sub
End Module
将以上文件放在桌面上。启动命令提示符并键入
"C:\Windows\Microsoft.NET\Framework\v4.0.30319\vbc.exe" /platform:anycpu /sdkpath:C:\Windows\Microsoft.NET\Framework\v4.0.30319 /target:exe /out:"%userprofile%\desktop\GetForegroundWindow.exe" "%userprofile%\desktop\GetForegroundWindow.bas" /verbose
它给出了这样的输出。
C:\Windows\system32>"C:\Users\User\Desktop\GetForegroundWindow.exe"
593444,Administrator: Command Prompt - "C:\Users\User\Desktop\GetForegroundWindow.exe",ConsoleWindowClass
您可以使用 For /f
循环进行解析。参见 For /?
。
C:\Windows\system32>@for /f "Tokens=1-3 Delims=," %A in ('"C:\Users\User\Desktop\GetForegroundWindow.exe"') Do @Echo %C
ConsoleWindowClass
这些是 Shell
的 windowsOrder Level WindowText ClassName HWnd ParentHWnd ProcessID ParentProcessID ThreadID ModuleNameHWin EXENameProcess
21 «No Window Text 0» Shell_TrayWnd 41227310 52039984 12336 5532 10668 «Not Available Error=126» explorer.exe
22 Start Start 43979912 41227310 12336 5532 10668 «Not Available Error=126» explorer.exe
23 «No Window Text 0» TrayDummySearchControl 73536804 41227310 12336 5532 10668 «Not Available Error=126» explorer.exe
24 Search Windows Button 56497500 73536804 12336 5532 10668 «Not Available Error=126» explorer.exe
25 «No Window Text 0» Edit 11736392 73536804 12336 5532 10668 «Not Available Error=126» explorer.exe
26 «No Window Text 0» ToolbarWindow32 23991502 73536804 12336 5532 10668 «Not Available Error=126» explorer.exe
27 Task View TrayButton 33362614 41227310 12336 5532 10668 «Not Available Error=126» explorer.exe
28 «No Window Text 0» TrayNotifyWnd 34476878 41227310 12336 5532 10668 «Not Available Error=126» explorer.exe
29 10:06 AM TrayClockWClass 24449812 34476878 12336 5532 10668 «Not Available Error=126» explorer.exe
30 «No Window Text 0» TrayShowDesktopButtonWClass 40899346 34476878 12336 5532 10668 «Not Available Error=126» explorer.exe
31 Tray Input Indicator TrayInputIndicatorWClass 46273942 34476878 12336 5532 10668 «Not Available Error=126» explorer.exe
32 «No Window Text 0» Button 28185460 46273942 12336 5532 10668 «Not Available Error=126» explorer.exe
33 «No Window Text 0» Button 25170502 46273942 12336 5532 10668 «Not Available Error=126» explorer.exe
34 «No Window Text 0» SysPager 21238280 34476878 12336 5532 10668 C:\Users\David Candy\Desktop\Editor\EditorSdi\Ed.exe explorer.exe
35 User Promoted Notification Area ToolbarWindow32 25628972 21238280 12336 5532 10668 «Not Available Error=126» explorer.exe
36 «No Window Text 0» Button 21107412 34476878 12336 5532 10668 «Not Available Error=126» explorer.exe
37 «No Window Text 0» Button 32313836 21107412 12336 5532 10668 «Not Available Error=126» explorer.exe
38 System Promoted Notification Area ToolbarWindow32 16781596 34476878 12336 5532 10668 «Not Available Error=126» explorer.exe
39 Notification Center TrayButton 18157900 34476878 12336 5532 10668 «Not Available Error=126» explorer.exe
40 Touch keyboard TIPBand 21697390 34476878 12336 5532 10668 «Not Available Error=126» explorer.exe
41 «No Window Text 0» ReBarWindow32 9375916 41227310 12336 5532 10668 «Not Available Error=126» explorer.exe
42 Running applications MSTaskSwWClass 24842334 9375916 12336 5532 10668 «Not Available Error=126» explorer.exe
43 Running applications MSTaskListWClass 18485304 24842334 12336 5532 10668 «Not Available Error=126» explorer.exe
44 Favorites ToolbarWindow32 12193824 9375916 12336 5532 10668 «Not Available Error=126» explorer.exe
45 Desktop ToolbarWindow32 25497672 9375916 12336 5532 10668 «Not Available Error=126» explorer.exe