FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Terminar proceso sin Ventana
Posts: 485
Joined: Fri Feb 09, 2007 10:34 AM

Terminar proceso sin Ventana

Posted: Fri Jul 04, 2008 02:37 PM

Muy buenas, estoy intentando para la ejecucion de un proceso con la funcion GetModuleHandle pero solo me devuelve el handle de los procesos que tienen window, entonces 驴Hay alguna funcion que me devuelve el handle de un proceso sin window驴d

Un Saludo

Posts: 654
Joined: Mon May 29, 2006 03:14 PM

Terminar proceso sin Ventana

Posted: Fri Jul 04, 2008 08:39 PM
Este codigo te da los procesos con ventana...
local aNombres:={},hWnd:=GETWINDOW(GETDESKTOPWINDOW(),GW_CHILD)
WHILE hWnd != 0 
   cTitle:=alltrim(GETWINDOWTEXT(hWnd))
   if cTitle<>""
      if IsWindowVisible(hWnd) .and. GETWINDOW(hWnd,GW_OWNER)==0 .and. cTitle<>"Program Manager"
        aadd(aNombres,cTitle)
      endif
   endif
   hWnd:=GETWINDOW(hWnd,GW_HWNDNEXT) 
ENDDO


y este todos...
local aNombres:={},hWnd:=GETWINDOW(GETDESKTOPWINDOW(),GW_CHILD)
WHILE hWnd != 0 
   cTitle:=alltrim(GETWINDOWTEXT(hWnd))
   if cTitle<>""
       aadd(aNombres,cTitle)
   endif
   hWnd:=GETWINDOW(hWnd,GW_HWNDNEXT) 
ENDDO


Para que salgan todos solo tienes que quitar el if IsWindowVisible(hWnd) .and. GETWINDOW(hWnd,GW_OWNER)==0
Mi abuelo dec铆a: Los aviones vuelan porque Dios quiere, y los helic贸pteros ni Dios sabe porque vuelan.

FWH 16.02, xHarbour 1.2.3, Harbour 3.2.0, WorkShop 4.5, AJ Make 0.30, Borlan BCC 7.00, VisualStudio 2013
Posts: 485
Joined: Fri Feb 09, 2007 10:34 AM

Re:

Posted: Sat Jul 05, 2008 05:18 PM

Muy buenas, antetodo gracias, ahora como puedo terminar la aplicacion si solo se como se llama el ejecutable y no como se llama la ventana, es decir, como puedo enlazarlos con la funcion TerminateApp, solo necesito el nombre del ejecutable al que est谩 unido este proceso.

Un Saludo.

Posts: 654
Joined: Mon May 29, 2006 03:14 PM

Terminar proceso sin Ventana

Posted: Sun Jul 06, 2008 10:44 AM
La variable hWnd es el handle del proceso... pasaselo a la funci贸n

TerminateApp(hWnd,<nMode>)

<nMode>
UAE_BOX 0 Display the Application Error message box and then ends the task
NO_UAE_BOX 1 Does not display the Application Error message box
Mi abuelo dec铆a: Los aviones vuelan porque Dios quiere, y los helic贸pteros ni Dios sabe porque vuelan.

FWH 16.02, xHarbour 1.2.3, Harbour 3.2.0, WorkShop 4.5, AJ Make 0.30, Borlan BCC 7.00, VisualStudio 2013
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

Terminar proceso sin Ventana

Posted: Sun Jul 06, 2008 12:29 PM

hWnd es el handle de una ventana, no el identificador de un proceso que es lo que requiere TerminateProcess():

BOOL TerminateProcess(
HANDLE hProcess, // handle to the process
UINT uExitCode // exit code for the process
);

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

Terminar proceso sin Ventana

Posted: Sun Jul 06, 2008 12:30 PM

A partir de un handle de ventana puedes obtener el handle de su aplicaci贸n usando:

DWORD GetWindowThreadProcessId(
HWND hWnd, // handle of window
LPDWORD lpdwProcessId // address of variable for process identifier
);

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

Terminar proceso sin Ventana

Posted: Sun Jul 06, 2008 12:33 PM
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 654
Joined: Mon May 29, 2006 03:14 PM

Terminar proceso sin Ventana

Posted: Sun Jul 06, 2008 05:40 PM
Un poco de c贸digo a partir de que ya tengamos el hWnd, podria ser...

Una vez obtenido el hWnd 驴 ser铆a algo asi ?
GetWindowThreadProcessId(hWnd,@hProcess)
TerminateApp(hProcess,0)
Mi abuelo dec铆a: Los aviones vuelan porque Dios quiere, y los helic贸pteros ni Dios sabe porque vuelan.

FWH 16.02, xHarbour 1.2.3, Harbour 3.2.0, WorkShop 4.5, AJ Make 0.30, Borlan BCC 7.00, VisualStudio 2013
Posts: 485
Joined: Fri Feb 09, 2007 10:34 AM

Re

Posted: Sun Jul 06, 2008 06:48 PM

Muy buenas, he probado el c贸digo pero no me cierra el proceso no se si es problema de las funciones que tengo, me podreis poner la funcion GetWindowThreadProcessId y como utilizar TerminateApp.

Por que las que yo tengo no me cierra el proceso.

Un Saludo.

Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

Terminar proceso sin Ventana

Posted: Mon Jul 07, 2008 10:15 AM

Si solo tienes el nombre del ejecutable, entonces la funci贸n GetModuleHandle( cNombreAplicacion ) te devuelve el handle de la aplicaci贸n.

Con ese handle llamas a TerminateProcess( nHandle, 0 ) y as铆 podr铆as terminar la aplicaci贸n.

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 485
Joined: Fri Feb 09, 2007 10:34 AM

Re:

Posted: Mon Jul 07, 2008 10:19 AM

Muy buenas, es ese el problema que ten铆a al principio con GetModuleHandle( cNombreAplicacion ) solo me devuelve le handle de los procesos con ventana pero los procesos sin ventana no me devuelve el handle, entonces pense en recoger el handle de todos los procesos y as铆 tener el handle del proceso, pero con GETWINDOW(hWnd,GW_HWNDNEXT) solo me devuelve el handle pero ese es de la ventana y no del proceso en si, 驴como podr铆a coger el handle del proceso y terminarlo?

Un Saludo.

Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

Terminar proceso sin Ventana

Posted: Mon Jul 07, 2008 10:21 AM

Como se inicia ese proceso ? Lo inicia otra aplicaci贸n ?

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 485
Joined: Fri Feb 09, 2007 10:34 AM

rE:

Posted: Mon Jul 07, 2008 11:05 AM

Si lo inicia otra aplicacion independiente.

Un Saludo.

Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

Terminar proceso sin Ventana

Posted: Mon Jul 07, 2008 12:38 PM

Si la otra aplicaci贸n usa ShellExecute() para ejecutarla, dicha funci贸n devuelve el handle de instancia de la aplicaci贸n ejecutada, que es el que podr谩s usar para terminarla m谩s adelante usando TerminateProcess()

regards, saludos

Antonio Linares
www.fivetechsoft.com

Continue the discussion