findwindowex如何使用FindWindowEx获取窗体内控件句柄

findwindowex  时间:2022-02-23  阅读:()

如何使用FindWindowEx获取窗体内控件句柄

一般用FindWindow。。。 Delphi中获取其它进程的窗口句柄,在Delphi中获取其它进程的窗口句柄,绝大部分人首先想到的会使用:FindWindow或者用GetWindow来遍历查找,如: Delphi/Pascal code? handle := FindWindow(nil,PChar('窗口的标题')); 或者: Delphi/Pascal code? procedure TForm1.Button1Click(Sender: TObject); var   hCurrentWindow: HWnd;   WndText:String; begin   hCurrentWindow := GetWindow(Handle, GW_HWNDFIRST);   while hCurrentWindow <> 0 do   begin     WndText:=GetWndText(hCurrentWindow);     if UpperCase(WndText)='窗口的标题' then begin       ...       ...     end;     hCurrentWindow:=GetWindow(hCurrentWindow, GW_HWNDNEXT);   end; end; 因为目前网络上绝大部分的代码都是介绍用这两种方法取得其它进程的窗口句柄。虽这两种方法都可以达到查找其它进程的窗口句柄的目的,但本人认为这两都方法存在较大的弊端。因为这两种方法都是根据其它进程的标题来查找的,如果其它进程的标题在运行时不断的发生变化,那么这两种方法就无法没办法用了。 介绍第三种通过进程的文件名来查找窗口句柄。首先通过进程快照得到要查找的进程ID(ProcessId),其次,再跟据ProcessId获取进程的窗口句柄。以下为本文章的代码: Delphi/Pascal code? uses TLHelp32; procedure TForm1.Button1Click(Sender: TObject); var ProcessName : string; //进程名 FSnapshotHandle:THandle; //进程快照句柄 FProcessEntry32:TProcessEntry32; //进程入口的结构体信息 ContinueLoop:BOOL; MyHwnd:THandle; begin FSnapshotHandle:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); //创建一个进程快照 FProcessEntry32.dwSize:=Sizeof(FProcessEntry32); ContinueLoop:=Process32First(FSnapshotHandle,FProcessEntry32); //得到系统中第一个进程 //循环例举 while ContinueLoop do begin ProcessName := FProcessEntry32.szExeFile; if(ProcessName = '要找的应用程序名.exe') then begin MyHwnd := GetHWndByPID(FProcessEntry32.th32ProcessID); ... ... end; ContinueLoop:=Process32Next(FSnapshotHandle,FProcessEntry32); end; CloseHandle(FSnapshotHandle); // 释放快照句柄 end; //跟据ProcessId获取进程的窗口句柄 function TForm1.GetHWndByPID(const hPID: THandle): THandle; type PEnumInfo = ^TEnumInfo; TEnumInfo = record ProcessID: DWORD; HWND: THandle; end; function EnumWindowsProc(Wnd: DWORD; var EI: TEnumInfo): Bool; stdcall; var PID: DWORD; begin GetWindowThreadProcessID(Wnd, @PID); Result := (PID <> EI.ProcessID) or (not IsWindowVisible(WND)) or (not IsWindowEnabled(WND)); if not Result then EI.HWND := WND; end; function FindMainWindow(PID: DWORD): DWORD; var EI: TEnumInfo; begin EI.ProcessID := PID; EI.HWND := 0; EnumWindows(@EnumWindowsProc, Integer(@EI)); Result := EI.HWND; end; begin if hPID<>0 then Result:=FindMainWindow(hPID) else Result:=0; end; 我说的是组件的句柄,不是窗体的句柄 findwindowex();获取指定句柄窗口下的子控件,当然是有句柄的控件 窗体的句柄都知道,还能不知道里面组件的句柄?——windows标准组件 procedure TForm1.Button2Click(Sender: TObject); var canvas1: TCanvas; begin Canvas1 := TCanvas.Create; //这是OK。这真要感谢baidu,google canvas1.Handle := GetDc(panel1.Handle); canvas1.TextOut(1,1,'hello'); canvas1.Free ; Form1.Canvas.TextOut(10, 10, 'fff'); end; 有的组件是没有句柄的 ShowMessage(IntToStr(TWinControl(Form1.FindChildControl('Panel1')).Handle));

ReliableSite:美国服务器租用,洛杉矶/纽约/迈阿密等机房;E3-1240V6/64GB/1TSSD,$95/月

reliablesite怎么样?reliablesite是一家于2006年成立的老牌美国主机商,主要提供独服,数据中心有迈阿密、纽约、洛杉矶等,均免费提供20Gbps DDoS防护,150TB月流量,1Gbps带宽。月付19美金可升级为10Gbps带宽。洛杉矶/纽约/迈阿密等机房,E3-1240V6/64GB内存/1TB SSD硬盘/DDOS/150TB流量/1Gbps带宽/DDOS,$95/月,...

Sharktech云服务器35折年付33美元起,2G内存/40G硬盘/4TB流量/多机房可选

Sharktech又称SK或者鲨鱼机房,是一家主打高防产品的国外商家,成立于2003年,提供的产品包括独立服务器租用、VPS云服务器等,自营机房在美国洛杉矶、丹佛、芝加哥和荷兰阿姆斯特丹等。之前我们经常分享商家提供的独立服务器产品,近期主机商针对云虚拟服务器(CVS)提供优惠码,优惠后XS套餐年付最低仅33.39美元起,支持使用支付宝、PayPal、信用卡等付款方式。下面以XS套餐为例,分享产品配...

美国VPS 美国高防VPS 香港VPS 日本VPS 首月9元 百纵科技

百纵科技湖南百纵科技有限公司是一家具有ISP ICP 电信增值许可证的正规公司,多年不断转型探索现已颇具规模,公司成立于2009年 通过多年经营积累目前已独具一格,公司主要经营香港服务器,香港站群服务器,美国高防服务器,美国站群服务器,云服务器,母机租用托管!美国CN2云服务器,美国VPS,美国高防云主机,美国独立服务器,美国站群服务器,美国母机。美国原生IP支持大批量订货 合作 适用电商 亚马逊...

findwindowex为你推荐
adversary英语match,是什么意思.?settimervc++6.0 settimer函数是怎么用的啊,能给个例子在讲解一下行么mindmanager破解版求mindmanager 2019 的注册机天融信防火墙都说天融信的产品不错,那天融信的下一代防火墙真的是当今最好的防火墙产品了吗?调度系统操作系统中为什么需要调度?数秦科技浙江数链科技有限公司怎么样?欢迎页面windows欢迎界面手机建设银行网址建设银行个人网上银行使用手机浏览器访问没有登录入口。银联商务招聘银联商务的正式工与派遣工有啥区别疫苗之王“龟毛之王”是什么意思???
vps侦探 中文域名交易中心 重庆服务器托管 yardvps 百度云100as 好玩的桌面 小米数据库 七夕促销 tna官网 什么是服务器托管 河南移动网 重庆双线服务器托管 789电视剧 raid10 我的世界服务器ip 中国联通宽带测速 登陆qq空间 测试网速命令 建站技术 海尔t68g 更多