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));

小白云 (80元/月),四川德阳 4核2G,山东枣庄 4核2G,美国VPS20元/月起三网CN2

小白云是一家国人自营的企业IDC,主营国内外VPS,致力于让每一个用户都能轻松、快速、经济地享受高端的服务,成立于2019年,拥有国内大带宽高防御的特点,专注于DDoS/CC等攻击的防护;海外线路精选纯CN2线路,以确保用户体验的首选线路,商家线上多名客服一对一解决处理用户的问题,提供7*24无人全自动化服务。商家承诺绝不超开,以用户体验为中心为用提供服务,一直坚持主打以产品质量用户体验性以及高效...

易探云月付18元起,香港/美国/深圳/北京VPS,CN2、BGP等多线路

易探云怎么样?易探云是国内一家云计算服务商家,致力香港服务器、国内外服务器租用及托管等互联网业务,目前主要地区为运作香港BGP、香港CN2、广东、北京、深圳等地区。易探云服务器均选择当下热门线路,比如CN2 GIA、BGP线路、CN2线路等,所有云主机支持月付,并且首月优惠,年付优惠,优惠后香港沙田云服务器/独立ip/香港CN2线路,每月仅18元,188元/年。点击进入:易探云官方网站地址1、香港...

HyperVMart:加拿大vps,2核/3G/25G NVMe/G口不限流量/季付$10.97,免费Windows系统

hypervmart怎么样?hypervmart是一家成立了很多年的英国主机商家,上一次分享他家还是在2年前,商家销售虚拟主机、独立服务器和VPS,VPS采用Hyper-V虚拟架构,这一点从他家的域名上也可以看出来。目前商家针对VPS有一个75折的优惠,而且VPS显示的地区为加拿大,但是商家提供的测速地址为荷兰和英国,他家的优势就是给到G口不限流量,硬盘为NVMe固态硬盘,这个配置用来跑跑数据非常...

findwindowex为你推荐
洗牌算法关于洗牌算法,请用JAVA编写,定义一个数组,储存1-52以内的数,打乱顺序输出!webcrackwebcrack4网页密码inode智能客户端win7如何使用校园网iNode智能客户端丁奇王下七武海和四皇分别是谁?ruby语言Ruby是一种什么样的语言,主要用来做什么,现在有一家公司让我从java转ruby,我很犹豫?相似图片搜索如何输入图片并且搜出最相似的图片?优众网一淘网是淘宝客吗?有什么区别吗菜霸电视剧《你是我的生命》演员表中科红旗Linux完全开源吗?中科红旗破产,对Linux有影响吗?基础设施即服务基础设施行业的定义是什么?具体包含哪些行业?
ix主机 sugarsync 香港cdn 表格样式 青果网 京东商城双十一活动 e蜗 支付宝扫码领红包 吉林铁通 独享主机 云营销系统 德讯 万网空间 hostease google搜索打不开 主机响 主机之家 如何架设服务器 百度空间登陆首页 qq空间登入 更多