Comment savoir si l'utilisateur est sous XP ou Seven?

YANN-56

XLDnaute Barbatruc
Bonsoir à tous, ou Bonjour suivant l'heure,

J'utilise "GetDetailsOf" pour dresser la liste des propriétés résumées d'un document Word.
(Ce qui est du même tonneau pour un Excel)

Comme le sujet de la discussion ci-dessous le démontre:
https://www.excel-downloads.com/thr...ent-2-le-2-nest-pas-le-meme-chez-tous.153645/

Les n° d'Items sont différents!

J'ai pensé palier ce problème en adaptant mon code suivant le "Windows" utilisé.

Mais malgré moult recherches, je ne parviens pas à pomper son identité.

Mon application étant utilisée en réseau avec des versions différentes; c'est le désordre!

Si quelqu'un a une idée; je lui serai très reconnaissant.

Merci par avance,

Yann
 

Lone-wolf

XLDnaute Barbatruc
Re : Comment savoir si l'utilisateur est sous XP ou Seven?

Sorry,

c'est avec cette macro, que j'ai modifier le MsgBox.

Regarde ce que ça donne avec ceci:

Code:
Sub test2()  'source:[URL="http://www.blogger.com/profile/16715160344457148874"]Blogger:  Profil d'utilisateur : Richard Binning[/URL]
On Error Resume Next
Dim WshShell
Dim OsType
Set WshShell = CreateObject("WScript.Shell")
OsType = WshShell.RegRead("HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\PROCESSOR_ARCHITECTURE")
If OsType = "x86" Then
MsgBox "Windows 64bit system detected"
ElseIf OsType = "AMD64" Then
MsgBox "ERROR !"
End If
End Sub


Amicalement
Lone-wolf
 

JCGL

XLDnaute Barbatruc
Re : Comment savoir si l'utilisateur est sous XP ou Seven?

Bonjour à tous,

L'Agrafe : Voici ce que donne ton code du #57 chez moi :


Capture_2.png

J'ai du mal à suivre... Et je remarque que certains aussi...

A + à tous
 

Pièces jointes

  • Capture_2.png
    Capture_2.png
    8.9 KB · Affichages: 190
  • Capture_2.png
    Capture_2.png
    8.9 KB · Affichages: 188

fhoest

XLDnaute Accro
Re : Comment savoir si l'utilisateur est sous XP ou Seven?

Ce qui me permettrait d'adapter le code de masquage de la bande bleue des USF suivant cette donnée.

Re, bien que j'ai du mal a suivre pour Yann n'est il pas bien dans le code de declaration de la library "lib "user32" de mettre lib "user64"
je ne peux pas tester mais bon juste une petite idée au passage que je ferais a ta place.
A+:rolleyes:
 

david84

XLDnaute Barbatruc
Re : Comment savoir si l'utilisateur est sous XP ou Seven?

Bonsoir,
@staple : chez moi ton code
Code:
Sub a() 'renvoie 32 sur un PC sous XP HOME SP3)
Dim OSVER
Set OSVER = GetObject("winmgmts:root\cimv2:Win32_Processor='cpu0'")
MsgBox OSVER.addresswidth & "-bit"
End Sub
ramène 64 bits ce qui est correct.
Peux-tu m'expliquer ce que fait exactement cette macro ?
Je crois comprendre qu'elle ouvre un fichier (lequel ?) pour interroger addresswidth.
Qu'est-ce exactement que addresswidth ?

@tous : chez moi
Code:
Sub test()
MsgBox Application.OperatingSystem
End Sub
ramène
Windows (64-bit) NT 6.01
Merci à ceux et celles qui le veulent bien de tester cette macro de votre côté et de me retourner son résultat en me précisant également :
1) pour le système d'exploitation :
- quel est votre système d'exploitation Windows (XP, Vista, Seven,...)
- quel est son type (32 bits, 64 bits)

2) pour la version d'Office :
- quelle est votre version d'Office (2003, 2007, 2010,...)
- pour ceux qui sont en 2010 : quelle est la version que vous avez installée ? 32 ou 64 bits ?

3) le résultat de la macro de staple
Code:
Sub a() 'renvoie 32 sur un PC sous XP HOME SP3)
Dim OSVER
Set OSVER = GetObject("winmgmts:root\cimv2:Win32_Processor='cpu0'")
MsgBox OSVER.addresswidth & "-bit"
End Sub

Sur mon ordinateur, pour avoir les infos sur le système d'exploitation : panneau de config=>sécurité et système=>système.
De mon côté, cela donne :
1) pour le système d'exploitation :
- Windows 7 Edition Familiale Premium
- système d'exploitation 64 bits
2) pour la version d'Office : Microsoft Office 2010 64 bits
A+
 
Dernière édition:

Lone-wolf

XLDnaute Barbatruc
Re : Comment savoir si l'utilisateur est sous XP ou Seven?

Voici une autre version (pour le FUN ! :D) de la macro que Staple a proposé.

Code:
Sub test3()
On Error Resume Next
Dim WshShell
Dim OsType
Set WshShell = CreateObject("WScript.Shell")
OsType = WshShell.RegRead("HKLM\SYSTEM\CurrentControlSet\Control\" & _
"Session Manager\Environment\PROCESSOR_ARCHITECTURE")
If OsType = "x86" Then
MsgBox "Your System is Windows 32bit", , "Win7 Home Premium"
ElseIf OsType <> "x86" Then
MsgBox "GO SEE YOUR DEALER !!", , "Win7 Home Premium"
End If


Amicalement
Lone-wolf
 
Dernière édition:

JCGL

XLDnaute Barbatruc
Re : Comment savoir si l'utilisateur est sous XP ou Seven?

Bonjour à tous,

David :
Code:
Sub test()
MsgBox Application.OperatingSystem
End Sub

Renvoie chez moi :
Capture_1.png

Alors que je suis sous Seven en 64 Bits et Excel 2010 en 32 Bits :

Capture_2.png

Capture_3.png
Le résultat de la macro de L'Agrafe me donne :

Capture_4.png

Je n'ai pas "Sécurité et Système" dans le Panneau de Confihuration.

A++ l'ami
A + à tous
 

Pièces jointes

  • Capture_1.png
    Capture_1.png
    7.5 KB · Affichages: 185
  • Capture_1.png
    Capture_1.png
    7.5 KB · Affichages: 188
  • Capture_2.png
    Capture_2.png
    20.7 KB · Affichages: 170
  • Capture_2.png
    Capture_2.png
    20.7 KB · Affichages: 168
  • Capture_3.png
    Capture_3.png
    13.9 KB · Affichages: 177
  • Capture_3.png
    Capture_3.png
    13.9 KB · Affichages: 178
  • Capture_4.png
    Capture_4.png
    7 KB · Affichages: 176
  • Capture_4.png
    Capture_4.png
    7 KB · Affichages: 174
Dernière édition:

YANN-56

XLDnaute Barbatruc
Re : Comment savoir si l'utilisateur est sous XP ou Seven?

Bonsoir à tous, ou Bonjour suivant l'heure,

Dans le Classeur joint: La recherche de la version de Windows est parfaite chez moi.
Ceci va me permettre d'adapter mon "GetDetailsOf" facilement, et le sujet principal
de ma question est pour ma part résolu........... => Grand Merci à vous.:):):):):)

Par suite de ce dialogue fort riche, j'ai greffé la recherche des versions en 32 ou 64 Bits,

Dans le Classeur joint, je masque par un bouton la bande bleue de l'USF.
Pardon d'être si idiot: Dans ce code que j'utilise, je ne sais même pas si je fouille chez Wind ou Office!!!

Le module: "MASQUER_BANDE_BLEUE" plantant en version 64 Bits, (Office à priori)
j'ai tenté d'écrire l'adaptation du code suivant ce que m'a proposé David 84.
Mais j'ai été obligé de mettre des ' car les lignes étaient systématiquement mises en rouge!
Donc; je ne peux pas écrire un choix la suivant version constatée!!!

Pour résumer:

S'il est possible d'automatiser le masquage de la bande bleue des USF suivant les versions utilisées;
tous les postes en réseau auront la même application "Moteur" sur leur poste.

Sinon; il sera indispensable de la personnaliser pour chacun.... Mais pas trop grave!

Je suis très sensible à la générosité et richesse de vos aides. J'ai tout copié!
Promis! Quand je serai plus grand j'y reviendrai certainement pour approfondir et tenter de tout comprendre.

Amicalement,
 

Pièces jointes

  • UN.xls
    46 KB · Affichages: 52
  • UN.xls
    46 KB · Affichages: 58
  • UN.xls
    46 KB · Affichages: 55
Dernière édition:

david84

XLDnaute Barbatruc
Re : Comment savoir si l'utilisateur est sous XP ou Seven?

Re
@Yann : je t'avais posé quelques questions dans mon message #49 mais celles-ci sont restées sans réponse donc je ne pouvais pas t'aider plus.
'ai tenté d'écrire l'adaptation du code suivant ce que m'a proposé David 84.
Mais j'ai été obligé de mettre des ' car les lignes étaient systématiquement mises en rouge!
Donc; je ne peux pas écrire un choix la suivant version constatée!!!

As-tu pris le temps de parcourir le lien que je t'avais communiqué dans mon message #30 ?
Les explications données et la procédure à adopter me semblent pourtant claire, notamment ce passage :
Comme nous l’avons vu plus haut, il existe deux constantes de compilation conditionnelle : VBA7 et Win64. Pour garantir la compatibilité descendante avec les versions précédentes d’Office, on utilise la constante VBA7 (il s’agit du cas le plus courant) afin d’empêcher le code 64 bits de s’exécuter dans la version antérieure d’Office. Pour le code qui diffère entre la version 32 bits et la version 64 bits, tel que l’appel d’une API mathématique qui utilise LongLong pour sa version 64 bits et Long pour sa version 32 bits, on utilise la constante Win64. Le code suivant illustre l’utilisation de ces deux constantes.

VBA
#if Win64 then
Declare PtrSafe Function MyMathFunc Lib "User32" (ByVal N As LongLong) As LongLong
#else
Declare Function MyMathFunc Lib "User32" (ByVal N As Long) As Long
#end if
#if VBA7 then
Declare PtrSafe Sub MessageBeep Lib "User32" (ByVal N AS Long)
#else
Declare Sub MessageBeep Lib "User32" (ByVal N AS Long)
#end if
Pour résumer, si vous écrivez du code 64 bits et que prévoyez de l’utiliser dans des versions précédentes de Microsoft Office, il faut utiliser la constante de compilation conditionnelle VBA7. En revanche, si vous écrivez du code 32 bits dans Office 2010, ce code fonctionne tel que dans les versions précédentes d’Microsoft Office sans la constante de compilation. Si vous souhaitez être sûr d’utiliser des instructions 32 bits pour les versions 32 bits et des instructions 64 bits pour les versions 64 bits, la meilleure solution consiste à utiliser la constante de compilation conditionnelle Win64.

Donc, en utilisant la constante VBA7 pour régler le problème de compatibilité entre les versions 2010 64 bits et les versions Office antérieures, ta déclaration des API donnerait :
Code:
#If VBA7 Then
    Declare PtrSafe Function GetWindowLongA Lib "User32" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
    Declare PtrSafe Function SetWindowLongA Lib "User32" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
    Declare PtrSafe Function FindWindowA Lib "User32" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Declare PtrSafe Function DrawMenuBar Lib "User32" (ByVal hWnd As Long) As Long
#Else
    Declare Function GetWindowLongA Lib "user32" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
    Declare Function SetWindowLongA Lib "user32" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
    Declare Function FindWindowA Lib "user32" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Declare Function DrawMenuBar Lib "user32" (ByVal hWnd As Long) As Long
#End If
Chez moi cela fonctionne.
A toi de faire de même pour l'autre API placée dans RECHERCHE_OS et de compléter si nécessaire avec la constante Win64.

@tous : merci à Jean-Claude pour son retour de test.
Si d'autres pouvaient également me faire le retour des 2 tests proposés au message #65, cela nous permettrait de comprendre pourquoi il peut exister des différence de résultat entre les 2 macros (interrogation soulevée par certains d'entre vous il me semble).
Pour ma part, j'ai bien une idée mais pour l'instant je ne peux la valider faute de retour plus important.
A+
 
Dernière édition:

YANN-56

XLDnaute Barbatruc
Re : Comment savoir si l'utilisateur est sous XP ou Seven?

Bonjour David :), car nous sommes déjà demain! :eek:

100 fois sur le métier remettre son ouvrage.

Je vais traduire par:

100 fois remettre sur le Clavier son naufrage!

La peur du ridicule m'a amené à ne pas oser répondre à ce que tu me demandais.:eek:

Je vais imprimer, lire et relire et m'appliquer à comprendre.

De toute façon: Mes neurones explosant; feront certainement un joli feu d'artifice sur la rade de Lorient.:rolleyes:

Je sais ce qu'il me reste à faire par respect pour ton savoir et ta gentillesse.

A plus tard avec mes amitiés.

Yann
 

Efgé

XLDnaute Barbatruc
Re : Comment savoir si l'utilisateur est sous XP ou Seven?

Re a tous :)
@ David
Sous Vista Xl 2007

Pour
Code:
Sub test()
MsgBox Application.OperatingSystem
End Sub
Résultat
Sans titre-1.jpg

Pour
Code:
Sub a() 'renvoie 32 sur un PC sous XP HOME SP3)
Dim OSVER
Set OSVER = GetObject("winmgmts:root\cimv2:Win32_Processor='cpu0'")
MsgBox OSVER.addresswidth & "-bit"
End Sub
Résultat

Sans titre-2.jpg

Décidément je ne gère pas les images...;)
Cordialement
 

Pièces jointes

  • Sans titre-1.jpg
    Sans titre-1.jpg
    49.4 KB · Affichages: 112
  • Sans titre-1.jpg
    Sans titre-1.jpg
    49.4 KB · Affichages: 112
  • Sans titre-2.jpg
    Sans titre-2.jpg
    46.2 KB · Affichages: 107
  • Sans titre-2.jpg
    Sans titre-2.jpg
    46.2 KB · Affichages: 104

Staple1600

XLDnaute Barbatruc
Re : Comment savoir si l'utilisateur est sous XP ou Seven?

Bonsoir à tous

A toutes fins utiles et pour ceux que WMI intéresse ;)
Code:
Sub WMI_nous_en_dit_toujours_plus()
Dim objWMIService, objOS, colOSes
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set colOSes = objWMIService.ExecQuery("Select * from Win32_OperatingSystem")
For Each objOS In colOSes
Debug.Print "Computer Name: " & objOS.CSName
Debug.Print "Operating System"
Debug.Print " Caption: " & objOS.Caption 'Name
Debug.Print " Version: " & objOS.Version 'Version & build
Debug.Print " BuildNumber: " & objOS.BuildNumber 'Build
Debug.Print " BuildType: " & objOS.BuildType
Debug.Print " OSProductSuite: " & objOS.OSProductsuite 'OS Product suite
'Debug.Print " OSArchitecture: " & objOS.OSArchitecture
'Debug.Print " WOWEnvironment: " & objOS.WOWEnvironment
Debug.Print " OSType: " & objOS.OSType
Debug.Print " OtherTypeDescription: (2003 Server R2 release only)" & objOS.OtherTypeDescription
Debug.Print " ServicePackMajorVersion: " & objOS.ServicePackMajorVersion & "." & _
objOS.ServicePackMinorVersion
Next
Debug.Print "Processors"
Dim colCompSys, objCS
Set colCompSys = objWMIService.ExecQuery("Select * from Win32_ComputerSystem")
For Each objCS In colCompSys
Debug.Print " NumberOfProcessors: " & objCS.NumberOfProcessors
Debug.Print " NumberOfLogicalProcessors: " & objCS.NumberOfLogicalProcessors
'Debug.Print " PCSystemType: " & objCS.PCSystemType
Next
Set colProcessors = objWMIService.ExecQuery("Select * from Win32_Processor")
For Each objProcessor In colProcessors
Debug.Print " Manufacturer: " & objProcessor.Manufacturer
Debug.Print " Name: " & objProcessor.Name
Debug.Print " Description: " & objProcessor.Description
Debug.Print " ProcessorID: " & objProcessor.ProcessorID
Debug.Print " Architecture: " & objProcessor.Architecture
Debug.Print " AddressWidth: " & objProcessor.AddressWidth
Debug.Print " NumberOfCores: " & objProcessor.NumberOfCores
Debug.Print " DataWidth: " & objProcessor.DataWidth
Debug.Print " Family: " & objProcessor.Family
Debug.Print " MaximumClockSpeed: " & objProcessor.MaxClockSpeed
Next
End Sub
source du script vbs (adapté ici pour VBA)

PS: Macro à lancer dans VBE avec la fenêtre Exécution affichée.
Les lignes mises en commentaites sont celles qui ne fonctionnent pas sous XP.

PS2: Si quelqu'un trouve la syntaxe pour éviter de boucler (selon le principe utilisé dans la macro a postée précedemment) quand on veut ne rapatrier qu'un seul type d'information, je suis toujours preneur ;)
 
Dernière édition:

JCGL

XLDnaute Barbatruc
Re : Comment savoir si l'utilisateur est sous XP ou Seven?

Bonjour,

L'Agrafe: voici ce que donne ton code (j'ai du mettre une ligne en commentaire) sous Win 7 64 bits


VB:
Sub WMI_nous_en_dit_toujours_plus()
      Dim objWMIService, objOS, colOSes
1     Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
2     Set colOSes = objWMIService.ExecQuery("Select * from Win32_OperatingSystem")
3     For Each objOS In colOSes
4     Debug.Print "Computer Name: " & objOS.CSName
5     Debug.Print "Operating System"
6     Debug.Print " Caption: " & objOS.Caption 'Name
7     Debug.Print " Version: " & objOS.Version 'Version & build
8     Debug.Print " BuildNumber: " & objOS.BuildNumber 'Build
9     Debug.Print " BuildType: " & objOS.BuildType
10    Debug.Print " OSProductSuite: " & objOS.OSProductsuite 'OS Product suite
11    Debug.Print " OSArchitecture: " & objOS.OSArchitecture
      'Debug.Print " WOWEnvironment: " & objOS.WOWEnvironment
12    Debug.Print " OSType: " & objOS.OSType
13    Debug.Print " OtherTypeDescription: (2003 Server R2 release only)" & objOS.OtherTypeDescription
14    Debug.Print " ServicePackMajorVersion: " & objOS.ServicePackMajorVersion & "." & _
      objOS.ServicePackMinorVersion
15    Next
16    Debug.Print "Processors"
      Dim colCompSys, objCS
17    Set colCompSys = objWMIService.ExecQuery("Select * from Win32_ComputerSystem")
18    For Each objCS In colCompSys
19    Debug.Print " NumberOfProcessors: " & objCS.NumberOfProcessors
20    Debug.Print " NumberOfLogicalProcessors: " & objCS.NumberOfLogicalProcessors
21    Debug.Print " PCSystemType: " & objCS.PCSystemType
22    Next
23    Set colProcessors = objWMIService.ExecQuery("Select * from Win32_Processor")
24    For Each objProcessor In colProcessors
25    Debug.Print " Manufacturer: " & objProcessor.Manufacturer
26    Debug.Print " Name: " & objProcessor.Name
27    Debug.Print " Description: " & objProcessor.Description
28    Debug.Print " ProcessorID: " & objProcessor.ProcessorID
29    Debug.Print " Architecture: " & objProcessor.Architecture
30    Debug.Print " AddressWidth: " & objProcessor.AddressWidth
31    Debug.Print " NumberOfCores: " & objProcessor.NumberOfCores
32    Debug.Print " DataWidth: " & objProcessor.DataWidth
33    Debug.Print " Family: " & objProcessor.Family
34    Debug.Print " MaximumClockSpeed: " & objProcessor.MaxClockSpeed
35    Next
End Sub

Computer Name: PORTABLE
Operating System
Caption: Microsoft Windows 7 Édition Familiale Premium
Version: 6.1.7601
BuildNumber: 7601
BuildType: Multiprocessor Free
OSProductSuite: 768
OSArchitecture: 64 bits
OSType: 18
OtherTypeDescription: (2003 Server R2 release only)
ServicePackMajorVersion: 1.0
Processors
NumberOfProcessors: 1
NumberOfLogicalProcessors: 2
PCSystemType: 2
Manufacturer: GenuineIntel
Name: Pentium(R) Dual-Core CPU T4500 @ 2.30GHz
Description: Intel64 Family 6 Model 23 Stepping 10
ProcessorID: BFEBFBFF0001067A
Architecture: 9
AddressWidth: 64
NumberOfCores: 2
DataWidth: 64
Family: 191
MaximumClockSpeed: 2300

A++
A + à tous
 

david84

XLDnaute Barbatruc
Re : Comment savoir si l'utilisateur est sous XP ou Seven?

Bonjour,
@staple : il me semble que cette ligne n'est pas complète (ou alors à quoi sert-elle ? A exposer les infos ci-dessous ?) :
Debug.Print "Operating System"
Sinon, merci pour ce lien (entre autres:)) que j'ai commencé à regarder.
Résultat chez moi:
Computer Name: DAVID-PC
Operating System
Caption: Microsoft Windows*7 Édition Familiale Premium
Version: 6.1.7601
BuildNumber: 7601
BuildType: Multiprocessor Free
OSProductSuite: 768
OSType: 18
OtherTypeDescription: (2003 Server R2 release only)
ServicePackMajorVersion: 1.0
Processors
NumberOfProcessors: 1
NumberOfLogicalProcessors: 4
Manufacturer: GenuineIntel
Name: Intel(R) Core(TM) i5-2400S CPU @ 2.50GHz
Description: Intel64 Family 6 Model 42 Stepping 7
ProcessorID: BFEBFBFF000206A7
Architecture: 9
AddressWidth: 64
NumberOfCores: 4
DataWidth: 64
Family: 191
MaximumClockSpeed: 2501
A+
 
Dernière édition: