
我不记得在较老的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。
总结以上是内存溢出为你收集整理的如何在Windows 8.1 Update 2 *** 作系统中使用PowerShell环境中的Win32 API FindWindow()来查找桌面窗口(通过窗口名称)?全部内容,希望文章能够帮你解决如何在Windows 8.1 Update 2 *** 作系统中使用PowerShell环境中的Win32 API FindWindow()来查找桌面窗口(通过窗口名称)?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)