|
#16
|
|||
|
|||
Если б у меня был ICQ, я написала бы сразу, что к чему и как. Но поскольку его нет (и даром не нужен), то могу лишь вслепую пробежать ваш код. Но всё равно сейчас посмотрю.
P.S. А что это вы мне подкинули? X) Это же только то, что я вам написала, и больше ничего. Что там проверять-то?? Последний раз редактировалось Nyctos Kasignete, 26.06.2009 в 21:41. |
#17
|
|||
|
|||
Я не могу через FindWindow найти окно чата. и приходиться вставлять хендл вручную. А он всегда разный. Желательно, чтобы это было автоматом. И проблема с билебердой меня беспокоит. Может вы ради меня поставите ICQ, протестируете и затем его удалите? Просто мне очень нужно, что написано в сабже темы.
Последний раз редактировалось Muxa, 26.06.2009 в 21:48. |
#18
|
|||
|
|||
Подождите, а зачем столько нулей стоит вначале:
Цитата:
Если это число шестнадцатеричное, то оно пишется так. Код:
GetTxt($00030564); |
#19
|
|||
|
|||
Да, да - точно. Я забыл. Теперь вообще ничего не выдает(
|
#20
|
|||
|
|||
Ну как я вам ещё помогу... Для того, чтобы получить 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 ради вас устанавливать не буду, уж простите. Мне накладно скачивать пару десятков мегабайт. |
#21
|
|||
|
|||
Я как только не извращался, но не выходит. Не находит окна((
|
#22
|
|||
|
|||
Неужели никто не поможет? Не получается у меня сделать. Я много раз пытался, но захват не происходит(
|
#23
|
|||
|
|||
http://www.delphikingdom.com/asp/vie...catalogid=1167
Кароч, даже в их примере не все окна находятся. Незнаю как это делает WinSpy++... ( Надо у автора проги спросить ))) |
#24
|
|||
|
|||
Благодаря Nyctos Kasignete,у меня получилось отыскать все дочерние окна. Пытался получить текст из она с чатом QIP, но не выходит. Там используется: Trichview. Делаю вот так:
Код:
var QIP, PageHandle, TabHandle, childHWND1, childHWND2, childHWND3: THandle; lpBuffer: PChar; begin QIP := FindWindow(nil, PChar('Текст окна с чатом')); if QIP <> 0 then begin PageHandle := FindWindowEx(H, 0, 'TInfiPageControl.UnicodeClass', nil); if PageHandle <> 0 then begin TabHandle := FindWindowEx(PageHandle, StrToInt('$00060A4C'), 'TQipTabSheet.UnicodeClass',nil); if TabHandle <> 0 then begin childHWND1 := FindWindowEx(TabHandle, StrToInt('$00060A4C'), 'TMsgPanel.UnicodeClass', nil); if childHWND <> 0 then begin childHWND2 := FindWindowEx(TabHandle, StrToInt('$00040A50'), 'TInfuPanel.UnicodeClass', nil); if childHWND2 <> 0 then begin childHWND3 := FindWindowEx(TabHandle, StrToInt('$00030A68'), 'TRichView', nil); if childHWND3 <> 0 then lpBuffer := GetMemory(2028); try SendMessage(childHWND3, WM_GETTEXT, 2048, Integer(lpBuffer)); RichEdit1.Text := lpBuffer; finally FreeMemory(lpBuffer); но не могу получить текст. Ни у кого других мыслей нет?(( |
#25
|
|||
|
|||
|