Inyectar dll para manejar subprocesos múltiples
externo 'sos.dll';
procedimiento InjectFunc(InHWND: HWND; Func: Puntero; Param: Pointer. ParamSize: DWORD
var
hProcess_N: THandle
ThreadAdd, ParamAdd: puntero
hThread:
HThread: THandle;
ThreadID: DWORD.
DWORD;
lpNumberOfBytes: DWORD;
comenzar
GetWindowThreadProcessId(InHWND, @ThreadID);
hProcess_N := OpenProcess( PROCESS_ALL_ACCESS, Falso, ThreadID);
WriteProcessMemory(hProcess_N, ThreadAdd, Func, 4096, lpNumberOfBytes);
ParamAdd:= VirtualAllocEx(hProcess_N, nil, ParamSize, MEM_COMMIT, PAGE_READWRITE ); p>
p>
WriteProcessMemory(hProcess_N, ParamAdd, Param, ParamSize, lpNumberOfBytes);
hThread:= CreateRemoteThread(hProcess_N, nil, 0, ThreadAdd, ParamAdd, 0, lpNumberOfBytes);
ResumeThread( hThread);
WaitForSingleObject(hThread, INFINITE);
VirtualFreeEx(hProcess_N, ThreadAdd, 4096, MEM_RELEASE); >VirtualFreeEx(hProcess_N, ParamAdd, ParamSize, MEM_RELEASE);
CloseHandle(hThread);
CloseHandle(hProcess_N); p> inyectado arriba Función
procedimiento TForm1.Button2Click(Sender: TObject);
var
inhwnd: Hwnd
ThreadID: DWORD;
p>
hProcess_ N:
inhwnd:= FindWindow(nil, 'sombra');
GetWindowThreadProcessId(InHWND, @ThreadID)
hProcess_N :.= OpenProcess(PROCESS_ALL_ACCESS, False, ThreadID);
injectfunc(InHWND, @show, nil, 0); /p>
Esta es la función de llamada, eche un vistazo. injectfunc(InHWND, @show, nil, 0);
end;
Esta es la función de llamada, eche un vistazo a esta oración. No entiendo muy bien qué significan el tercer y cuarto parámetro. Debido a que yo mismo escribí un EXE para adivinar la ciudad y la función de inyección no necesita pasar parámetros, este es el mejor ejemplo.
En el paquete que genera el exe, el generador de archivos ejecutables nativo, en el tercer paso, seleccione la base de datos e incluya las clases requeridas y los recursos conocidos en la selección. Apunte manualmente a su clase principal en las opciones siguientes. Probar.
Resulta que también encontré este problema. Después de seguir la configuración anterior, todo funcionó bien.
¡Espero que te ayude!