Ir al contenido



Foto

Saber si una aplicación corre como 32 bits en Windows 64


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

#1 escafandra

escafandra

    Advanced Member

  • Moderadores
  • PipPipPip
  • 3.839 mensajes
  • LocationMadrid - España

Escrito 27 diciembre 2016 - 11:38

Para conocer si una app,que se ejecuta es de 32bits en un Windows 64, propongo esta función:

delphi
  1. function IsWow64(PID: DWORD): BOOL;
  2. var
  3. hProc: THANDLE;
  4. begin
  5. Result:= false;
  6. hProc:= OpenProcess(PROCESS_ALL_ACCESS, FALSE, PID);
  7. IsWow64Process(hProc, Result);
  8. CloseHandle(hProc);
  9. end;

La API IsWow64Process se importa así:

delphi
  1. function IsWow64Process(hProc: THANDLE; var bIsWow64: BOOL): BOOL; stdcall; external 'Kernel32.dll';


Saludos.
  • 3

#2 Dante

Dante

    Advanced Member

  • Miembros
  • PipPipPip
  • 88 mensajes

Escrito 27 diciembre 2016 - 12:29

si pero se puede invocar a esa api desde una aplicacon en 32?


  • 0

#3 escafandra

escafandra

    Advanced Member

  • Moderadores
  • PipPipPip
  • 3.839 mensajes
  • LocationMadrid - España

Escrito 27 diciembre 2016 - 12:46

si pero se puede invocar a esa api desde una aplicacon en 32?

 

Si.

 

Saludos.


  • 0

#4 escafandra

escafandra

    Advanced Member

  • Moderadores
  • PipPipPip
  • 3.839 mensajes
  • LocationMadrid - España

Escrito 27 diciembre 2016 - 12:51

Para completar el truco, este es el código en C/C++


cpp
  1. BOOL IsWow64(DWORD PID)
  2. {
  3. typedef BOOL (WINAPI *PISWOW64PROCESS)(HANDLE, PBOOL);
  4. BOOL bIsWow64 = false;
  5. PISWOW64PROCESS _IsWow64Process = (PISWOW64PROCESS)GetProcAddress(GetModuleHandle("Kernel32.dll"), "IsWow64Process");
  6. if(_IsWow64Process){
  7. HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, PID);
  8. _IsWow64Process(hProc, &bIsWow64);
  9. CloseHandle(hProc);
  10. }
  11. return bIsWow64;
  12. }

Saludos.


  • 0

#5 Dante

Dante

    Advanced Member

  • Miembros
  • PipPipPip
  • 88 mensajes

Escrito 27 diciembre 2016 - 01:13

esto fue como lo implemente y siempre me debuelve 0 para todos los procesos


delphi
  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6. Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  7. Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
  8.  
  9. type
  10. TForm1 = class(TForm)
  11. Button1: TButton;
  12. Edit1: TEdit;
  13. procedure Button1Click(Sender: TObject);
  14. private
  15. { Private declarations }
  16. public
  17. { Public declarations }
  18. end;
  19. function IsWow64Process(hProc: THANDLE; var bIsWow64: BOOL): BOOL; stdcall; external 'Kernel32.dll';
  20. var
  21. Form1: TForm1;
  22.  
  23. implementation
  24.  
  25. {$R *.dfm}
  26.  
  27. function IsWow64(PID: DWORD): BOOL;
  28. var
  29. hProc: THANDLE;
  30. begin
  31. Result:= false;
  32. hProc:= OpenProcess(PROCESS_ALL_ACCESS, FALSE, PID);
  33. IsWow64Process(hProc, Result);
  34. CloseHandle(hProc);
  35. end;
  36.  
  37. procedure TForm1.Button1Click(Sender: TObject);
  38.  
  39. begin
  40.  
  41.  
  42. MessageBox(0,pchar(BoolToStr(IsWow64(dword(Edit1.Text)))),'',0);
  43. end;
  44.  
  45. end.

ya encontre q tena mal, era  la combercion

 MessageBox(0,pchar(BoolToStr(IsWow64(StrToInt(Edit1.text)))),'',0);


Editado por Dante, 27 diciembre 2016 - 01:19 .

  • 1

#6 sir.dev.a.lot

sir.dev.a.lot

    Advanced Member

  • Miembros
  • PipPipPip
  • 545 mensajes
  • Location127.0.0.1

Escrito 27 diciembre 2016 - 03:49

+1, (y)

 

Otra mas para la Coleccion

 

Es decir, una version mas corta!....

 

Saludos!


  • 1