Page 1 of 1

Como saber si el programa se esta ejecutando

Posted: Fri Aug 06, 2010 10:07 am
by colthop
Hola a todos:

Estoy incorporando el siguiente codigo para poder comprobar si el programa se esta ejecutando y si se trata de ejecutar de nuevo no hacerlo, pero cuando me da la lista no me incluye el programa pero si abro el Administrador de Tareas si esta. Me podriais ayudar.

Un saludo

Carlos

Code: Select all

#include "FiveWin.ch"

#define GWL_HINSTANCE -6

static aTasks := {}

function Main()

   local aTask

   EnumChildWindows( GetDesktopWindow(), { | hWnd | AddTask( hWnd ) } )

   for each aTask in aTasks
      aTask = aTask[ 1 ] + ", " + aTask[ 2 ]
   next 
      
   MsgList( ASort( aTasks ), "Applications in use" )

return nil

function AddTask( hWnd )

   local cTaskName := GetWindowModuleFileName( hWnd )
   
   if AScan( aTasks, { | aTask | aTask[ 2 ] == cTaskName } ) == 0
      AAdd( aTasks, { GetWindowText( hWnd ), cTaskName } )
   endif
   
return nil     

#pragma BEGINDUMP

#include <windows.h>
#include <psapi.h>
#include <hbapi.h>

HB_FUNC( GETWINDOWMODULEFILENAME )
{
   HWND hWnd = ( HWND ) hb_parnl( 1 );
   UINT processId = 0;
   DWORD dwLength = 1024;
   char buffer[ 1024 ];
   HMODULE hProcess;

   GetWindowThreadProcessId( hWnd, &processId );
   hProcess = OpenProcess( 1040, 0, processId );
   dwLength = GetModuleFileNameEx( hProcess, 0, buffer, dwLength );
   CloseHandle( hProcess );
   
   hb_retclen( buffer, dwLength );
}

#pragma ENDDUMP 
 

Re: Como saber si el programa se esta ejecutando

Posted: Fri Aug 06, 2010 11:06 am
by MGA
if isexerunning( cfilename( hb_argv( 0 ) ) )
msgrun("O sistema já esta sendo executado!!!")
return(.f.)
endif

:D

Re: Como saber si el programa se esta ejecutando

Posted: Fri Aug 06, 2010 2:48 pm
by colthop
Gracias SGS me ha servido mejor y menos lioso que lo anterior.

Por otra parte no se si se puede quitar una ventana que aparece cuando cierro la aplicación diciendo "FyVWin.exe dejo de funcionar" y solo pasa en Vista o 7.

Un saludo

Carlos