Форум: "Начинающим";
Текущий архив: 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