Форум программистов, компьютерный форум, киберфорум
Delphi
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.85/26: Рейтинг темы: голосов - 26, средняя оценка - 4.85
3 / 3 / 0
Регистрация: 23.01.2012
Сообщений: 22

Работа с процессом

24.01.2012, 00:19. Показов 4901. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пишу программу которая вытаскивает координаты из запущенного приложения, но столкнулся с проблемой она нечего не выводит


Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
procedure TForm1.Button1Click(Sender: TObject);
var  g,j, dwprocessid: integer;
     op: THandle;
     Data: PWideChar;
     BytesRead, b: DWORD;
     a: string;
    x, y, z: string;
             //float x;
             //float y;
             //float z;
begin
    j:=FindWindow(nil, PChar(process.Text));
    g:=GetWindowThreadProcessId(j, @dwprocessid);
        op:= OpenProcess(PROCESS_ALL_ACCESS, FALSE, g);
          //a:= '0x00925484';
          a:=ver.Caption;
          BytesRead:= 0;
 
        { C++
             ReadProcessMemory(qhnd,(LPVOID)a,&b,4,0); // Считываем указатель
             ReadProcessMemory(qhnd,(LPVOID)(b + 0x20),&a,4,0); // Прибавляем 32 к полученному указателю и снова считываем указатель
             ReadProcessMemory(qhnd,(LPVOID)(a + 0x5FC),&x,4,0); // Считываем X координату
             ReadProcessMemory(qhnd,(LPVOID)(a + 0x600),&y,4,0); // Считываем Y координату
             ReadProcessMemory(qhnd,(LPVOID)(a + 0x604),&z,4,0); // Считываем Z координату
 
        }
           //ReadProcessMemory(OpenProcess, Ptr(Address), @NewValue, Data, CardRead);
             ReadProcessMemory(op, Pointer(a) , @data, 4, BytesRead); // Считываем указатель
             ReadProcessMemory(op, Pointer(data + '0x20'), @a, 4, BytesRead); // Прибавляем 32 к полученному указателю и снова считываем указатель
             ReadProcessMemory(op, Pointer(a + '0x5FC'), @x, 4, BytesRead); // Считываем X координату
             ReadProcessMemory(op, Pointer(a + '0x600'), @y, 4, BytesRead); // Считываем Y координату
             ReadProcessMemory(op, Pointer(a + '0x604'), @z, 4, BytesRead); // Считываем Z координату
             px.Text:= string(x);
             py.Text:= string(y);
             pz.Text:= string(z);
end;
Собственно при нажатии на Button программа ищет запущенное окно, узнает ид процесса и открывает процесс чтоб получить от туда информацию, Есть пример из С++ но я не могу его реализовать в Delphi...

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
HANDLE qhnd;
    HWND qwnd;
    DWORD qid;
 
    AnsiString Temp = "fist"; // Имя окна клиента
    char *CN = Temp.c_str();
 
    if(qwnd = FindWindow(NULL, CN)) // Ищем это окно
    {
        GetWindowThreadProcessId(qwnd, &qid); // Получаем ID процесса
 
        if(qhnd = OpenProcess(PROCESS_ALL_ACCESS,0,qid)) // Открываем процесс со всеми правами
        {
             DWORD a;
             DWORD b;
             float x;
             float y;
             float z;
 
             a = 0x00925484; // Генеральный оффсет клиента
 
             ReadProcessMemory(qhnd,(LPVOID)a,&b,4,0); // Считываем указатель
             ReadProcessMemory(qhnd,(LPVOID)(b + 0x20),&a,4,0); // Прибавляем 32 к полученному указателю и снова считываем указатель
 
             ReadProcessMemory(qhnd,(LPVOID)(a + 0x5FC),&x,4,0); // Считываем X координату
             ReadProcessMemory(qhnd,(LPVOID)(a + 0x600),&y,4,0); // Считываем Y координату
             ReadProcessMemory(qhnd,(LPVOID)(a + 0x604),&z,4,0); // Считываем Z координату
 
 
             Form1->PX->Text = x;
             Form1->PY->Text = y;
             Form1->PZ->Text = z;
 
 
             CloseHandle(qhnd); // Закрываем процесс
        }
        else
        {
            ShowMessage("Не удается открыть процесс.");
        }
    }
    else
    {
        ShowMessage("Клиент не найден.");
    }
Прошу мощи ибо я новичок в Delphi
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.01.2012, 00:19
Ответы с готовыми решениями:

Работа с процессом
но можно ли сделать так чтобы закрыть в каком то процессе Threads, Modules, Handles. вот скрин, что нужно закрыть. Но процесс закрывать...

Работа с процессом
Всем доброго времени суток дорогие друзья))) Подскажите мне пожалуйста как реализовать такую тему: Есть допустим код: ...

Работа С Процессом C#
Я пишу программу для выполнение cmd команд через приложение на win forms C#. Мне надо чтобы при загрузке формы создавался процесс cmd, а...

20
 Аватар для БогДелфей
474 / 337 / 36
Регистрация: 31.05.2011
Сообщений: 1,164
24.01.2012, 00:49
Pointer(a + '0x5FC') - эт какаето сомнительная запись, должно быть как то так:
Pointer(a + $5FC)
хотя стринговая переменная "а" - тож сомнительная

Добавлено через 3 минуты
ааа, вотжеж:
DWORD a;
...
a = 0x00925484; // Генеральный оффсет клиента
должно быть на делфе:
Delphi
1
2
3
4
var
  a: DWord;
...
  a := $00925484;
1
3 / 3 / 0
Регистрация: 23.01.2012
Сообщений: 22
24.01.2012, 00:55  [ТС]
Сделал как ты сказал теперь ругается
[DCC Error] Unit1.pas(250): E2010 Incompatible types: 'string' and 'Cardinal'
[DCC Error] Unit1.pas(251): E2010 Incompatible types: 'string' and 'Cardinal'
[DCC Error] Unit1.pas(252): E2010 Incompatible types: 'string' and 'Cardinal'
Delphi
1
2
3
4
 
ReadProcessMemory(op, Pointer(a + '$5FC'), @x, 4, BytesRead);
ReadProcessMemory(op, Pointer(a + '$600'), @y, 4, BytesRead);
ReadProcessMemory(op, Pointer(a + '$604'), @z, 4, BytesRead);
0
 Аватар для БогДелфей
474 / 337 / 36
Регистрация: 31.05.2011
Сообщений: 1,164
24.01.2012, 01:06
ну а какова **** у тебя x, y, z: string; когда в сишном эти переменные float x, y, z;
float у них эт число с запятой, ставь real штоле
0
3 / 3 / 0
Регистрация: 23.01.2012
Сообщений: 22
24.01.2012, 01:15  [ТС]
Delphi
1
x, y, z: real;
[DCC Error] Unit1.pas(254): E2010 Incompatible types: 'string' and 'Real'
[DCC Error] Unit1.pas(255): E2010 Incompatible types: 'string' and 'Real'
[DCC Error] Unit1.pas(256): E2010 Incompatible types: 'string' and 'Real'
Delphi
1
2
3
             px.Text:=x;
             py.Text:=y;
             pz.Text:=z;
0
 Аватар для БогДелфей
474 / 337 / 36
Регистрация: 31.05.2011
Сообщений: 1,164
24.01.2012, 01:20
ну и px.Text:=x; py.Text:=y; pz.Text:=z эт чо эдиты штоле?
и чо ты туда числа суёшь если туда надо строки совать
0
3 / 3 / 0
Регистрация: 23.01.2012
Сообщений: 22
24.01.2012, 01:27  [ТС]
Цитата Сообщение от БогДелфей Посмотреть сообщение
ну и px.Text:=x; py.Text:=y; pz.Text:=z эт чо эдиты штоле?
и чо ты туда числа суёшь если туда надо строки совать
Есть ася или скайп? чтоб быстрей было( а то я чет не разберусь совсем
0
 Аватар для БогДелфей
474 / 337 / 36
Регистрация: 31.05.2011
Сообщений: 1,164
24.01.2012, 01:41
не, не пользуюсь
px.Text:=IntToStr(x);
0
3 / 3 / 0
Регистрация: 23.01.2012
Сообщений: 22
24.01.2012, 01:47  [ТС]
не помогло
[DCC Error] Unit1.pas(255): E2250 There is no overloaded version of 'IntToStr' that can be called with these arguments
0
 Аватар для БогДелфей
474 / 337 / 36
Регистрация: 31.05.2011
Сообщений: 1,164
24.01.2012, 02:00
FloatToStr
0
3 / 3 / 0
Регистрация: 23.01.2012
Сообщений: 22
24.01.2012, 02:08  [ТС]
Цитата Сообщение от БогДелфей Посмотреть сообщение
FloatToStr
Пробовал тоже не фига(
0
 Аватар для БогДелфей
474 / 337 / 36
Регистрация: 31.05.2011
Сообщений: 1,164
24.01.2012, 02:16
ну я хз, пробуй вместо Real другие типы: Extended, Double, Currency
иль ваще dword, я хз в каком виде эти данные в памяти храняца
иль трасером посмари чо за значение у тя в @x, @у, @z
0
3 / 3 / 0
Регистрация: 23.01.2012
Сообщений: 22
24.01.2012, 02:28  [ТС]
сделал заново все
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
procedure TForm1.Button1Click(Sender: TObject);
var
     qhnd: integer;
     qwnd: integer;
     qid, CardRead, a, b :  DWORD;
     x, y ,z: real;
begin
    qwnd:=FindWindow(nil, PChar(process.Text));
    GetWindowThreadProcessId(qwnd, @qid);
     //ver.Caption:= intTostr (g);
        qhnd:= OpenProcess(PROCESS_ALL_ACCESS, FALSE, qid);
          a := $00925484;
          CardRead:= 0;
      //ReadProcessMemory(OpenProcess, Ptr(Address), @NewValue, Data, CardRead);
       ReadProcessMemory(qhnd, Ptr(a),@b, 4, CardRead); // Считываем указатель
       ReadProcessMemory(qhnd, Ptr(b + $20),@a, 4, CardRead); // Прибавляем 32 к полученному указателю и снова считываем указатель
       ReadProcessMemory(qhnd, Ptr(a + $5FC),@x, 4, CardRead); // Считываем X координату
       ReadProcessMemory(qhnd, Ptr(a + $600),@y, 4, CardRead); // Считываем Y координату
       ReadProcessMemory(qhnd, Ptr(a + $604),@z, 4, CardRead); // Считываем Z координату
       px.Text:= floattostr(x);
       py.Text:= floattostr(y);
       pz.Text:= floattostr(z);
Вместо
x = 2421.020
y = -803.766
z = 235.884
он вывел мне
x = 5,72699055005102E-315
y = 5,58893257123211E-315
z = 1,62701481045273E-314

Добавлено через 5 минут
и при каждом нажатии буттон меняются значения
0
 Аватар для БогДелфей
474 / 337 / 36
Регистрация: 31.05.2011
Сообщений: 1,164
24.01.2012, 02:39
ну значит он не те значения читает какие нужно
0
3 / 3 / 0
Регистрация: 23.01.2012
Сообщений: 22
24.01.2012, 02:50  [ТС]
Delphi
1
2
3
        ReadProcessMemory(qhnd, Ptr(a + d),@x, h, CardRead); // Считываем X координату
    ReadProcessMemory(qhnd, Ptr(a + f),@y, h, CardRead); // Считываем Y координату
    ReadProcessMemory(qhnd, Ptr(a + g),@z, h, CardRead); // Считываем Z координату
Ошибка где-то здесь(

Проблема с выводом читает он то что нужно(
Как вывести без конвертирования из real в string?
0
 Аватар для БогДелфей
474 / 337 / 36
Регистрация: 31.05.2011
Сообщений: 1,164
24.01.2012, 03:10
типы меняй x, y ,z: real; на хз какой
0
3 / 3 / 0
Регистрация: 23.01.2012
Сообщений: 22
24.01.2012, 03:19  [ТС]
Вынес список адресов в С++ и Delphi для сравнения
Миниатюры
Работа с процессом  
0
 Аватар для БогДелфей
474 / 337 / 36
Регистрация: 31.05.2011
Сообщений: 1,164
24.01.2012, 03:31
отладчиком пользуйся, он те скажет чо не так
и ты уверен в записи Ptr(a + d)
0
3 / 3 / 0
Регистрация: 23.01.2012
Сообщений: 22
24.01.2012, 03:33  [ТС]
в том то и дело что не уверен(
0
 Аватар для Mawrat
13116 / 5897 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
24.01.2012, 11:52
Код надо вот так подправить:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
procedure TForm1.Button1Click(Sender: TObject);
var
  //Cardinal = DWORD = HWND
  hWin, hProc, h, CardRead, a, b : Cardinal;
  //Тип вещественных чисел с одинарной точностью. В памяти занимает 4 байта.
  x, y, z : Single;
begin
  hWin := FindWindow(nil, PChar(Process.Text));
  GetWindowThreadProcessId(hWin, @hProc);
  h := OpenProcess(PROCESS_ALL_ACCESS, FALSE, hProc);
  a := $00925484;
  //Считываем указатель
  ReadProcessMemory(h, Pointer(a), @b, SizeOf(b), CardRead);
  //Прибавляем 32 к полученному указателю и снова считываем указатель
  ReadProcessMemory(h, Pointer(b + $20), @a, SizeOf(a), CardRead);
  //Считываем X координату
  ReadProcessMemory(h, Pointer(a + $5FC), @x, SizeOf(x), CardRead);
  //Считываем Y координату
  ReadProcessMemory(h, Pointer(a + $600), @y, SizeOf(y), CardRead);
  //Считываем Z координату
  ReadProcessMemory(h, Pointer(a + $604), @z, SizeOf(z), CardRead);
  px.Text := FloatToStr(x);
  py.Text := FloatToStr(y);
  pz.Text := FloatToStr(z);
  //Закрываем процесс.
  CloseHandle(h);
end;
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.01.2012, 11:52
Помогаю со студенческими работами здесь

Работа с процессом
Добрый день, дорогие программисты! Я как начинающий программист начал где-то пол года назад изучать C#, тепрь у меня есть идея, но я не...

Двунаправленная связь через pipe между процессом-родителем и процессом-ребенком
Зачем мы используем в этой программе 2 пайпа? #include <sys/types.h> #include <unistd.h> #include <stdio.h> #include...

Работа с вложенным процессом
Прошу помощи. Как можно реализовать такую задачу? Программа запускает консольное приложение с выводом на экран "HelloWorld" и...

Работа с процессами - узнать количество занимаемой процессом памяти в ОЗУ и определить загрузку процессора
Здравствуйте, уважаемые. Вот незадача у меня случилась - для моей программы необходима подробная информация о процессе: имя...

отобразить процессом
здравствуйте! есть процедура... Form5.ADOTable1.Edit; Form5.ADOTable1.FieldByName('nomer').AsString:=Form5.sDBEdit2.Text; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru