Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2016.02.07;
Скачать: CL | DM;

Вниз

Проблема чтения списка из чужого окна в 64-bit OS   Найти похожие ветки 

 
JustBeginner ©   (2014-07-12 14:28) [0]

Привет! Процедура проверяет открыто ли окно Диспетчера задач, и если открыто - считывает из него список процессов в мой Memo1.
Процедура получения списка процессов приведена ниже.
На 32-битной семерке работает отлично, а на 64 - сам диспетчер задач просто закрывается с ошибкой "Прекращена работа программы Диспечер задач Windows".
Подскажите, что нужно исправить чтобы работало на Windows 7 64-bit?


procedure UpdateList();
var
 i:integer;
 Amount: Integer;
 buf: array [0..255] of Char;
 PID, ProcessHandle, Dummy: DWORD;
 PCh: PChar;
 PItem: ^LV_ITEM;
 Item: LV_ITEM;
 h: THandle;
begin
 h:=FindWindow(nil,"Диспетчер задач Windows");
 h:=FindWindowEx(h,0,nil,"Процессы");
 h:=FindWindowEx(h,0,"SysListView32",nil);
 if h = 0 then Exit;

  GetWindowThreadProcessID(h, @PID);
  ProcessHandle := OpenProcess(PROCESS_ALL_ACCESS, False, PID);
  PCh := VirtualAllocEx(ProcessHandle, nil, 255, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
  PItem := VirtualAllocEx(ProcessHandle, nil, SizeOf(LV_ITEM), MEM_COMMIT, PAGE_EXECUTE_READWRITE);
  Amount := ListView_GetItemCount(h);
 for I := 0 to Amount do
 begin
   Item.mask := LVIF_TEXT;
   Item.iItem := I;
   Item.iSubItem := 0;
   Item.pszText := PCh;
   Item.cchTextMax := SizeOf(buf);
   WriteProcessMemory(ProcessHandle, PItem, @Item, sizeOf(Item), Dummy);
   if ListView_GetItem(h, PItem^) then
   begin
     ReadProcessMemory(ProcessHandle, PCh, @buf, 255, Dummy);
     Memo1.Lines.Add(buf); // получаем информацию в Memo1
   end;
 end;
 VirtualFreeEx(ProcessHandle, PCh, 0, MEM_RELEASE);
 VirtualFreeEx(ProcessHandle, PItem, 0, MEM_RELEASE);
 CloseHandle(ProcessHandle);
end;


 
Styx   (2014-07-12 18:27) [1]

Сделать Вашу программу 64-битной. А к чему вообще этот код, почему не получать список самому?


 
JustBeginner ©   (2014-07-12 18:48) [2]

Делать всю программу 64-битной только из-за одной процедуры не вариант (

Надо получить список имен процессов именно в той самой последовательности что и в диспетчере задач (т.е. с той же сортировкой)


 
Styx   (2014-07-12 20:19) [3]


> Делать всю программу 64-битной только из-за одной процедуры
> не вариант

Делать скриншот и OCR-ить ;-)


 
oldman ©   (2014-07-13 11:12) [4]


> Надо получить список имен процессов именно в той самой последовательности
> что и в диспетчере задач


НА ФИГА?????????????????????



Страницы: 1 вся ветка

Текущий архив: 2016.02.07;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.004 c
2-1405269940
Wadimka
2014-07-13 20:45
2016.02.07
А кто работал с ZELLO API


15-1433274475
Денис Комаров
2015-06-02 22:47
2016.02.07
VBA.Excel, OLE(vbs or other)


15-1432315580
Rouse_
2015-05-22 20:26
2016.02.07
Допустим если бы я захотел поехать отдохнуть в Болгарию :)


1-1336380643
misha_gr
2012-05-07 12:50
2016.02.07
OutputDebugString


15-1432762201
Юрий
2015-05-28 00:30
2016.02.07
С днем рождения ! 28 мая 2015 четверг