powershell 调用API显示或隐藏指定程序的主窗口

001. 前言

一同事碰上这种情况:某个单实例的程序不知为何挂在后台运行,托盘中也找不到图标(一般是有的),但可以在任务管理器中看到该程序处于运行状态。问我:能不能让这程序的界面显示出来呢?二话不说立马开始折腾(没错是个妹子 ╯▽╰ )。
嗯,肯定有人想说:这不很简单,直接kill了重新运行~ 。但是,有些情况就是不能kill,所以只好试试API了。

002. 正文

下面开始代码:

<#.NOTES===========================================================================Created with:  SAPIEN Technologies, Inc., PowerShell Studio 2014 v4.1.58Created on:    2017/12/29 Created by:    hokis===========================================================================.DESCRIPTION1、用于显示或隐藏指定程序主窗口2、FindWindow 函数,获取指定窗口句柄。第一参数为窗口的类名(可为空),第二参数为窗口标题文本3、ShowWindow 函数,设置指定窗口的显示状态。第一参数为指定窗口的句柄,第二参数即为需要设置的状态(部分常用值:0-隐藏,1-正常显示,2-最小化,3-最大化,9-还原)
#>$code = @'
[DllImport("user32.dll", EntryPoint = "FindWindow")] public extern static IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll", EntryPoint = "ShowWindow", CharSet = CharSet.Auto)] public extern static bool ShowWindow(IntPtr hwnd, uint nCmdShow);
'@
#引入API
$myAPI = Add-Type -MemberDefinition $code -Name myAPI -PassThru
#测试CMD窗口(需先运行一个CMD窗口)
$cmdWin = @("ConsoleWindowClass", "管理员: 命令提示符")
#显示(1或9)或隐藏(0)
$myapi::ShowWindow($myAPI::FindWindow($cmdWin[0], $cmdWin[1]), 9) | Out-Null

10行搞定,嗯,还是不错的。

当然,这个脚本有一些限制
1. 至少需要知道窗口的标题文本。窗口的类名可以通过专业工具(如:spy++)得到。
2. 未考虑多个窗口同一个标题的情况,如果有此情况,请慎用。

003. 后记

这个版本其实受到启发才得以精简成10行,一开始的版本是写得比较复杂(还定义了C#类、静态方法等一堆)。

-END-

参考:PowerShell 技能连载 - 显示或隐藏窗口 | 叹为观止

powershell 调用API显示或隐藏指定程序的主窗口相关推荐

  1. 隐藏指定程序的托盘图标-64位Windows10适用

    隐藏指定程序的托盘图标-64位Windows10适用 1.现成的exe(在上面的链接里 2.C/C++代码 3.开机登陆后延时10S执行 强迫症笔者近来看到托盘里有几个程序,日常会使用到但是不会对其托 ...

  2. 如何获得指定进程的主窗口

    我们知道一个进程可能是没有主窗口(比如系统的服务进程)而有的进程可能又拥有不止一个的主窗口(比如OutLook软件),那么我们该如何才能取得指定进程的所有主窗口呢? 我们必须明确我们感兴趣" ...

  3. 隐藏控制台程序的dos窗口

    有时侯写一个控制台程序,不需要在前台出现类似DOS窗口的console窗口,这就要隐藏它:隐藏它很简单,只需在程序前面加上 #pragma comment( linker, "/subsys ...

  4. 计算机怎么隐藏应用程序,在窗口中隐藏 RemoteApp 程序弹出窗口

    修补程序信息 可以从 Microsoft 获得受支持的修复程序.然而,此修补程序仅用于解决本文中描述的问题.此修复程序仅适用于遇到本文中描述的问题的系统.此修补程序可能会接受进一步的测试.因此,如果这 ...

  5. react调用api等待返回结果_程序员:RPC远程调用原理浅析

    RPC 基本概念 RPC(Remote Procedure Call)远程过程调用,简单的理解是一个节点请求另一个节点提供的服务 本地过程调用:如果需要将本地student对象的age+1,可以实现一 ...

  6. C#:将另一个应用程序的主窗口移至屏幕最前

    2019独角兽企业重金招聘Python工程师标准>>> 使用WindowsAPI函数SwitchToThisWindow,可以将指定窗口移动到屏幕最前. 如果要将另一个应用程序的窗口 ...

  7. 防止多重启动之调用Api [收集2005090201]

    防止多重启动之调用Api (效果:第二次启动程序则前一进程的窗口跳到最前) using System.Threading; private const int SW_NORMAL = 1; // se ...

  8. nova launcher_如何使用Nova Launcher从Android的应用程序抽屉中隐藏应用程序

    nova launcher Not every app deserves a spot in your app drawer. Maybe there are some built-in apps y ...

  9. Flash Player小程序(内嵌窗口)在Chrome、Firefox、Edge、360极速/安全、IE 8、Oprea 36、QQ、搜狗等浏览器上的应用

    Flash Player小程序(内嵌窗口):基于跨浏览器的小程序系统-PluginOK(牛插)中间件( https://github.com/wangzuohuai/WebRunLocal )开发,底 ...

最新文章

  1. 《每天学点博弈论全集》-读书总结
  2. 分享 C++命名空间的解释
  3. C语言-数据结构与其他数据形式
  4. 数据库考研SQL操作
  5. 5-2 Windows消息队列 (25分)
  6. Java反序列化漏洞研究
  7. Keras——用Keras搭建线性回归神经网络
  8. win10系统 计算机配置要求高吗,win10流畅配置要求有哪些
  9. GALGAME 剧本提取工具
  10. 软件项目建议书模板(免费)
  11. 聚类算法(DBSCAN)
  12. Quuppa_基站灯闪烁原因
  13. 网站账号中密码的加密方式
  14. 交换机与路由器技术-04-远程管理交换机
  15. 学习JavaScript这一篇就够了
  16. 2月书讯(下)| 新年到,新书到!
  17. 【网络安全】CSRF漏洞详细解读
  18. MarkMind使用技巧
  19. python print用法可以不加引号吗_python的print函数不加括号吗
  20. Linux服务器迁移文件系统,DD方式迁移Linux系统.pdf

热门文章

  1. win11系统之win11亮点
  2. 国产化服务器兼容系统,加速国产化应用新进程,FinClip与统信UOS完成兼容互认证...
  3. 站长在线Python精讲:Python中正则表达式的语法详解
  4. %s格式符 输入输出字符串
  5. 计算机专业考研100+不是梦!
  6. 推荐系统遇上深度学习(十九)--探秘阿里之完整空间多任务模型ESSM
  7. 一起来浅谈使用苹果 M1 MacBook Pro 的体验感受!
  8. dnf剑魂buff等级上限_DNF:这才叫“念帝”!这点都不懂,旋涡普雷团没人要!...
  9. ZZULIOJ-1074,百钱买百鸡(Java)
  10. 易课寄在线购课系统开发笔记(十一)--完成课程列表查询的功能