Что нового

[Процессы] AutoIt -> PureBasic - помогите перевести несколько строк в PureBasic

Black_Hole

Знающий
Сообщения
126
Репутация
11
Пытаюсь сделать DLL с одной функцией, ниже приведенный код считывает первый символ из калькулятора, адрес считывания (0x0035cfcc) может быть другим, если знаете альтернативный вариант считать из памяти средствами WinAPI в PureBasic, напишите ваш вариант.

Код:
local $a,$MemoryOpen,$MemoryRead
$a = DllStructCreate('byte')
$MemoryOpen = DllCall(DllOpen('kernel32.dll'), 'int', 'OpenProcess', 'int', 0x001F0FFF, 'int', 1, 'int', ProcessExists('calc.exe'))
$MemoryRead = DllCall(DllOpen('kernel32.dll'),'int','ReadProcessMemory','int',$MemoryOpen[0],'int',0x0035cfcc,'int',DllStructGetPtr($a),'int',DllStructGetSize($a),'int',0)

msgbox(0,0,(DllStructGetData($a,1)))
 

sims

Осваивающий
Сообщения
184
Репутация
24
Код:
Procedure ProcessExists(ProcName.s)
  Process.PROCESSENTRY32\dwSize = SizeOf(PROCESSENTRY32) 
  
  ProcName=LCase(ProcName)
  Snapshot = CreateToolhelp32Snapshot_(#TH32CS_SNAPPROCESS, 0)
  If Snapshot 
    ProcessFound = Process32First_(Snapshot, @Process)
    While ProcessFound 
      If LCase(PeekS(@Process\szExeFile)) = ProcName
        PID=Process\th32ProcessID
        Break
      EndIf
      ProcessFound = Process32Next_(Snapshot, @Process)     
    Wend 
  EndIf   
  CloseHandle_(Snapshot) 
  
  ProcedureReturn PID
EndProcedure

a.a=0 ; Однобайтная переменная.
MemoryOpen = OpenProcess_($001F0FFF, 1, ProcessExists("calc.exe"))
MemoryRead = ReadProcessMemory_(MemoryOpen, $0035cfcc, @a, SizeOf(a), 0)
MessageRequester("", Str(a))

Посмотрите так же этот пример. http://purebasic.info/phpBB3ex/viewtopic.php?f=10&t=686
 
Автор
B

Black_Hole

Знающий
Сообщения
126
Репутация
11
sims
спасибо все работает, вашу процедуру заменил на GetProcessPID()

Код:
a.a=0
MemoryOpen = OpenProcess_($001F0FFF, 1, GetProcessPID("calc.exe"))
MemoryRead = ReadProcessMemory_(MemoryOpen, $3f92c0, @a, SizeOf(a), 0)
MessageRequester("", Str(a))
 
Верх