[PB4] Processus 32 Bits ou 64 Bits ?

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

[PB4] Processus 32 Bits ou 64 Bits ?

Message par Flype »

Microsoft Platform SDK :

Code : Tout sélectionner

// Requires Windows Vista or Windows XP.

#include <windows>

typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);

LPFN_ISWOW64PROCESS 
fnIsWow64Process = (LPFN_ISWOW64PROCESS)GetProcAddress(
GetModuleHandle("kernel32"),"IsWow64Process");
 
BOOL IsWow64()
{
    BOOL bIsWow64 = FALSE;
 
    if (NULL != fnIsWow64Process)
    {
        if (!fnIsWow64Process(GetCurrentProcess(),&bIsWow64))
        {
            // handle error
        }
    }
    return bIsWow64;
}
Une traduction possible pour Purebasic 4.0 :

Code : Tout sélectionner

Procedure.l IsWow64() ; For PB4.0
  
  Protected bIsWow64.l = #False
  
  fnIsWow64Process = GetProcAddress_(GetModuleHandle_("kernel32"), "IsWow64Process")
  
  If fnIsWow64Process ; Windows XP +
    If Not CallFunctionFast(fnIsWow64Process, GetCurrentProcess_(), @bIsWow64)
      ; handle error
    EndIf
  EndIf
  
  ProcedureReturn bIsWow64
  
EndProcedure
Ou encore :

Code : Tout sélectionner

Prototype IsWow64Process(pid.l, *bResult)

Procedure.l IsWow64() ; For PB4.0
  
  Protected bIsWow64.l = #False
  
  fnIsWow64Process.IsWow64Process = GetProcAddress_(GetModuleHandle_("kernel32"), "IsWow64Process")
  
  If fnIsWow64Process ; Windows XP+
    If Not fnIsWow64Process(GetCurrentProcess_(), @bIsWow64)
      ; handle error
    EndIf
  EndIf
  
  ProcedureReturn bIsWow64
  
EndProcedure
ou un dernier (mais attention à ne l'exécuter que sous XP ou Vista:

Code : Tout sélectionner

Import "kernel32.lib"
  IsWow64Process(pid.l, *bResult)
EndImport

Procedure.l IsWow64()
  IsWow64Process(GetCurrentProcess_(), @bIsWow64.l)
  ProcedureReturn bIsWow64
EndProcedure




Renvoi #TRUE si l'OS est 64Bits, ou #FALSE s'il est 32bits.

Code : Tout sélectionner

If IsWow64()
  Debug "OS 64 bit !"
Else
  Debug "OS 32 bit !"
EndIf 

:wink:
Image
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: [PB4] Processus 32 Bits ou 64 Bits ?

Message par nico »

IsWow64Process ne sert pas à connaitre si l'OS est 32 ou 64 bits mais il sert à savoir si un processus 32 bits s'exécute dans un environnement 64 bits
C'est pas du tout pareil

Pour savoir si l'OS est 32 ou 64 bits,il faut utiliser GetNativeSystemInfo
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: [PB4] Processus 32 Bits ou 64 Bits ?

Message par Ar-S »

On peut vérifier si dans le registre il existe

Code : Tout sélectionner

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node 
S'il n'existe pas ça doit être du 32bits.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
Jacobus
Messages : 1559
Inscription : mar. 06/avr./2004 10:35
Contact :

Re: [PB4] Processus 32 Bits ou 64 Bits ?

Message par Jacobus »

Avec les variables d'environnement ça doit être possible

Code : Tout sélectionner

;Détecter le type de plateforme d'après les variables d'environnement
;Sur 3 variables, on doit pouvoir s'en assurer
Procedure.l GetPlateforme6432()
; #PROCESSOR_ARCHITECTURE_INTEL = 0
; #PROCESSOR_ARCHITECTURE_IA64 = 6
; #PROCESSOR_ARCHITECTURE_AMD64 = 9
; #PROCESSOR_ARCHITECTURE_UNKNOWN = -1
PlateformeLevel = 0
If ExamineEnvironmentVariables()			  
		While NextEnvironmentVariable()
			If EnvironmentVariableName() <> ""
  			 If EnvironmentVariableName() = "ProgramW6432" And EnvironmentVariableValue() = "C:\Program Files"
  			   Debug EnvironmentVariableName() + " = " + EnvironmentVariableValue()
  			   PlateformeLevel = PlateformeLevel + 1
  			 EndIf 			 
  			 If EnvironmentVariableName() = "PROCESSOR_ARCHITEW6432" And EnvironmentVariableValue() = "AMD64" Or EnvironmentVariableName() = "PROCESSOR_ARCHITEW6432" And EnvironmentVariableValue() = "IA64"
  			   Debug EnvironmentVariableName() + " = " + EnvironmentVariableValue()
  			   PlateformeLevel = PlateformeLevel + 1
  			 EndIf 			 
  			 If EnvironmentVariableName() = "ProgramFiles" And EnvironmentVariableValue() = "C:\Program Files (x86)"
  			   Debug EnvironmentVariableName() + " = " + EnvironmentVariableValue()
  			   PlateformeLevel = PlateformeLevel + 1
  			 EndIf  			 
			EndIf   
		Wend
		ProcedureReturn PlateformeLevel
	EndIf 
EndProcedure
;Test
If GetPlateforme6432() = 3
  Debug "---------------------"
  Debug "Plateforme 64 bits"
Else 
  Debug "---------------------"
  Debug "Plateforme 32 bits"
EndIf 
Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Re: [PB4] Processus 32 Bits ou 64 Bits ?

Message par Anonyme2 »

Jacobus, j'ai un drôle de résultat avec ton code
Compilation sous PB x64 sur un PC portable 64 Bit Seven Pro 64

ProgramW6432 = C:\Program Files
---------------------
Plateforme 32 bits


Compilation sous PB x32

PROCESSOR_ARCHITEW6432 = AMD64
ProgramFiles = C:\Program Files (x86)
ProgramW6432 = C:\Program Files
---------------------
Plateforme 64 bits
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: [PB4] Processus 32 Bits ou 64 Bits ?

Message par Ar-S »

Denis a écrit :Jacobus, j'ai un drôle de résultat avec ton code
Compilation sous PB x64 sur un PC portable 64 Bit Seven Pro 64

ProgramW6432 = C:\Program Files
---------------------
Plateforme 32 bits


Compilation sous PB x32

PROCESSOR_ARCHITEW6432 = AMD64
ProgramFiles = C:\Program Files (x86)
ProgramW6432 = C:\Program Files
---------------------
Plateforme 64 bits
Il y a quoi de bizarre ?
Avec PB32 ou 64 ton seven est en 64bits.
Ces resultats sont logiques.
ProgramW6432 = C:\Program Files renvoi juste le lieux ou tes appli 64bits sont installées par défaut.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
Jacobus
Messages : 1559
Inscription : mar. 06/avr./2004 10:35
Contact :

Re: [PB4] Processus 32 Bits ou 64 Bits ?

Message par Jacobus »

@Denis, Exact, j'ai le même résultat, ce qui est étonnant.
J'avais pas testé compilé en 64 bits... Il semble que les variables d'environnement ne soient pas détectées de la même façon suivant le compilo utilisé ?!?

@Ar-s, ben non c'est pas logique, les deux autres variables testées ne devraient pas être différentes...
Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: [PB4] Processus 32 Bits ou 64 Bits ?

Message par Ar-S »

Ah pardon je ne pensais pas que c'était l'absence des variables qui étaient en cause.
Je vais tester en 64bits aussi.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: [PB4] Processus 32 Bits ou 64 Bits ?

Message par Ar-S »

Il faut remplacer PROCESSOR_ARCHITEW6432 par PROCESSOR_ARCHITECTURE sur PB x64
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Répondre