Я ассемблер почти не знаю, но нашел в сети код простейшего трейнера, думаю это гораздо эффективнее чем писать такое же на delphi , но у меня этот код выдает ошибку в 5 строке и не находит окно программы, wHANDLE всегда = 0, Помогите пожалуйста , думаю это не сложно. Код (Text): format PE GUI 4.0 at 7000000h include 'WIN32AX.inc' .data CLASSNAME DB 'xxx',00h Bytes DD 50 00 00 ; oshibka "extra characters in line" wHANDLE DD ? pHANDLE DD ? pID DD ? LENS DD ? .code start: invoke FindWindow,addr CLASSNAME,addr CLASSNAME push eax pop [wHANDLE] .if [wHANDLE] = 0 invoke MessageBox,HWND_DESKTOP,'okno ne naideno',0,MB_ICONERROR .else invoke GetWindowThreadProcessId,[wHANDLE],addr pID invoke OpenProcess,PROCESS_ALL_ACCESS,TRUE,[pID] push eax pop [pHANDLE] invoke WriteProcessMemory,[pHANDLE],0047829Ch,addr Bytes,3,[LENS] invoke CloseHandle,pHANDLE .endif invoke ExitProcess,0 .end start
invoke MessageBox,HWND_DESKTOP,'okno ne naideno',0,MB_ICONERROR ассемллер без макросов нак не умеет .data error1 db "okno ne naideno",0 ... invoke MessageBox,0,offset error1 ,0,MB_ICONERROR wHANDLE всегда = 0 дак нет неаверно окна с именем класса и окна 'xxx'
JCronuz, спасибо. FLASH300 invoke MessageBox,HWND_DESKTOP,'okno ne naideno',0,MB_ICONERROR или с error1 db "okno ne naideno",0 ... invoke MessageBox,0,offset error1 ,0,MB_ICONERROR Одно и тоже получается, при запуске программы появляется это окно. пробовал разные программы запускать и писать названия их окон вместо xxx =), потом запускать этот трейнер. При любом названии окна пишет, что оно не найдено
т.е. использовать класс и заголовок не правильно ---> ваш код Код (Text): invoke FindWindow,addr CLASSNAME,addr CLASSNAME
FLASH300 invoke FindWindow, addr ClassName,0 так тоже пробовал. JCronuz Название игры?, я пробовал этот код на разных играх все они win32 полноэкранные. Мне бы хотелось получить доступ к процессу по названию окна. Код (Text): ... .data ClassName DB 'GTA: San Andreas',00h ; например ГТА error1 db 'okno ne naideno',0 wHANDLE DD ? pHANDLE DD ? pID DD ? LENS DD ? .code start: invoke FindWindow, addr ClassName, 0 push eax pop [wHANDLE] .if [wHANDLE] = 0 invoke MessageBox,0,error1,0,MB_ICONERROR .else invoke GetWindowThreadProcessId,[wHANDLE],addr pID invoke OpenProcess,PROCESS_ALL_ACCESS,TRUE,[pID] push eax pop [pHANDLE] invoke CloseHandle,pHANDLE .endif invoke ExitProcess,0 .end start Пишет окно не найдено, хотя подобная программа на дельфи окно находит. Может быть есть какие то тонкости?, просто я ассемблер еще пока плохо знаю =(
Тогда передавайте ваше название вторым параметром в функцию FindWindow! Естественно, что окно не найдено, его просто нет с таким классом. Если у вас такие проблемы с окнами, создавайте процесс через CreateProcess по имени екзешника, получайте ID а потом работайте с ним.
сделайте вариант с ToolHelp32 Код (Text): CreateToolHelp32SnapShot(...) { Process32First(...) { } Process32Next(...) { } } CloseHandle(...)
valterg, это абсолютно разные вещи! Код (Text): invoke FindWindow,addr CLASSNAME,addr WINDOWNAME Вот правильный прототип. Подробнее, как всегда, MSDN : http://msdn.microsoft.com/en-us/library/ms633499(VS.85).aspx