Показать сообщение отдельно
  #20  
Старый 26.06.2009, 22:24
Nyctos Kasignete Nyctos Kasignete вне форума
Активный
 
Регистрация: 29.03.2009
Сообщения: 300
Репутация: 94
По умолчанию

Ну как я вам ещё помогу... Для того, чтобы получить handle окна, можно исследовать само главное окно ICQ с помощью функции EnumChildWindows. Вот пример. Ищем по классу RichEdit20A.
Код:
unit Uni_t1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  ChatWnd: HWND;
  function EnumChildWndProc(hndl: HWND; lprm: LPARAM): BOOL; stdcall;

implementation

{$R *.dfm}

function EnumChildWndProc(hndl: HWND; lprm: LPARAM): BOOL; stdcall;
var
  WndClassName: PChar;
begin
  GetMem(WndClassName, 255);
  try
    Result := True;
    GetClassName(hndl, WndClassName, 255);
    if LowerCase(StrPas(WndClassName)) = 'richedit20a' then
    begin
      ChatWnd := hndl;
      Result := False;
    end;
  finally
    FreeMem(WndClassName, 255);
  end;
end;


procedure TForm1.Button1Click(Sender: TObject);
const
  ICQWNDTEXT = 'ICQ'; // вот здесь напишите реальный заголовок окна ICQ
var
  ICQWnd: HWND;
begin
  ChatWnd := 0;
  ICQWnd := FindWindow(nil, ICQWNDTEXT);
  if ICQWnd = 0 then Exit;
  EnumChildWindows(ICQWnd, @EnumChildWndProc, 0);
  if ChatWnd <> 0 then // нашли!
    ShowMessage('Chat Window Handle is ' + IntToStr(ChatWnd))
  else // не нашли. Возможно, он — дочернее окно в дочернем
    ShowMessage('Not found. Maybe it is a child of a child');
end;

end.

P.S. ICQ ради вас устанавливать не буду, уж простите. Мне накладно скачивать пару десятков мегабайт.
Ответить с цитированием