鱼C论坛

 找回密码
 立即注册
查看: 3191|回复: 1

dlephi7里如何获得多个同标题窗口的句柄!

[复制链接]
发表于 2016-2-1 17:14:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
        在dlephi7里试了很久,和度娘闹了好几天。还是木有搞定,泪崩啊! @@
        在打开多个相同程序时,就有了多个相同类名和标题的窗口,但是他们的句柄不同,如何才能获得;比如有3个记事本都开着,窗口类名都是:’Notepad‘;窗口标题都是:‘无标题 - 记事本’;但是有3个句柄,如何吧3个不同的句柄都找到
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-2-2 16:27:12 | 显示全部楼层
jdfw.gif
var
  h: array[0..2] of Char;
  hedt: array[0..2] of HWND;
  str:string;
  i:integer;

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

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 = 'notepad.exe') then
    begin
      MyHwnd := GetHWndByPID(FProcessEntry32.th32ProcessID);
      Memo1.Lines.Add(inttostr(MyHwnd));
    end;
    ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
  end;
  CloseHandle(FSnapshotHandle);
    for i := 0 to memo1.Lines.Count - 1 do
  begin
    hedt[i]:=FindWindowEx(strtoint(memo1.Lines[i]),0,'edit',nil);
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
               ;
 SendMessage(hedt[0], WM_SETTEXT, 255, LongInt(Pchar('内容写入记事本一')));
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
 SendMessage(hedt[1], WM_SETTEXT, 255, LongInt(Pchar('内容写入记事本二')));
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
SendMessage(hedt[2], WM_SETTEXT, 255, LongInt(Pchar('内容写入记事本三')));
end;

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
水云 + 1 + 1 热爱鱼C^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-25 02:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表