Check if desktop window is in foreground using .bat

1.4k Views Asked by At

I am trying to create a shortcut through which i can toggle 'Show desktop' and also and if the program is run through desktop 'hide desktop icons' so here is my .bat file

set mypath=%cd%
cd C:\Program Files\oneClickHD\
start ShowDesktop.lnk
if "%mypath%"=="C:\Users\admin\Desktop" goto GO
:GO
start HideDesktopIcons.exe

this piece of code doesn't really work as dir of bat wont change if i use its shortcut to run it so i thought of 3 methods but cannot implement them these methods are :

1)detect if there is any window is open if yes then toggle showdesktop.lnk or if current foreground window is not desktop toggle

2)check if desktop is on foreground and if yes run hideIcons.exe

3)instead of using showdesktop.lnk that toggles show desktop use something that just opens up desktop

to find solution i tried using nircmd through which i couldn't find how to return value of active windows or check if desktop is active and there is a commend in that : nircmd win min alltopnodesktop which is the only one that seems to work but it minimizes everything and i could only see wallpaper it just works in weird way. then i also thought of using vbs scripting but found better to use .bat for windows related things. then i also tried using powershell but it doesnt seem on my pc .

1

There are 1 best solutions below

0
On BEST ANSWER

Something with NO window support is better than something with minimal window support.

You need to write a real program. This tells you the foreground window's handle, class name, and window title.

See my answer here for a way for COM languages like VBScript How to find the window Title of Active(foreground) window using Window Script Host

Create a file called GetForegroundWindow.bas. Put this in it.

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

Put above file on the desktop. Start a command prompt and type

"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

It gives output like this.

C:\Windows\system32>"C:\Users\User\Desktop\GetForegroundWindow.exe"
593444,Administrator: Command Prompt - "C:\Users\User\Desktop\GetForegroundWindow.exe",ConsoleWindowClass

you can parse with a For /f loop. See For /?.

C:\Windows\system32>@for /f "Tokens=1-3 Delims=," %A in ('"C:\Users\User\Desktop\GetForegroundWindow.exe"') Do @Echo %C
ConsoleWindowClass

These are the windows of the Shell

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