枚举窗口

// 为指定的父窗口枚举子窗口、按钮
function EnumChildWndProc(AhWnd: LongInt; AlParam: lParam): boolean; stdcall;
var
  WndClassName: array [0 .. 254] of Char;
  WndCaption: array [0 .. 254] of Char;
begin
  GetClassName(AhWnd, WndClassName, 254);
  GetWindowText(AhWnd, WndCaption, 254);
  with Form1.Memo1 do
  begin
    lines.add('类名:' + string(WndClassName));
    lines.add('标题:' + string(WndCaption));
    lines.add('句柄:' + inttostr(AhWnd));
    lines.add('-------');
  end;
  result := true;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  hWnd: LongInt;
begin
  Memo1.lines.Clear;
  Memo1.lines.add(Edit1.Text + ' 有如下控件类名称');
  hWnd := Strtoint(Edit1.Text);
  // hWnd:=FindWindow(nil,pchar(Edit1.Text));
  if hWnd <> 0 then
  begin
    EnumChildWindows(hWnd, @EnumChildWndProc, 0);
  end
  else
    MessageBox(self.handle, '没找到该窗口句柄', '提示', 0);
end;



//根据句柄获取进程PID(需要引用PsAPI单元)
Function GetPidAndPath(Han: Hwnd): String;
Var
  Pid: Cardinal;
  PHandle: THandle;
  Buf: Array [0 .. 254] Of Char;
Begin
  GetWindowThreadProcessId(Han, @Pid); // 根据句柄获得进程PID
  PHandle := OpenProcess(PROCESS_ALL_ACCESS, False, Pid); // 通过进程PID获取进程句柄
  GetModuleFileNameEx(PHandle, 0, Buf, 255); // 通过进程句柄获取其模块路径
  CloseHandle(PHandle);
  if Buf <> '' then
  Begin
    Result := Buf;  //返回程序路径
  End;
End;
//枚举可视所有窗口句柄
procedure TForm1.Button1Click(Sender: TObject);
Var
  A: Hwnd;
  Sztext: Array [0 .. 254] Of Char;
begin
  A := GetWindow(Handle, GW_HwndFirst);
  while A <> 0 do
  Begin
    if (GetWindowText(A, Sztext, 254) > 0) And (IsWindowVisiBle(A)) then
    Begin
      Memo1.Lines.Add(Sztext);
    End;
    A := GetWindow(A, GW_HwndNext);
  End;
end;
// 通过子窗口句柄获取最主窗口句柄
function ChildGetMainWindow(a: hWnd): Integer; 
Var
  Thw: hWnd;
  TBl: Integer;
Begin
  while a <> 0 do
  Begin
    if a <> 0 then
      Result := a;
    a := GetParent(a);
  End;
End;




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值