Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- type
- TPalWinInfo = Record
- sTitle: String;
- hMainWin: Hwnd;
- hOutgoing: Hwnd;
- hIncoming: Hwnd;
- hNickList: Hwnd;
- bIsRoom: Boolean;
- End;
- type
- TForm1 = class(TForm)
- lvWinInfo: TListView;
- btnRefresh: TButton;
- procedure FormDestroy(Sender: TObject);
- procedure btnRefreshClick(Sender: TObject);
- private
- { Private declarations }
- Procedure AddToListView(pWinInfo: TPalWinInfo);
- Procedure CleanUp;
- public
- { Public declarations }
- end;
- var
- Form1: TForm1;
- aPalWinInfo: Array of TPalWinInfo;
- implementation
- {$R *.dfm}
- procedure TForm1.AddToListView(pWinInfo: TPalWinInfo);
- var
- sIsRoom: String;
- begin
- if pWinInfo.bIsRoom then
- sIsRoom:= 'Room'
- else
- sIsRoom:= 'Pm';
- with lvWinInfo.Items.Add do
- begin
- Caption := pWinInfo.sTitle;
- subItems.Add(IntToStr(pWinInfo.hMainWin));
- subItems.Add(IntToStr(pWinInfo.hIncoming));
- subItems.Add(IntToStr(pWinInfo.hOutgoing));
- subItems.Add(IntToStr(pWinInfo.hNickList));
- subItems.Add(sIsRoom);
- end;
- end;
- function GetTitle(aHwnd: Hwnd): String;
- begin
- SetLength(Result, 255);
- SetLength(Result, GetWindowText(aHwnd, Pchar(Result), 255));
- end;
- function GetClass(aHwnd: Hwnd): String;
- begin
- SetLength(Result, 255);
- SetLength(Result, GetClassName(aHwnd, Pchar(Result), 255));
- end;
- Function EnumChildProc(aHwnd: Hwnd; Param: LParam): BOOL; stdcall;
- begin
- Result:= True;
- if IsWindowVisible(aHwnd) then
- case GetDlgCtrlId(aHwnd) of
- 202:
- begin
- aPalWinInfo[Pred(Length(aPalWinInfo))].hIncoming := aHwnd;
- Result:= False;
- end;
- 203:
- begin
- aPalWinInfo[Pred(Length(aPalWinInfo))].hOutgoing := aHwnd;
- end;
- 1789:
- begin
- aPalWinInfo[Pred(Length(aPalWinInfo))].hNickList := aHwnd;
- aPalWinInfo[Pred(Length(aPalWinInfo))].bIsRoom:= True;
- end;
- end;
- end;
- function EnumWindowsProc(aHwnd: Hwnd; Param: LParam): BOOL; stdcall;
- begin
- Result:= true;
- if GetClass(aHwnd) = 'DlgGroupChat Window Class' then
- begin
- if aPalWinInfo <> nil then
- SetLength(aPalWinInfo, Length(aPalWinInfo) + 1)
- else
- SetLength(aPalWinInfo, 1);
- aPalWinInfo[Pred(Length(aPalWinInfo))].sTitle := GetTitle(aHwnd);
- aPalWinInfo[Pred(Length(aPalWinInfo))].hMainWin := aHwnd;
- EnumChildWindows(aHwnd, @EnumChildProc, 0);
- end;
- end;
- procedure TForm1.btnRefreshClick(Sender: TObject);
- var
- I: Integer;
- begin
- CleanUp;
- EnumWindows(@EnumWindowsProc, 0);
- for I := Low(aPalWinInfo) to High(aPalWinInfo) do
- AddToListView(aPalWinInfo[i]);
- end;
- procedure TForm1.CleanUp;
- begin
- if aPalWinInfo <> nil then
- aPalWinInfo:= Nil;
- lvWinInfo.Clear;
- end;
- procedure TForm1.FormDestroy(Sender: TObject);
- begin
- if aPalWinInfo <> Nil then
- aPalWinInfo := Nil;
- end;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement