Récupérer la version de windows? [VB.Net] - Programmation
Marsh Posté le 18-05-2001 à 11:22:27
Il me semble qu'il faudrait enlever "ByVal" dans le passage du paramètre à la fonction de l'api Win32. En effet dans la définition de la fonction GetVersionEx, la structure lpVersionInformation est indiquée comme in/out.
[edit]--Message édité par Guru--[/edit]
Marsh Posté le 18-05-2001 à 15:30:23
non c'est bien byVal, d'ailleurs si j'essaye de l'enlever ou de mettre byRef, il me remet automatiquement byVal,
Merci quand meme.
Marsh Posté le 18-05-2001 à 15:46:12
D'un point de vue logique cela parait plus que douteux de passer une structure qui va être modifiée par une fonction externe en ByVal. En effet dans ce cas une copie de la structure est crée et passée a la dite fonction. La structure définie dans la procédure appelante ne sera dans un tel cas pas modifiée et tu ne disposera pas de l'information retournée par la fonction.
Afin de vérifier que le comportement a priori normal de VB se retrouve en VB.Net, j'ai fait un test avec ton code et lors de l'execution avec ByVal cela plante mais fonctionne correctement avec ByRef. Le seul problème étant que si la plate forme est correctement identifiée, les numéros de version (majeur / mineur) et de build sont a 0.
Marsh Posté le 18-05-2001 à 16:30:33
Comment tu fais pour mettre byRef puisque moi il me met directement byVal?
Merci Ô Guru
Marsh Posté le 18-05-2001 à 16:58:18
Si tu ne mets rien il ajoute automatiquement ByVal car c'est le mode de transmission de paramètres par défaut de VB. Tu tapes simplement ByRef avant le premier paramètre.
Marsh Posté le 18-05-2001 à 16:59:19
Heu un copier coller t'interesse ...
Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" (ByRef lpVersionInformation As OSVERSIONINFO) As Long
Structure OSVERSIONINFO
Dim dwOSVersionInfoSize As Long
Dim dwMajorVersion As Long
Dim dwMinorVersion As Long
Dim dwBuildNumber As Long
Dim dwPlatformId As Long
Dim szCSDVersion As String
End Structure
Public MonOs As OSVERSIONINFO
Marsh Posté le 18-05-2001 à 17:04:52
Le code présenté ci dessus est de la proprieté de Guru
Allez en cette fin de semaine, un peu d'humour ne fait de mal à personne.
Marsh Posté le 18-05-2001 à 04:00:22
Voila j'ai essayé pas mal de chose provenant de VB6, mais je n'ai pas réussi a récupérer la version de windows (95/98/NT/2000)
J'ai essayé ça (mais ça ne marche pas):
Dans module
Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" (ByVal lpVersionInformation As OSVERSIONINFO) As Long
Structure OSVERSIONINFO
Dim dwOSVersionInfoSize As Long
Dim dwMajorVersion As Long
Dim dwMinorVersion As Long
Dim dwBuildNumber As Long
Dim dwPlatformId As Long
Dim szCSDVersion As String
End Structure
Public MonOs As OSVERSIONINFO
----------------
Dans form
Dim L As Long
Dim Msg As String
MonOs.dwOSVersionInfoSize = CDbl(Len(MonOs.ToString))
L = GetVersionEx(MonOs)
Msg = ""
Select Case MonOs.dwPlatformId
Case VER_PLATFORM_WIN32_NT
Msg = Msg & "Windows NT "
Case VER_PLATFORM_WIN32_WINDOWS
Msg = Msg & "Windows 95 / 98"
Case VER_PLATFORM_WIN32s
Msg = Msg & "Win32S sous Windows 3.x (!)"
End Select
Msg = Msg & "Version " & Str(MonOs.dwMajorVersion) & "."
Msg = Msg & Str(MonOs.dwMinorVersion) & "."
Msg = Msg & Str(MonOs.dwBuildNumber) & "."
Msg = Msg & MonOs.szCSDVersion
MsgBox(Msg)
---------------
Si vous avez mieux merci.
[edit]--Message édité par dom01--[/edit]
---------------
WRT45Gv2