Hola. Uso la siguiente función para detectar si un programa está ejectuándose en Windows. Recibe como parámetro el nombre del programa (.exe) y devuelve "true" si lo encuentra.
Código Delphi
[-]function Ejecutandose(FileName:String):boolean;
var
ContinueLoop:BOOLean;
FSnapshotHandle:THandle;
FProcessEntry32:TProcessEntry32;
flag:boolean;
begin
flag:=false;
FSnapshotHandle:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
FProcessEntry32.dwSize:=Sizeof(FProcessEntry32);
ContinueLoop:=Process32First(FSnapshotHandle,FProcessEntry32);
while integer(ContinueLoop)<>0 do
begin
if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile))=UpperCase(FileName))
or (UpperCase(FProcessEntry32.szExeFile)=UpperCase(FileName))) then
begin
Flag:=true;
break;
end
else ContinueLoop:=Process32Next(FSnapshotHandle,FProcessEntry32);
end;
CloseHandle(FSnapshotHandle);
Result:=flag;
end;
Esto funciona bien, pero me surge el problema cuando el programa se ejecuta en una sesión de terminal server, ya que varios usuarios pueden estar usando el mismo programa y esta función detecta la ejecución del programa en todas las sesiones. Lo que necesito es que se limite sólo a mi sesión actual. ¿Hay alguna forma de hacerlo?
Gracias.
Un saludo
PD: no puse bien el título del post y luego no me deja cambiarlo. Sería "Detectar ejecución de aplicación en Terminal Server".