Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2016.02.07;
Скачать: [xml.tar.bz2];

Вниз

Проблема чтения списка из чужого окна в 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.001 c
2-1405088997
Кирилов М.Л.
2014-07-11 18:29
2016.02.07
Firebird 2.5, выборка с группировкой данных


2-1405269940
Wadimka
2014-07-13 20:45
2016.02.07
А кто работал с ZELLO API


15-1432481592
Pavelnk
2015-05-24 18:33
2016.02.07
Что такое пиксель у камеры, просветите меня.


15-1433367004
Юрий
2015-06-04 00:30
2016.02.07
С днем рождения ! 4 июня 2015 четверг


15-1432651400
stas
2015-05-26 17:43
2016.02.07
Что означает выражение на C++





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский