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

[6.18]IMIDC:香港/台湾服务器月付30美元起,日本/俄罗斯服务器月付49美元起

IMIDC发布了6.18大促销活动,针对香港、台湾、日本和莫斯科独立服务器提供特别优惠价格最低月付30美元起。IMIDC名为彩虹数据(Rainbow Cloud),是一家香港本土运营商,全线产品自营,自有IP网络资源等,提供的产品包括VPS主机、独立服务器、站群独立服务器等,数据中心区域包括香港、日本、台湾、美国和南非等地机房,CN2网络直连到中国大陆。香港服务器   $39/...

易探云330元/年,成都4核8G/200G硬盘/15M带宽,仅1888元/3年起

易探云服务器怎么样?易探云是国内一家云计算服务商家,致力香港云服务器、美国云服务器、国内外服务器租用及托管等互联网业务,目前主要地区为运作香港BGP、香港CN2、广东、北京、深圳等地区。目前,易探云推出的国内云服务器优惠活动,国内云服务器2核2G5M云服务器低至330元/年起;成都4核8G/200G硬盘/15M带宽,仅1888元/3年起!易探云便宜vps服务器配置推荐:易探云vps云主机,入门型云...

Hostodo商家提供两年大流量美国VPS主机 可选拉斯维加斯和迈阿密

Hostodo商家算是一个比较小众且运营比较久的服务商,而且还是率先硬盘更换成NVMe阵列的,目前有提供拉斯维加斯和迈阿密两个机房。看到商家这两年的促销套餐方案变化还是比较大的,每个月一般有这么两次的促销方案推送,可见商家也在想着提高一些客户量。毕竟即便再老的服务商,你不走出来让大家知道,迟早会落寞。目前,Hostodo有提供两款大流量的VPS主机促销,机房可选拉斯维加斯和迈阿密两个数据中心,且都...

findwindowex为你推荐
开票系统网上申请的发票怎么读入开票系统李昊天李昊天这名字给多少分天融信防火墙天融信下一代防火墙有那些特点和优势?民生电商民生电商招的仓库操作工是干什么的smartupload为什么使用smartupload执行上传保存操作时用这句smart.save("upload")失败用smart.save("/upload")成功12306注册12306怎么注册账号screencapture求一款这样的截图软件建立qq号QQ号码怎么建?多媒体制作多媒体设计要学什么东西安卓ps模拟器安卓PS模拟器游戏在哪下载?
重庆虚拟空间 vps虚拟服务器 新网域名解析 cpanel主机 国外空间服务商 42u标准机柜尺寸 天猫双十一秒杀 空间服务商 ibox官网 anylink 卡巴斯基官方免费版 什么是刀片服务器 刀片服务器是什么 工作站服务器 泉州移动 hktv 中国电信宽带测速器 google台湾 网页提速 上海电信测速 更多