没有一般的方法来获得应用程序的“窗口句柄”,因为不能保证任何程序都有一个窗口句柄。一个程序可能有许多顶级的句柄(例如,Microsoft Word,每个文档一个),或者它可能根本没有窗口。您可能会质疑您真正需要窗口句柄做什么;可能有更好的方法来做您试图做的事情,而不需要任何特定的窗口句柄。

WinExec

(已被弃用近15年,因此您应认真考虑不再使用它)和

ShellExecute

如果他们确实启动了任何程序,那么绝对不会返回关于他们启动的程序的信息。(

贝壳执行

可能使用DDE向已经运行的应用程序实例发送命令。)如果它们启动应用程序,则可能在程序再次运行之前完成运行。

你可以使用

CreateProcess

ShellExecuteEx

相反。如果他们启动一个程序,他们会给你一个表示他们启动的程序的进程句柄。您可以使用它来帮助您获得有关该程序的其他信息,例如它的窗口列表。别费心了

FindWindow

;标题和窗口类不能保证是唯一的;一个程序可能对许多不同的窗口使用相同的类名,并且一个程序的多个实例将使用相同的类名,而没有太多方法来选择您真正想要的类名。

EnumWindows

是一个可用于获取候选窗口句柄列表的函数。您给它一个函数指针,它将为桌面上的每个顶级窗口调用该函数一次。您需要一种方法来告诉它您对哪个过程感兴趣,以及一种方法来返回结果列表。函数只接受一个参数,因此该参数必须是指向包含更多信息的结构的指针:

type

PWindowSearch = ^TWindowSearch;

TWindowSearch = record

TargetProcessID: DWord;

ResultList: TWndList;

end;

TWndList

是我编出来的用来存放

HWnd

价值观。如果您有Delphi2009或更高版本,可以使用

TList

;对于早期版本,可以使用

TList

后代或你选择的任何其他人。

创建过程

将在

dwProcessID

会员

TProcessInformation

记录其填写情况;

谢尔执行程序

只返回进程句柄,因此使用

GetProcessID

就这点而言。窗口枚举函数需要与此签名匹配的回调函数:

function SelectWindowByProcessID(Wnd: HWnd; Param: LParam): Bool; stdcall;

你可以使用

枚举窗口

要获得这样的句柄列表:

function GetWindowListByProcessID(pid: DWord): TWndList;

var

SearchRec: TWindowSearch;

begin

Result := TWndList.Create;

try

SearchRec.TargetProcessID := pid;

SearchRec.ResultList := Result;

Win32Check(EnumWindows(SelectWindowByProcessID, LParam(@SearchRec)));

except

Result.Free;

raise;

end;

end;

您将实现如下回调函数:

function SelectWindowByProcessID(Wnd: HWnd; Param: LParam): Bool; stdcall;

var

SearchRec: PWindowSearch;

WindowPid: DWord;

begin

SearchRec := PWindowSearch(Param);

Assert(Assigned(SearchRec));

GetWindowThreadProcessID(Wnd, WindowPid);

if WindowPid = SearchRec.TargetProcessID then

SearchRec.ResultList.Add(Wnd);

Result := True;

end;

一旦您有了这个列表,您就可以检查窗口的其他属性,以确定哪些属性才是您真正想要的。您可以通过窗口标题或类名来确定它,也可以通过窗口中的其他控件来确定它。

使用完进程句柄后,请确保调用

CloseHandle

这样操作系统就可以清除进程的簿记信息。

linux获取窗口句柄,如何获取在winexec或shellexecute中执行的句柄?相关推荐

  1. linux shell两条命令,在bash shell终端中执行命令时,若要将多条命令书写在一行中,每个命令之间应用( )符号进行分隔。...

    [单选题]DE 杆的角速度的转向为: [判断题]中碳钢的含碳量在0.25%~0.6%之间 [多选题]在大众餐馆吃饭时,应该先( ),之后才能抽烟. [单选题]乳腺癌改良根治术后对患侧上肢肿胀的护理,错 ...

  2. 在Linux上利用python获取本机ip

    下面介绍在Linux上利用python获取本机ip的方法. 经过网上调查, 发现大致有两种方法, 一种是调用shell脚本,另一种是利用python中的socket等模块来得到,下面是这两种方法的源码 ...

  3. Linux下通过v4l2获取视频设备名、支持的编解码及视频size列表实现

    早些时候给出了在Windows下通过dshow获取视频设备信息的实现,包括获取视频设备名.获取每种视频设备支持的编解码格式列表.每种编解码格式支持的video size列表,见:https://blo ...

  4. linux shell参数传递、获取方式

    linux shell参数传递.获取方式

  5. linux shell数组定义、元素获取及其长度获取

    linux shell数组定义.元素获取及其长度获取

  6. I.MX6 Android Linux shell MMPF0100 i2c 获取数据

    #!/system/bin/busybox ash# # I.MX6 Android Linux shell MMPF0100 i2c 获取数据 # 说明: # 本文主要记录通过shell脚本来获取M ...

  7. Android获取Linux图像信息,Android系统信息获取 之十三:Linux内核版本信息获取

    Android系统信息获取 之十三:Linux内核版本信息获取 Android系统是基于Linux的,各个Android版本对应的Linux版本不尽相同,我们这里不去追究各个Android对应的Lin ...

  8. java 收集系统资源_方法:Linux 下用JAVA获取CPU、内存、磁盘的系统资源信息

    CPU使用率: InputStream is = null; InputStreamReader isr = null; BufferedReader brStat = null; StringTok ...

  9. linux c 读取摄像头,Linux下onvif客户端获取ipc摄像头 获取能力:GetCapabilities

    getcapabilities:获取能力,主要目的获取设备能力信息(获取媒体服务地址) 鉴权:但是在调用获取设备能力之前是需要鉴权的.onvif协议规定,部分接口需要鉴权,部分接口不需要鉴权,在调用需 ...

最新文章

  1. oracle中over 语法,Oracle语法之OVER(PARTITIONBY..)及开窗函数
  2. BugkuCTF-reverse:入门逆向
  3. C#如何回到主线程,如何在委托指定线程执行
  4. java背景图片加上组件_关于 java swing组件加背景图片的问题
  5. 2021-2025年中国车轮运动防护产品行业市场供需与战略研究报告
  6. Flex4的皮肤skin
  7. YOLOv4画PR曲线
  8. 【音乐】自挂东南枝歌词原诗句(一)——2015年1月2日
  9. ES部分查询方法,elasticsearch查询方法
  10. iphone怎么连接itunes相关解锁教程
  11. 初步了解3dmax建模方式和多边形建模
  12. valid/ready握手协议之ready打拍
  13. 程序员跳槽一次到底能涨多少?今天带你见识下跳槽天花板
  14. 中国版的Google被阉割掉多少?
  15. 原来贝叶斯统计分析这么简单?这个技巧了解一下
  16. linux ftp去不了文件损坏,Linux下使用ftp上传压缩文件,windows下载打开损坏问题
  17. suds对接web service
  18. 缓存架构设计之——Redis集群搭建
  19. phpstudy安装sg11组件_宝塔面板一键安装配置SG11加密组件教程
  20. 斩杀线计算大师 三元一次方程解

热门文章

  1. 用友无法正确识别到服务器名称,用友T3客户端无法连接到服务器,错误提示:可能无法正确解析服务器名称或者相应的端口被禁用,请尝试输入服务器的IP地址...
  2. 西门子PLC1200立体库机器人码垛机伺服视觉AGV程序
  3. 使用react的好处_聊一聊我对 React Context 的理解以及应用
  4. 将文字转换成图片,可以换行转换
  5. Java有没有多继承
  6. 5G射频前端核心器件之一——射频滤波器向高频化、模组化方向发展
  7. HTML5 上传文件按钮代码
  8. OpenCV系列之特征匹配 | 四十四
  9. 2022-7-6 Leetcode 977.有序数组的平方
  10. 微信小程序 云开发 订阅消息 获取下发权限失败 errCode: 20001