Ну так я был там. В том и проблема, что HWND__ там нет. О нем вообще описание от майкрософта "сами напрямую использовать не можете" и на этом все. GetProcessHandleFromHwnd требует его. По крайней мере луа орет на него. Попытки объявить эту структуру ни к чему не привели. В доках требуется HWND, а не HWND__.
Код
ffi.cdef([[
typedef void * PVOID;
typedef PVOID HANDLE;
typedef HANDLE HWND;
typedef unsigned long DWORD;
HANDLE GetProcessHandleFromHwnd(HWND hwnd);
DWORD GetProcessId(HANDLE Process);
]])
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('HWND[1]')
local puint = ffi.new('unsigned int[1]')
puint[1] = workwindow()
hwnd = ffi.cast("HWND", puint)
log(tostring(hwnd))
PID[1] = ole.GetProcessHandleFromHwnd(hwnd[1])
в таком варианте орет cannot convert 'void *' to 'unsigned int' при попытке дернуть хэндл процесса (я в курсе, что там не pid).