Cita:
Empezado por _cero_
...Aunque creo que cambiando el id del proceso puedo mantener la clase abierta ya que no abría nada que le vinculara con la aplicación original...
|
Cita:
Empezado por _cero_
...Si alguien sabe cambiar id de procesos me dicen por favor.
|
Considero totalmente inutil tu intento de cambiar el PID de un proceso, el premio adjunto de dicha asaña muy probablemente sea un BSOD
Creo que es claro que deseas usar un formulario (o parte) de un programa ajeno en el tuyo; para ello se inventaron los objetos OLE-COM, y si la aplicacion de la cual pretendes posecionar "algo" no tiene dicha funcionalidad, lo más probable es que consigas "regaños" del autor
Aunque le falta madurar, te dejo una idea de la linea "no finalizar aplicacion" (aunque te aconsejo
buscar otras), pero esta mas relacionada a tu caso. Para concluirla te aconseo analizar la API TerminateProcess y sus efectos.
Código Delphi
[-]var si: TStartupInfo = (cb: SizeOf(si));
procedure TForm1.Button1Click(Sender: TObject);
var
pi: TProcessInformation;
de: TDebugEvent;
begin
if CreateProcess(nil, 'c:\windows\notepad.exe', nil, nil, False, DEBUG_ONLY_THIS_PROCESS, nil, nil, si, pi) then
while WaitForDebugEvent(de, INFINITE) do
if (de.dwDebugEventCode <> EXIT_PROCESS_DEBUG_EVENT) then
ContinueDebugEvent(de.dwProcessId, de.dwThreadId, DBG_CONTINUE);
end;
Código:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
STARTUPINFOA si = {sizeof si};
PROCESS_INFORMATION pi;
DEBUG_EVENT de;
if (CreateProcess(NULL, "c:/windows/notepad.exe", NULL, NULL, false, DEBUG_ONLY_THIS_PROCESS, NULL, NULL, &si, &pi))
while (WaitForDebugEvent(&de, INFINITE))
if (de.dwDebugEventCode != EXIT_PROCESS_DEBUG_EVENT)
ContinueDebugEvent(de.dwProcessId, de.dwThreadId, DBG_CONTINUE);
}
PD; talvez si nos presentas el escenario real y completo podamos darte mejores alternativas.
Saludos