Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to find a desktop window (by window name) in Windows 8.1 Update 2 OS, using the Win32 API FindWindow() in PowerShell environment?

I don't remember having any problem finding a window in older Windows OS's, but, I'm not succeeding in Windows 8.1 Update 2 OS, using PowerShell v4.0.

This is the PowerShell v4.0 code I'm using (pretty much trivial):

$sig=@'
[DllImport("user32.dll")]
public static extern IntPtr FindWindow(String sClassName, String sAppName);
'@

$fw = Add-Type -Namespace Win32 -Name Funcs -MemberDefinition $sig -PassThru
$wname='Form1' # any existing window name

$fw::FindWindow($null -as [String], $wname) # returns 0, always!

The last command returns 0, always.

Changing the DllImport attribute to

[DllImport("user32.dll", CharSet = CharSet.Unicode)]

does not change anything; 0 is returned the same way.

Interesting to notice that the equivalent code in C#, returns the correct HWND value.

Does anyone know what's wrong (and how to fix) the PowerShell v4.0 code above?

like image 246
zyq Avatar asked Jan 09 '23 20:01

zyq


1 Answers

First : not an answer but to help other people working on it, if you use the good class, for example here I code CalcFrame wich is the real class of the main window of calc.exe it works.

$fw::FindWindow("CalcFrame", $wname) # returns the right value for me if calc.exe is started.

Second : The following works for me ; accordind to Microsoft documentation the first parameter should be null, but accordin to PInvoke site you must pass IntPtr.Zero as the first parameter.

$sig = @"
  [DllImport("user32.dll", CharSet = CharSet.Unicode)]
  public static extern IntPtr FindWindow(IntPtr sClassName, String sAppName);

  [DllImport("kernel32.dll")]
  public static extern uint GetLastError();
"@

$fw = Add-Type -Namespace Win32 -Name Funcs -MemberDefinition $sig -PassThru
$wname='Calculatrice' # any existing window name

$fw::FindWindow([IntPtr]::Zero, $wname ) # returns the Window Handle
$a = $fw::GetLastError()
$a
like image 107
JPBlanc Avatar answered Jan 25 '23 23:01

JPBlanc