![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как по хендлу SysListView32 получитьсписок всех его элементов?
volser © (2005-01-18 10:33:00)Помогите по сабжу плз.
volser (2005-01-20 00:01:00) [1]jonni
Что много не понятного в твоем коде.
Что такое twi, ph, c1?
Можешь кинуть более детальный код?
volser (2005-01-19 23:58:00) [2]У меня XP
jonni (2005-01-19 22:10:00) [3]est' vot takoy primer......
il : array[0..$3FF] of char;
twi.iconList: Cardinal;
ReadProcessMemory(ph,POINTER(twi.iconList),@il,sizeof(il),c1);
ico := TIcon.Create;
ico.Handle := ImageList_ExtractIcon(0,cardinal(@il),ImageIndex);
na skol'ko pravil'no eto napisnao ne znayu.....no vot tochno rabotaet v windows nizhe i vklyuchaya 2K.. v windows vishe ne proveryal.......
jonni (2005-01-19 22:03:00) [4]nu chto mozhet bit' naprimer....
----------------
http://support.microsoft.com/default.aspx?scid=kb;en-us;811415
However, when you do this on a computer running Windows XP, the wrong handle is returned. If you call any other APIs, and then
pass this handle, those API calls will not function correctly.
----------------
mozhet ono i ne dolzhno rabotat'?? kakoy u tebya Windows?
volser (2005-01-19 13:04:00) [5]Посмотрел пример.
Через CreateRemoteBuffer получаю, а с imagelistом никах.
Вот кусочек кода
nb := SendMessage(LVH, LVM_GETIMAGELIST, LVSIL_NORMAL, 0);
ReadRemoteBuffer(Base2, @h, SizeOf(h));
Form1.ImageList1.Handle:=h;
ShowMessage(IntToStr(Form1.ImageList1.Count));
модификация примера.
Но выводит 0. Как тогда imagelist получать?
volser (2005-01-19 13:01:00) [6]К сожалению не имеется такой литературы.
Может все таки просветишь?
Игорь Шевченко (2005-01-19 12:40:00) [7]Рихтера читать
volser (2005-01-19 12:36:00) [8]
AttachThreadInputc:=ListView_GetItemCount(ListViewHandle);
GetMem(Buf,255);
for i:=0 to c-1 do
begin
ListView_GetItemText(ListViewHandle,i,0,Buf,255);
memo1.Lines.Add(IntToStr(i) +':'+ buf);
end;
AttachThreadInput(GetCurrentThreadId,GetWindowThreadProcessId(ListViewHandle),False);
Ну вот приатачался. Что здесь не так?
jonni (2005-01-18 21:48:00) [9]na skol'ko ya ponimayu ti ne smozhehs nikogda vot tak prosto poluchit' dannie NE IZ svoego processa... tebe snachalo nado otkrit' process... videlit' pamayt'... poluchit' dannie..... itd...
naprimer vot: http://www.delphiworld.narod.ru/base/dt_icons_pos_g_s.html
(ne sovsem konechno ideal'niy primer.. no pervoe chto popalos' pod ruku...)
hotya po inetu polno ssilok.....
volser (2005-01-18 16:49:00) [10]
function GetDesktopListViewHandle: THandle;
var
S: String;
begin
Result := FindWindow('ProgMan', nil);
Result := GetWindow(Result, GW_CHILD);
Result := GetWindow(Result, GW_CHILD);
SetLength(S, 40);
GetClassName(Result, PChar(S), 39);
if PChar(S) <> 'SysListView32' then Result := 0;
end;
...
var
Item: TLVItem;
begin
ListView_Handle := GetDesktopListViewHandle;
ZeroMemory(@item,sizeof(item));
if ListView_GetItem(ListView_Handle, Item) then ShowMessage('Cool');
Что у меня не правильно?
Хендл ListView берется правиль (я пробовал его прятать и показывать), а функция ListView_GetItem не пашет.