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