我不记得在较老的Windows操作系统中find一个窗口有任何问题,但是,我没有在Windows 8.1 Update 2操作系统中使用PowerShell v4.0获得成功 。
这是我使用的PowerShell v4.0代码(非常简单):
$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!
最后一个命令总是返回0 。
将DllImport属性更改为
如何在PowerShell中下载整个DropBox目录?
Py2Exe:避免Windows请求执行.exe文件的权限
PowerShell Windows安装程序Com对象
PowerShell:导出用户权限分配
使用PowerShell来查找设置为唤醒计算机的计划任务
[DllImport("user32.dll",CharSet = CharSet.Unicode)]
不改变任何东西; 0以相同的方式返回。
有趣的是, C#中的等效代码返回正确的HWND值。
有谁知道什么是错的(以及如何解决)上面的PowerShell v4.0代码?
Azure自定义脚本扩展不断重新启动
networking延迟监视脚本窗口
1 Powershell脚本2 sql表
用于创build本地用户并将详细信息写入XML文件的Powershell脚本
Windows PowerShell在命令Enter-PSSession中input密码
第一 :不是一个答案,而是帮助其他人的工作,如果你使用良好的类,例如在这里我代码CalcFrame这是calc.exe主窗口的真正的类它的工作。
$fw::FindWindow("CalcFrame",$wname) # returns the right value for me if calc.exe is started.
第二 :以下对我有用; 按照Microsoft文档中的第一个参数应该为null,而在PInvok e站点中必须通过IntPtr.Zero作为第一个参数 。
$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
似乎该方法不会失败,如果,并且只有当ClassName也被指定(不能为null )时才如下例所示:
$sig=@' [DllImport("user32.dll",CharSet = CharSet.Auto)] public static extern IntPtr FindWindow(string lpClassName,string lpWindowName); '@ $w32 = Add-Type -Namespace Win32 -Name Funcs -MemberDeFinition $sig -Passthru $w32::FindWindow('ConsoleWindowClass','Windows PowerShell') # Windows PowerShell Console
如果ClassName为null ,那么JPBlanc的方法就能正常工作,这为方法指定了一个不同的签名。
我看了一下这个问题的C#实现,发现了2个WNDCLASS结构:WNDCLASS_D和WNDCLASS_I。 前者是使用字符串作为类型的传统结构,遵循Win32 API。 但后者使用IntPtr.Zero值为那些采用空字符串值的WNDCLASS结构。 由于这个原因,指定空字符串值将导致发现,因为空字符串值不能隐式转换为IntPtr.Zero。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。