Terminar proceso sin Ventana

Terminar proceso sin Ventana

Postby softruz » Fri Jul 04, 2008 2: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
softruz
 
Posts: 485
Joined: Fri Feb 09, 2007 10:34 am

Postby JmGarcia » Fri Jul 04, 2008 8:39 pm

Este codigo te da los procesos con ventana...
Code: Select all  Expand view  RUN
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...
Code: Select all  Expand view  RUN
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
User avatar
JmGarcia
 
Posts: 654
Joined: Mon May 29, 2006 3:14 pm
Location: Madrid - ESPAÑA

Re:

Postby softruz » Sat Jul 05, 2008 5: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.
softruz
 
Posts: 485
Joined: Fri Feb 09, 2007 10:34 am

Postby JmGarcia » 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
User avatar
JmGarcia
 
Posts: 654
Joined: Mon May 29, 2006 3:14 pm
Location: Madrid - ESPAÑA

Postby Antonio Linares » 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
User avatar
Antonio Linares
Site Admin
 
Posts: 42161
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby Antonio Linares » 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
User avatar
Antonio Linares
Site Admin
 
Posts: 42161
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby Antonio Linares » Sun Jul 06, 2008 12:33 pm

regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42161
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby JmGarcia » Sun Jul 06, 2008 5: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 ?
Code: Select all  Expand view  RUN
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
User avatar
JmGarcia
 
Posts: 654
Joined: Mon May 29, 2006 3:14 pm
Location: Madrid - ESPAÑA

Re

Postby softruz » Sun Jul 06, 2008 6: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.
softruz
 
Posts: 485
Joined: Fri Feb 09, 2007 10:34 am

Postby Antonio Linares » 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
User avatar
Antonio Linares
Site Admin
 
Posts: 42161
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re:

Postby softruz » 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.
softruz
 
Posts: 485
Joined: Fri Feb 09, 2007 10:34 am

Postby Antonio Linares » Mon Jul 07, 2008 10:21 am

Como se inicia ese proceso ? Lo inicia otra aplicación ?
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42161
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

rE:

Postby softruz » Mon Jul 07, 2008 11:05 am

Si lo inicia otra aplicacion independiente.

Un Saludo.
softruz
 
Posts: 485
Joined: Fri Feb 09, 2007 10:34 am

Postby Antonio Linares » 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
User avatar
Antonio Linares
Site Admin
 
Posts: 42161
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 56 guests