FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Saber si una aplicación se está ejecutando
Hola, estoy desarrollando una pequeña aplicación en Delphi y me gustaría que, al iniciar la aplicación, compruebe si ésta ya está siendo ejecutada y si ya está en marcha que muestre un mensaje.
Muchas gracias. |
#2
|
|||
|
|||
Truco 267 de Trucomania, antes, debes de incluir la libreria TLHelp32
Código:
procedure TForm1.Button1Click(Sender: TObject); function IsRunnig (FicheroExe:string):boolean; function SacaExe(MangoW:HWND):string; {Obtiene el EXE de una tarea} {get EXE of a task} var Datos :TProcessEntry32; hID :DWord; Snap : Integer; begin GetWindowThreadProcessId(MangoW,@hID); Snap:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); try Datos.dwSize:=SizeOf(Datos); if(Process32First(Snap,Datos))then begin repeat if Datos.th32ProcessID=hID then begin Result:=StrPas(Datos.szExeFile); Break; end; until not(Process32Next(Snap,Datos)); end; finally Windows.CloseHandle(Snap); end; end; function ObtieneVentanas(Mango: HWND; ACerrar: Pointer): Boolean; stdcall; begin Result := True; {Mango es el handle de la tarea encontrada} {Si es el .EXE buscado, lo cierra} if SacaExe(Mango)=UpperCase( String(ACerrar^) )then begin String(Acerrar^):='Encontrado'; end; end; begin EnumWindows( @ObtieneVentanas, Integer(@FicheroExe) ); Result:=(FicheroExe='Encontrado'); end; begin if IsRunnig('C:\WINDOWS\NOTEPAD.EXE') then ShowMessage ('Ejecutandose/Running') else ShowMessage ('No Ejecutandose/Do not running'); end; |
#3
|
|||
|
|||
Hola, simplemente tienes que poner el siguiente código en el fichero dpr, justo antes del Application.Initialize :
Const NombreMutex='Un Nombre Cualquiera'; Var MiMutex:THandle; Imagen,ImagenSel : TBitmap; begin Mimutex:=CreateMutex(Nil,True,NombreMutex); If MiMutex=0 Then Begin Showmessage('Error creando Mutex'); Halt; End; If GetLastError=ERROR_ALREADY_EXISTS Then Begin ShowMessage('El programa YA está funcionando.'); Halt; End; Saludos. Carlos |
#4
|
|||
|
|||
Muchas gracias a todos
|
#5
|
||||
|
||||
Si además quieres que la instancia ya existente de tu aplicación se active en lugar de sólo mandar un mensaje al usuario, te ofrezco la unidad uiapp.pas en mi página. Con esta unidad tú no tienes que programar nada, únicamente incluirla en la cláusula uses de tu archivo dpr.
// Saludos |
#6
|
|||
|
|||
Cita:
|
#7
|
||||
|
||||
Esa Unidad de Roman es de lo mejor. Es mas te agradezco mucho, en la aplicacion de mi tesis de grado quedaste presente con esa unit.
__________________
Optimus Prime |
#8
|
|||
|
|||
Cita:
Una duda que me queda es saber para que sirve Imagen,ImagenSel : TBitmap; Saludos, Miguel Angel |
#9
|
||||
|
||||
hola.
Me marca error al tratar de entrar al Link del UIApp gracias de antemano Cita:
__________________
Gracias de antemano Saludos ........ --------------------------------- Ramiro Flores |
#10
|
|||
|
|||
Saber si una aplicación se está ejecutando
Buenos dias,
Soy nueva en el foro, pero llevo tiempo consultándolo. He probado la solución que dais y me funciona perfectamente, pero mi problema es que yo tengo que ver si se está ejecutando, si es así, matar ese proceso y ejecutar el actual. Para matar el proceso uso la llamada a un bat y lo mata, pero supongo que mata todos los procesos con el mismo nombre, porque ya no continua con el Application.Initialize. Os pongo el código que tengo para ver si me podeis ayudar. Const NombreMutex='Mabisy'; Var MiMutex:THandle; begin Mimutex:=CreateMutex(Nil,True,NombreMutex); If MiMutex=0 Then Begin Showmessage('Error creando Mutex'); Halt; End; If GetLastError=ERROR_ALREADY_EXISTS Then Begin ShowMessage('El programa YA está funcionando.'); ShellExecute(0,nil,PChar('C:\delphi\Matarproceso.bat'),'','',SW_HIDE); End; Application.Initialize; Application.CreateForm(TdmMBYControl, dmMBYControl); El código del bat es simplemente : taskkill /Im Proceso.exe Gracias |
#11
|
||||
|
||||
Bienvenida a clubdelphi, como siempre aconsejamos a los nuevos, no olvides leer nuestra guía de estilo, gracias por tu colaboración
Recuerda poner los tags al código fuente, ejemplo: Gracias Deberías haber creado un nuevo hilo ya que no vas a aportar nada a la solución de este, que es de hace 14 años. Saludos. |
#12
|
|||
|
|||
Saber si una aplicación se está ejecutando
Gracias Casimiro.
Pero no veo como crear un nuevo hilo. ¿Me lo podrias explicar? |
#13
|
||||
|
||||
Seleccionas el foro adecuado, o "Varios" si no sabes dónde ponerlo, le das al botón "Nuevo hilo" que está arriba/izquierda, pones un título lo más descriptivo posible... y escribes el mensaje.
Saludos. |
#14
|
|||
|
|||
Ya no está disponible???
|
#15
|
||||
|
||||
Aquí tienes el código:
|
|
|
|