Le code présenté ci dessus est de la proprieté de Guru :D
Allez en cette fin de semaine, un peu d'humour ne fait de mal à personne.
nabab
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
Guru
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.
dom01
Comment tu fais pour mettre byRef puisque moi il me met directement byVal?
Merci Ô Guru
Guru
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.
dom01
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.
Guru
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]
dom01
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)
---------------