Handle И Messages

Senset

Well-known member
11.09.2006
136
0
#1
Задача: отловить завершение скачки торрент-файла на клиенте utorrent (взята версия 1.7.7 так как там в большинстве своем окна названы одинаково и отловить их по имени сложнее)

Конкретная задача: вырвать из ListBox элементы... определить какой выбран, выбрать другой (если выбранный не катит) проверить список... (зы до списка пока не дошел)...

концепция:
есть handle окна utorrent'a, отловил handle ListBox'а... обращаюсь (аля винапи) к кол-ву элементов в блоке, вырываю их имена... и... ппц...

Конкретика:

Код:
s:='µTorrent 1.7.7';
handle:=findwindow(nil,pchar(s));
t:=tstringlist.Create;
EnumChildWindows(handle,@ECWC,LParam(t));
//В ECWC происходит заполение д.м.с. t 
h:=FHBC(t,1,'listbox');
//В fhbc происходит определение handle по классу через массив строк, который был с сформирован в ECWC)
listbox1.Items.Add(inttostr(h));
t2:=tstringlist.Create;
LB_GetAllItems(h,t2);
t2.Clear;
t.Clear;

function LB_GetAllItems(hWnd: Hwnd; sl: TStringlist): string;
var
RetBuffer:array[0..255] of char;
i, x: Integer;
begin
x := SendMessage(hWnd, LB_GETCOUNT, 0, 0);
for i := 0 to x - 1 do
begin
SendMessage(hWnd, LB_GETTEXT, i, lparam(@RetBuffer));
sl.Add(RetBuffer);
end;
end;
в результате её выполнения получается не то, что надо и из этого сложно отличить то, что надо выбрать...
т.е:
Окно программы (через handle):

Окно ListBox (получено через handle):

И по коду вырывает названия элементов в ListBox...
но и в итоге имена эти:


Очевидно, что что-то не так... help!
 
Z

ZorkovIgor

#2
1. Указывем версию Delphi или используем PWideChar/PAnsiChar вместо PChar, потому что в D7 и в DXE это уже не одно тоже
2. Полный код в студию
3. Интересно как вы ловите момент завершение скачки торрент-файла
 

Senset

Well-known member
11.09.2006
136
0
#3
1. Указывем версию Delphi или используем PWideChar/PAnsiChar вместо PChar, потому что в D7 и в DXE это уже не одно тоже
2. Полный код в студию
3. Интересно как вы ловите момент завершение скачки торрент-файла
1. Delphi 7
2. Полный код предоставить не могу, т.к. прога написана и выцеплять только нужные модули сложновато, но именно эта проблема не решена
3. Сейчас не могу открыть исходник и копирнуть код, но смысл был в том, что кликается графа "все торренты", торрент обновлял таблицу, в ней производился поиск нужного торрент контента (первый атрибут) и его состояние (четвертый атрибут "done","downloading","stop", "seeding"...) и как только состояние становилось не "downloading" был репорт

проверка производилась каждые 10 секунд