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

Вниз

Проблема с ReadProcessMemory   Найти похожие ветки 

 
Хинт ©   (2005-09-07 14:37) [0]

Почему не работает данный код? Вроде все правильно, но код работает правильно один раз из трех. То есть запускаю программу - значение считывается верно, перезапускаю - результат уже другой и так постоянно... То что значение в самой программе не меняется - 100% (смотрю WinHEX"ом).

procedure CheckOnline;
var
ProcHandle:integer;
wnd:THandle;
ProcessId:integer;
pokevalue:byte;
NumberOfBytes:byte;
rw:cardinal;
const
addr=$00C4B088;

begin
wnd:=FindWindow(nil,PChar(WindowTitle));
GetWindowThreadProcessId(Wnd, @ProcessId);
ProcHandle:=OpenProcess(PROCESS_ALL_ACCESS,false,ProcessId);
pokevalue:=0;
NumberOfBytes:=1;
ReadProcessMemory(ProcHandle,ptr(addr),@pokevalue,NumberOfBytes,rw);
if pokevalue=1 then Online:="OffLine" else Online:="OnLine";
Closehandle(ProcHandle);
end;


 
Digitman ©   (2005-09-07 14:48) [1]


> смотрю WinHEX"ом


где смотришь-то ? в файле ? или в АП запущенного из файла процесса ?


 
kami ©   (2005-09-07 14:51) [2]

Что возвращается в rw ?
Что возвращает ReadProcessMemory при повторных вызовах?


 
Хинт ©   (2005-09-07 15:03) [3]

2Digitman
Ну конечно же не в файле. В RAM.

2kami
При повторных вызовах в pokevalue заносится одно и тоже значение, но если перезапустить программу (в ней только эта процедура, так что ощибка именно в ней), то это значение уже может быть другим (при том что на самом деле оно постоянно)


 
kami ©   (2005-09-07 15:17) [4]

Хинт ©   (07.09.05 15:03) [3]
Я спрашивал про результат функции ReadProcessMemory:
If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero. To get extended error information, call GetLastError.
The function fails if the requested read operation crosses into an area of the process that is inaccessible.

А так же значение переменной rw при повторных вызовах, в которую должно возвращаться количество реально считанных байт


 
kami ©   (2005-09-07 15:19) [5]

kami ©   (07.09.05 15:17) [4]
> rw при повторных вызовах

С учетом Хинт ©   (07.09.05 15:03) [3]

rw при повторных запусках


 
Digitman ©   (2005-09-07 15:21) [6]

с чего ты вообще взял, что по именно адресу $00C4B088 в ВАП процесса всегда должно находиться то что тебя интересует ?


 
Хинт ©   (2005-09-07 15:26) [7]

Потому что узнал и много раз проверил. Я уверен в том, что ReadProcessMemory записывает в pokevalue не $00C4B088, так как слежу за значением по этому адресу из других программ. НО иногда (в течение одного сеанса работы программы), все работает как надо (изменяю значение WinHEX"ом, считываю программой и значения совпадают).


 
Ботвин Дмитрий   (2005-09-07 15:31) [8]

А что записывает данные по адресу $00C4B088? Если туда ни что не пишет специально, то при создании АП процесса в момент его создания, по этому адресу может находиться что угодно...


 
Digitman ©   (2005-09-07 15:42) [9]


> Потому что узнал


вот я и спрашиваю - ОТКУДА узнал ?


 
alpet ©   (2005-09-07 15:53) [10]

"в течение одного сеанса работы программы"

В течении одного сеанса работы программы, обычно валидны (верны) значения PID и hProcess (что получается через OpenProcess). Если программа перезапускается их нужно получать заново.


 
alpet ©   (2005-09-07 15:56) [11]

Вобщем у тебя после перезапуска программы весь код функции CheckOnline должен быть выполнен заново - найдено окно программы, открыт описатель процесса. Тогда все должно читаться правильно.
P.S. Подход у тебя весьма своеобразный к получению необходимых данных.



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

Форум: "WinAPI";
Текущий архив: 2005.11.13;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.035 c
2-1129563459
Rasher
2005-10-17 19:37
2005.11.13
Вопрос о всплывающих окнах


14-1129974768
pazitron_brain
2005-10-22 13:52
2005.11.13
Снова про окна.


2-1129877717
TruthMan
2005-10-21 10:55
2005.11.13
Количество пикселей на микрон


8-1119530862
Ш-К
2005-06-23 16:47
2005.11.13
Как сделать изображение бледнее?


1-1129878710
zorik
2005-10-21 11:11
2005.11.13
Как реализовать обычное математическое округление





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский