Welcome To The Home Of The Visual FoxPro Experts  
home. signup. forum. archives. search. google. articles. downloads. faq. members. weblogs. file info. rss.
 From: Victor Espina
  Where is Victor Espina?
 Rancagua
 Chile
 Victor Espina
 To: Pete Sass
  Where is Pete Sass?
 Marathon, Ontario
 Canada
 Pete Sass
 Tags
Subject: RE: Kill EXE API
Thread ID: 416387 Message ID: 416433 # Views: 54 # Ratings: 1
Version: Visual FoxPro 9 SP2 Category: Win32API programming
Date: Monday, December 29, 2014 3:38:47 PM         
   


Pete, this is a helper library I had used for many years. Unfortunatelly, some of the functions seems to have problems with newer versions of Windows, mainly for security reasons. Anyway, I hope the code helps you in some way. Comments are in spanish, but function names are selfdescriptive (I hope). The enumproc.dll can be downloaded from here: http://cl.ly/420F0m1N3G2P



*------------------------------------------------
* WPLIB.PRG
*
* Funciones wrapper para la libreria
* ENUMPROC.DLL
*
* Autor: Victor Espina (vespinas@cantv.net)
* Fecha: Noviembre 2003
*
* Actualización Febrero 2005:
* - Nuevas funciones:
*   WPGetProcessIDByHWnd()
*   WPGetMainHWnd()
*   WPGetCurrentProcessID()
*   WPKillProcess()
*   WPKillCurrentProcess()
*
* - Se añadieron nuevas declaraciones en WPLoadAPI()
*
*
* Actualización Julio 2005
* - Nuevas funciones:
*   WPCountProcessByApp()
*   WPIsAppRunning()
*
* - Se modificó la funcion WPLoadAPI() para evitar
*   redefinir las funciones API si las mismas ya 
*   habian sido cargadas previamente.
*
*-------------------------------------------------


*-- WPLoadAPI
*   Define las funciones API necesarias
*
PROC WPLoadAPI
 *
 IF TYPE("WPAPIIsLoaded")<>"U"
  RETURN
 ENDIF

 IF .F. 
 DECLARE INTEGER OpenProcList IN enumproc.dll
 DECLARE INTEGER GetFirstProc  IN enumproc.dll ;
         INTEGER hhandle, INTEGER@ lpdwprocid, SHORT@ lpwprocid16, STRING@ lpzprocname
 DECLARE INTEGER GetNextProc  IN enumproc.dll ;
         INTEGER hhandle, INTEGER@ lpdwprocid, SHORT@ lpwprocid16, STRING@ lpzprocname
 DECLARE INTEGER CloseProcList IN enumproc.dll ;
         INTEGER hHandle
 ENDIF        
 DECLARE INTEGER OpenProcess IN kernel32 ;
         INTEGER dwDesiredAccess, INTEGER blnheritHandle, INTEGER dwAppProcessId
 DECLARE INTEGER TerminateProcess IN kernel32 ;
         INTEGER nPID, INTEGER exitcode
 DECLARE INTEGER CloseHandle IN kernel32 ;
         INTEGER hObject
 DECLARE INTEGER GetWindowThreadProcessId IN user32 ;
         INTEGER hWnd, INTEGER@ nProcID
 DECLARE INTEGER GetActiveWindow IN user32         
 
 PUBLIC WPAPIIsLoaded
 WPAPIIsLoaded=.T.
 *
ENDPROC



*-- WPEnumProcs
*   Llena un array pasado por referencia con la lista de procesos activos. La función
*   devuelve el nro. de elementos en el array o -1 se ocurrió algun error. El array
*   es llenado con dos columnas: la primera contiene el ID del proceso y la 2da 
*   el nombre en mayúscula del archivo asociado al proceso.
*
PROC WPEnumProcs(aProcs)
 *
 *-- Se cargan las funciones API necesarias
 *
 WPLoadAPI()
 
 *-- Se preparan las variables necesarias
 *
 local cprocname, nprocid, nprocid16, nhandle, nCount
 cprocname = Replicate(chr(0), 260)
 nprocid = 0
 nprocid16 = 0
 
 *-- Se intenta abrir la lista de procesos
 *
 nHandle = OpenProcList() 
 If nHandle = 0
  return -1
 Endif

 *-- Se obtiene la lista de procesos activos
 *
 If GetFirstProc(nHandle, @nprocid, @nprocid16, @cprocname) != 0
  dimen aProcs[1,2]
  aProcs[1,1]=iif(nProcID<>0,nProcID,nProcID16)
  aProcs[1,2]=upper(left(cprocname, at(chr(0), cprocname)-1))
  nCount=1
  Do while GetNextProc(nHandle, @nprocid, @nprocid16, @cprocname) != 0
   nCount=nCount + 1
   dimen aProcs[nCount,2]
   aProcs[nCount,1]=iif(nProcID<>0,nProcID,nProcID16)
   aProcs[nCount,2]=upper(left(cprocname, at(chr(0), cprocname)-1))
  EndDo
 Else
  return -1
 Endif


 *-- Se cierra la lista de procesos
 *
 CloseProcList(nHandle)


 *-- Se devuelve la cantidad de procesos en el array
 * 
 return nCount
 *
ENDPROC



*-- WPGetProcessID
*   Devuelve el nro. de ID de proceso para un programa dado, o -1 si ocurre algun error o 
*   no se encontró el programa indicado.
*
PROC WPGetProcessID(pcProcName)
 *
 *-- Se cargan las funciones API necesarias
 *
 WPLoadAPI()
 
 *-- Se preparan las variables necesarias
 *
 local cprocname, nprocid, nprocid16, nhandle, lFound
 cprocname = Replicate(chr(0), 260)
 nprocid = 0
 nprocid16 = 0
 
 *-- Se intenta abrir la lista de procesos
 *
 nHandle = OpenProcList() 
 If nHandle = 0
  return -1
 Endif

 *-- Se obtiene la lista de procesos activos
 *
 If GetFirstProc(nHandle, @nprocid, @nprocid16, @cprocname) != 0
  if upper(pcProcName) $ upper(left(cprocname, at(chr(0), cprocname)-1))
   lFound=.T.
  else
   Do while GetNextProc(nHandle, @nprocid, @nprocid16, @cprocname) != 0
    if upper(pcProcName) $ upper(left(cprocname, at(chr(0), cprocname)-1))
     lFound=.T.
     exit
    endif 
   EndDo
  endif
 Else
  return -1
 Endif


 *-- Se cierra la lista de procesos
 *
 CloseProcList(nHandle)


 *-- Se devuelve el ID del proceso
 * 
 if lFound
  return iif(nProcID<>0,nProcID,nProcID16)
 else
  return -1
 endif
 *
ENDPROC


*-- WPGetProcessIDByHWnd
*   Devuelve el ProcessID para una ventana dada.
*
PROC WPGetProcessIDByHWnd(pnHWnd)
 *
 *-- Se cargan las funciones API necesarias
 *
 WPLoadAPI()


 *-- Se obtiene el ProcessID para la ventana indicada 
 LOCAL nProcID
 nProcID=0
 GetWindowThreadProcessId(pnHWnd, @nProcID)

 
 RETURN nProcID
 *
ENDPROC



*-- WPGetMainHWnd
*   Devuelve el hWnd para la ventana principal de la aplicacion actual
*
PROC WPGetMainHWnd
 *
 *-- Se cargan las funciones API necesarias
 *
 WPLoadAPI()


 *-- Se obtiene el hWnd para la ventana principal
 *
 LOCAL nHWnd
 IF "06." $ VERSION()
  nHWnd=GetActiveWindow()
 ELSE
  nHWnd=_SCREEN.hWnd
 ENDIF
 
 RETURN nHWnd
 *
ENDPROC



*-- WPGetCurrentProcessID
*   Devuelve el ProcessID del programa actual
*
PROC WPGetCurrentProcessID
 *
 RETURN WPGetProcessIdByHWnd( WPGetMainHWnd() ) 
 *
ENDPROC



*-- WPKillProcess
*   Termina un proceso mediante su ProcessID
*
PROC WPKillProcess(pnProcID)
 *
 #DEFINE PROCESS_TERMINATE	1
 
 *-- Se cargan las funciones API necesarias
 *
 WPLoadAPI()
 

 *-- Se obtiene un hProcess para el ProcessID indicada
 *
 LOCAL nHProc
 STORE 0 TO nHProc
 nHProc=OpenProcess(PROCESS_TERMINATE, 0, pnProcID)


 *-- Si se obtuvo un hProcess, se termina el proceso
 *
 IF nHProc > 0
  TerminateProcess(nHProc,0)
  CloseHandle(nHProc)
 ENDIF 


 RETURN .F. 
 *
ENDPROC



*-- WPKillCurrentProcess
*   Termina el proceso actual
*
PROC WPKillCurrentProcess
 *
 *-- Se cargan las funciones API necesarias
 *
 WPLoadAPI()


 *-- Se obtiene el hWnd para la ventana principal
 *
 LOCAL nHWnd
 IF "06." $ VERSION()
  nHWnd=GetActiveWindow()
 ELSE
  nHWnd=_SCREEN.hWnd
 ENDIF
 
 
 *-- Se obtiene el ProcessID
 *
 LOCAL nProcID
 nProcID=WPGetProcessIDByHWnd(nHWnd)
 
 
 *-- Se termina el proceso
 *
 RETURN WPKillProcess(nProcID)
 *
ENDPROC


*-- WPCountProcessByApp
*   Devuelve la cantidad de procesos activos existentes
*   para una aplicación dada
*
PROC WPCountProcessByApp(pcAppName)
 *
 *-- Se cargan las funciones API necesarias
 *
 WPLoadAPI()

 *-- Se obtiene una lista de los procesos activos
 *
 LOCAL ARRAY aProcList[1]
 LOCAL nCount
 nCount=WPEnumProcs(@aProcList)
 
 *-- Se cuenta la cantidad de procesos activos existentes
 *   para la aplicación indicada
 *
 LOCAL i,nEnum
 pcAppName=ALLTRIM(UPPER(pcAppName))
 nEnum=0
 FOR i=1 TO nCount
  IF ATC(pcAppName,aProcList[i,2])<>0
   nEnum=nEnum + 1
  ENDIF
 ENDFOR
 
 RETURN nEnum
 *
ENDPROC


*-- WPIsAppRunning
*   Determina si la aplicación indicada
*   ya esta cargada en memoria
*
PROC WPIsAppRunning(pcAppName)
 *
 *-- Se cargan las funciones API necesarias
 *
 WPLoadAPI()
 
 
 *-- Se obtiene el PID del proceso actual
 *
 LOCAL nPID
 nPID=WPGetCurrentProcessID()
 
 
 *-- Se obtiene una lista de los procesos activos
 *
 LOCAL ARRAY aProcList[1]
 LOCAL nCount
 nCount=WPEnumProcs(@aProcList)
 
 
 *-- Se determina si existe un proceso activo para la aplicación
 *   indicada cuyo PID no coincida con el PID actual
 *
 LOCAL i,lFound
 pcAppName=ALLTRIM(UPPER(pcAppName))
 lFound=.F.
 FOR i=1 TO nCount
  IF ATC(pcAppName,aProcList[i,2])<>0 AND aProcList[i,1]<>nPID
   lFound=.T.
   EXIT
  ENDIF
 ENDFOR

 RETURN lFound
 *
ENDPROC 





> Hi,
>
> Looking for api code routines to :
> 1. kill any running exe.
> 2. Enumerate processor id.
>
> Cannot use scripting as client has all scripting disabled on
> all their computers.
>
> I am pretty sure News2News has examples of these both for the
> past 5 days I cannot access this site at all and regardless of
> what computer in my shop I try to access this site with I get . . .
>
> Downloader detected...
> Due to bandwidth limitations for this site, all requests from
> crawlers, downloaders, offline readers and scripts are generally
> rejected.
> News2News advises on this page click here to advise us if you think
> the above is a mistake, but this takes you to a buy now page and nothing
> to do with advising them your IP address is not a crawler, etc.
>
> Never seen this message before, and I seldom if every download
> anything from this site. Was able to access News2News 2 weeks ago
> and copied and pasted 5-6 liner API.
>
> Anyone have API calls for Kill and Processor ID, I would be thankful!
>
> Pete "the IceMan", from the Great White North of Canada.
> www.marathongriffincomputers.com



/* ---------------------------------- *\<br />Victor J Espina S
www.victorespina.com.ve/wiki
"Change is the only constant in the Universe"

ENTIRE THREAD

Kill EXE API Posted by Pete Sass @ 12/29/2014 1:40:46 AM
RE: Kill EXE API Posted by Chuanbing Chen @ 12/29/2014 1:55:13 AM
RE: Kill EXE API Posted by Pete Sass @ 12/29/2014 2:09:06 AM
RE: Kill EXE API Posted by Jun Tangunan @ 12/29/2014 2:21:49 AM
RE: Kill EXE API Posted by Pete Sass @ 12/29/2014 3:11:45 AM
RE: Kill EXE API Posted by Jun Tangunan @ 12/29/2014 7:13:26 AM
RE: Kill EXE API Posted by Mike Gagnon @ 12/29/2014 3:12:39 AM
RE: Kill EXE API Posted by Jun Tangunan @ 12/29/2014 7:16:19 AM
RE: Kill EXE API Posted by Pete Sass @ 12/29/2014 12:07:30 PM
RE: Kill EXE API Posted by Mike Gagnon @ 12/29/2014 12:28:36 PM
RE: Kill EXE API Posted by Pete Sass @ 12/29/2014 1:46:26 PM
RE: Kill EXE API Posted by Greg Green @ 12/29/2014 3:44:35 AM
RE: Kill EXE API Posted by Pete Sass @ 12/29/2014 1:22:22 PM
RE: Kill EXE API Posted by Jun Tangunan @ 12/30/2014 1:30:04 AM
RE: Kill EXE API Posted by Mike Gagnon @ 12/30/2014 5:48:41 PM
RE: Kill EXE API Posted by Pete Sass @ 12/30/2014 6:20:59 PM
RE: Kill EXE API Posted by Victor Espina @ 12/29/2014 3:38:47 PM