Ir al contenido


Foto

[MULTILENGUAJE] Saber si una aplicación 16 bits se está ejecutando


  • Por favor identifícate para responder
4 respuestas en este tema

#1 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 09 junio 2010 - 02:25

Las aplicaciones 16bits se ejecutan en una máquina virtual en el entorno NT. Por este motivo no se pueden enumerar con las utilidades tlhelp32.

Para enumerarlas tendremos que recorrer las máquinas virtuales que se estén ejecutando y sobre cada una de ellas enumerar las aplicaciones 16 bits que se ejecutan.

Pongo un ejemplo para saber si una aplicación de este tipo está ejecutándose:



cpp
  1. #include <vdmdbg.h>
  2.  
  3. bool IsRunning16_(char* Name)
  4. {
  5.   struct TRuningProcess16{
  6.     char* Name;
  7.     bool Running;
  8.  
  9.  
  10.     static BOOL WINAPI
  11.     ProcessTasks(DWORD dwThreadId, WORD hMod16, WORD hTask16, PSZ pszModName, PSZ pszFileName, LPARAM PE)
  12.     {
  13.       if(strstr(strupr(pszFileName), strupr(((TRuningProcess16*)PE)->Name)))
  14.           return ((TRuningProcess16*)PE)->Running = true;
  15.       return false;
  16.     }
  17.     static BOOL WINAPI
  18.     ProcessVDMs(DWORD dwProcessId, DWORD dwAttrib, LPARAM PE)
  19.     {
  20.       VDMEnumTaskWOWEx(dwProcessId, (TASKENUMPROCEX)ProcessTasks, PE);
  21.       return ((TRuningProcess16*)PE)->Running;
  22.     }
  23.  
  24.   } PE = {Name,0};
  25.  
  26.   VDMEnumProcessWOW((PROCESSENUMPROC)PE.ProcessVDMs, (LPARAM)&PE);
  27.   return PE.Running;
  28. }



Espero que sea de utilidad.

Saludos.
  • 0

#2 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 09 junio 2010 - 02:33

Que casualidad, ayer mismo necesitaba una funcion como esa, pero como andaba con prisa al final busque la aplicacion por el titulo de su vetana.
  • 0

#3 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 09 junio 2010 - 02:47

Que casualidad, ayer mismo necesitaba una funcion como esa, pero como andaba con prisa al final busque la aplicacion por el titulo de su vetana.


Bueno, es una forma sencilla y rápida de implementar y muy eficaz... siempre que la aplicación tenga ventana  *-)

De esta forma te aseguras de que la encuentras, tenga o no ventanas  :)

Saludos.
  • 0

#4 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 09 junio 2010 - 04:32

Por si resulta de interés la traduzco a delphi:



delphi
  1. uses StrUtils;
  2.  
  3. function VDMEnumTaskWOWEx(dwProcessId: DWORD; fp: pointer; lparam: integer): integer; stdcall; external 'VdmDbg.dll' name 'VDMEnumTaskWOWEx';
  4. function VDMEnumProcessWOW(fp: pointer; lparam: integer): integer; stdcall; external 'VdmDbg.dll' name 'VDMEnumProcessWOW';
  5.  
  6. type
  7. TRuningProcess16 = record
  8.   Name: Pchar;
  9.   Running: boolean;
  10. end;
  11. PTRuningProcess16 = ^TRuningProcess16;
  12.  
  13. // Enumera procesos
  14. function ProcessTasks(dwThreadId: DWORD; hMod16, hTask16: WORD; pszModName, pszFileName: PCHAR; PE: integer): boolean; stdcall;
  15. begin
  16.   if AnsiContainsText(pszFileName, PTRuningProcess16(PE).Name) then
  17.   begin
  18.       PTRuningProcess16(PE).Running:= true;
  19.       Result:= true;
  20.       exit;
  21.   end;
  22.   Result:= false;
  23. end;
  24.  
  25. // Enumera Máquinas Virtuales
  26. function ProcessVDMs(dwProcessId, dwAttrib: DWORD; PE: integer): boolean; stdcall;
  27. begin
  28.   VDMEnumTaskWOWEx(dwProcessId, @ProcessTasks, PE);
  29.   Result:= PTRuningProcess16(PE).Running;
  30. end;
  31.  
  32. function IsRunning16_(Name: string): boolean;
  33. var
  34.   PE: TRuningProcess16;
  35. begin
  36.   PE.Name:= PCHAR(Name);
  37.   PE.Running:= false;
  38.  
  39.   VDMEnumProcessWOW(@ProcessVDMs, integer(@PE));
  40.   Result:= PE.Running;
  41. end;




Saludos.
  • 0

#5 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.446 mensajes
  • LocationMéxico

Escrito 09 junio 2010 - 07:33

Muy bueno, si encuentra las app de 16 bits, ahora entiendo lo de WowExec.exe (y)

Gracias amigo escafandra, siempre aportando código excelente (b)

Salud OS
  • 0




IP.Board spam blocked by CleanTalk.