Код
ffi.cdef([[
typedef void * PVOID;
typedef PVOID HANDLE;
typedef HANDLE HWND;
typedef unsigned long DWORD;
typedef DWORD * LPDWORD;
HANDLE GetProcessHandleFromHwnd(HWND hwnd);
DWORD GetProcessId(HANDLE Process);
int OpenProcess(int dwDesiredAccess, bool bInheritHandle, int dwProcessId);
int GetWindowThreadProcessId(int hWnd, int *lpdwProcessId);
bool CloseHandle(int hObject);
bool ReadProcessMemory(int hProcess, int lpBaseAddress, void *lpBuffer, int nSize, int *lpNumberOfBytesRead);
int GetModuleHandleA(const char *lpModuleName);
]])
local ole = ffi.load('Oleacc.dll')
local user, kernel = ffi.load('User32'), ffi.load('Kernel32')
local PROCESS_VM_READ = 0x0010
function readDword(address)
if workwindow() == 0 then log('No Workwindow') return -1 end
local PID, pointer_int, hwnd = ffi.new('unsigned long[1]'), ffi.new('int[1]'), ffi.new('unsigned int[1]')
local puint = ffi.new('unsigned int[1]')
puint[0] = workwindow()
hwnd = ffi.cast("HWND", puint)
-- log(tostring(hwnd))
local pvoid = ole.GetProcessHandleFromHwnd(hwnd)
log(tostring(pvoid))
local r = ffi.cast("unsigned int * ", pvoid)
log(tostring(r))
log(tostring(r[0]))
log(tonumber(r[0]))
log"wtf"
Возваращет указатель на NULL, при чтении r[0] естественно краш(только скрипта).
Ну не сишник я. Не судите строго. У меня и си давняя история, но не очень счастливая. Как бы я ни уважал его - душа не лежит(