Windowsversion korrekt ermitteln

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Unsere Datenschutzerklärung wurde aktualisiert. Mit der Nutzung unseres Forums akzeptierst Du unsere Datenschutzerklärung. Du bestätigst zudem, dass Du mindestens 16 Jahre alt bist.

    • Windowsversion korrekt ermitteln

      Wer mit XProfan die Windowsversion ab Windows8.1 korrekt ermitteln will, stößt da eventuell auf Probleme.
      Bei mir wird zum Beispiel unter Windows10 folgendes mit $Winver angezeigt:
      [Blockierte Grafik: https://abload.de/img/1niurd.png]
      6.2 ist aber die Versionsnummer für Windows8.0!

      Grund dafür ist, das sowohl die API GetVersion als auch die API GetVersionEx ein spezielles Manifest für die EXE benötgen, um ab Windows8.1 korrekt zu funktionieren - siehe hier: msdn.microsoft.com/de-de/libra…op/ms724833(v=vs.85).aspx
      Abhilfe schafft hier ein spezieller nativer API-Aufruf, der es ermöglicht, die Windowsversion auch ohne angepasstes Manifest korrekt anzeigen zu lassen.
      Hier Code zum Testen:

      Quellcode

      1. '#####################################################################################
      2. '######### Code von AHT #########
      3. '######### Gepostet für http://www.paules-pc-forum.de #########
      4. '#####################################################################################
      5. Struct OSversionInfoU = dwOSVersionInfoSize&, dwMajorVersion&, dwMinorVersion&, dwBuildNumber&, dwPlatformId&, szCSDVersion$(256), wServicePackMajor%, wServicePackMinor%, wSuiteMask%, wProductType#(1), wReserved#(1)
      6. DECLARE OSversionInfoU#
      7. DIM OSversionInfoU#, OSversionInfoU
      8. OSversionInfoU#.dwOSVersionInfoSize& = SizeOf(OSversionInfoU#)
      9. External("ntdll.dll", "RtlGetVersion", OSversionInfoU#)
      10. Print "Windowsversion: " + str$(OSversionInfoU#.dwMajorVersion&) + "." + str$(OSversionInfoU#.dwMinorVersion&)
      11. Print "Build: " + str$(OSversionInfoU#.dwBuildNumber&)
      12. While 1
      13. Waitinput
      14. EndWhile
      Alles anzeigen
      Bei mir wird mit diesem Code unter Windows8.1 folgendes angezeigt:
      [Blockierte Grafik: https://abload.de/img/2h8u8a.png]

      Unter Windows10 steht bei mir das:
      [Blockierte Grafik: https://abload.de/img/3u2uq9.png]
      ________________________________________________________

      PPFScanner PPFS Android MisterXMail@web.de
      Mfg AHT
    • Vielleicht sollte ich das endlich mal in die entsprechende XProfan-Funktion einbauen ... ;-)

      Gruß
      Roland
      (Intel Duo E8400 3,0 GHz / 4 GB RAM / 250 GB HDD / ATI Radeon HD4770 512 MB / Windows Vista - ausgemustert zum Verkauf)
      AMD Athlon II X2 2,9 GHz / 8 GB RAM / 500 + 1000 GB HDD / ATI Radeon 3000 (onboard) / Windows 10(64) - XProfan X4


      http://www.xprofan.de
    • ... und erledigt:

      In der nächsten Version werde ich, insofern die NTDLL mit der Funktion RtlGetVersion vorhanden ist (ab Windows 2000), diese Funktion nutzen, ansonsten die bisherige Version.

      Gruß
      Roland
      (Intel Duo E8400 3,0 GHz / 4 GB RAM / 250 GB HDD / ATI Radeon HD4770 512 MB / Windows Vista - ausgemustert zum Verkauf)
      AMD Athlon II X2 2,9 GHz / 8 GB RAM / 500 + 1000 GB HDD / ATI Radeon 3000 (onboard) / Windows 10(64) - XProfan X4


      http://www.xprofan.de
    • Hab mir für den eigenen Gebrauch eine "Krücke" geschrieben

      Quellcode

      1. DECLARE txt$
      2. CLS
      3. txt$=CREATE("TEXT",%hwnd,"Windows-Version",20,10,130,20)
      4. IF $winver = "6.1"
      5. txt$=CREATE("TEXT",%hwnd,"7.00",20,30,130,20)
      6. ELSEIF $winver < "6.1"
      7. txt$=CREATE("TEXT",%hwnd,"10.00",20,30,130,20)
      8. ENDIF
      Ist natürlich ausbaufähig. Zeigt mir aber auf meinem Laptop (Win-10) die richtige Version an.
    • Hab doch "Krücke" geschrieben ! :-)
      ...und "ausbaufähig" - man kann das IF - ENDIF komplett schreiben.
      Hatte ich mal irgendwo von Windows-95 an aufwärts.
      Finde es bloß nicht mehr.
      Ist aber über die winver$ einfach zu schreiben.
      (Bin bloß zu faul)
    • Bei mir herrscht Ordnung ! Ein Griff und die wilde Sucherei beginnt !
      Hab den Code gefunden...

      Quellcode

      1. PROC WINDOWS_VERSION
      2. DECLARE winversion$
      3. Winversion$=(Str$((~GetVersion() & $FFFF) & $FF)+"."+Str$((~GetVersion() & $FFFF) >> 8))
      4. CASE winversion$ = "4.0":winanzeige$ = "Windows 95"
      5. CASE winversion$ = "4.1":winanzeige$ = "Windows 98"
      6. CASE winversion$ = "4.9":winanzeige$ = "Windows ME"
      7. CASE winversion$ = "4.4":winanzeige$ = "Windows NT"
      8. CASE winversion$ = "5.0":winanzeige$ = "Windows 2000"
      9. CASE winversion$ = "5.1":winanzeige$ = "Windows XP"
      10. CASE winversion$ = "6.0":winanzeige$ = "Windows Vista"
      11. CASE winversion$ = "6.1":winanzeige$ = "Windows 7"
      12. CASE winversion$ > "6.1":winanzeige$ = "Windows 8"
      13. ENDPROC
      Alles anzeigen
      Kann weiter entwickelt werden...
      Würde mich freuen, wenn jemand den Code auf "Neuzeit" pimpft !
    • So in der Art:

      Quellcode: Windowsversion.inc

      1. PROC WindowsVersionNeu
      2. Parameters Format&
      3. Struct OSversionInfoU = dwOSVersionInfoSize&, dwMajorVersion&, dwMinorVersion&, dwBuildNumber&, dwPlatformId&, szCSDVersion#(256), wServicePackMajor%, wServicePackMinor%, wSuiteMask%, wProductType#(1), wReserved#(1)
      4. DECLARE winversion$, OSversionInfoU#, AHT_NTDLL$, AHT_Function$, AHT_APICAll&, winanzeige$, AHT_Function2$
      5. Declare ServicePack$, BuildNumber$, AHT_StringBuffer#, CSDAdresse%, AHT_Kernel32$
      6. DIM AHT_StringBuffer#, 262
      7. DIM OSversionInfoU#, OSversionInfoU
      8. OSversionInfoU#.dwOSVersionInfoSize& = SizeOf(OSversionInfoU#)
      9. Clear AHT_APICAll&, winanzeige$, ServicePack$, BuildNumber$
      10. AHT_NTDLL$ = "NTDLL.DLL"
      11. AHT_Function$ = "RtlGetVersion"
      12. AHT_Function2$ = "GetVersionExW"
      13. AHT_Kernel32$ = "kernel32.dll"
      14. IF FileExists($Syspath + "\NTDLL.DLL")
      15. If External("Kernel32.dll", "GetProcAddress", External("kernel32.dll", "GetModuleHandleA", addr(AHT_NTDLL$)), addr(AHT_Function$)) > 0
      16. AHT_APICAll& = 1
      17. ElseIf External("Kernel32.dll", "GetProcAddress", External("kernel32.dll", "GetModuleHandleA", addr(AHT_Kernel32$)), addr(AHT_Function2$)) > 0
      18. AHT_APICAll& = 2
      19. endif
      20. else
      21. If External("Kernel32.dll", "GetProcAddress", External("kernel32.dll", "GetModuleHandleA", addr(AHT_Kernel32$)), addr(AHT_Function2$)) > 0
      22. AHT_APICAll& = 2
      23. endif
      24. endif
      25. If AHT_APICAll& = 1
      26. External("ntdll.dll", "RtlGetVersion", OSversionInfoU#)
      27. Winversion$ = str$(OSversionInfoU#.dwMajorVersion&) + "." + str$(OSversionInfoU#.dwMinorVersion&)
      28. BuildNumber$ = str$(OSversionInfoU#.dwBuildNumber&)
      29. CSDAdresse% = 20 + OSversionInfoU#
      30. External("Kernel32.dll", "WideCharToMultiByte", 0, 0, CSDAdresse%, 128, AHT_StringBuffer#, 261, 0, 0)
      31. ServicePack$ = String$(AHT_StringBuffer#, 0)
      32. ElseIf AHT_APICAll& = 2
      33. External("kernel32.dll", "GetVersionExW", OSversionInfoU#)
      34. Winversion$ = str$(OSversionInfoU#.dwMajorVersion&) + "." + str$(OSversionInfoU#.dwMinorVersion&)
      35. BuildNumber$ = str$(OSversionInfoU#.dwBuildNumber&)
      36. CSDAdresse% = 20 + OSversionInfoU#
      37. External("Kernel32.dll", "WideCharToMultiByte", 0, 0, CSDAdresse%, 128, AHT_StringBuffer#, 261, 0, 0)
      38. ServicePack$ = String$(AHT_StringBuffer#, 0)
      39. else
      40. Winversion$ = $WinVer
      41. endif
      42. If OSversionInfoU#.dwPlatformId& = 2
      43. If val(winversion$) < 5.0
      44. winanzeige$ = "Windows NT " + WinVersion$
      45. endif
      46. else
      47. If val(winversion$) = 4.0
      48. winanzeige$ = "Windows 95"
      49. Elseif val(winversion$) = 4.1
      50. winanzeige$ = "Windows 98"
      51. Elseif val(winversion$) = 4.9
      52. winanzeige$ = "Windows ME"
      53. else
      54. winanzeige$ = "unbekannte Windowsversion " + Winversion$
      55. endif
      56. endif
      57. If val(winversion$) = 5.0
      58. winanzeige$ = "Windows 2000"
      59. Elseif val(winversion$) = 5.1
      60. winanzeige$ = "Windows XP"
      61. Elseif val(winversion$) = 5.2
      62. If External("User32", "GetSystemMetrics", 89) = 2
      63. winanzeige$ = "Windows Server 2003 R2"
      64. ElseIf Byte(OSversionInfoU#, 84) = 1
      65. winanzeige$ = "Windows XP 64Bit"
      66. elseif OSversionInfoU#.wSuiteMask% = $8000
      67. winanzeige$ = "Windows Home Server"
      68. else
      69. winanzeige$ = "Windows Server 2003"
      70. endif
      71. elseif val(winversion$) = 6.0
      72. winanzeige$ = "Windows Vista"
      73. ElseIf val(winversion$) = 6.1
      74. winanzeige$ = "Windows 7"
      75. ElseIf val(winversion$) = 6.2
      76. winanzeige$ = "Windows 8"
      77. ElseIf val(winversion$) = 6.3
      78. winanzeige$ = "Windows 8.1"
      79. ElseIf val(winversion$) = 10
      80. winanzeige$ = "Windows 10"
      81. Elseif winanzeige$ = ""
      82. winanzeige$ = "unbekannte Windowsversion " + Winversion$
      83. endif
      84. If Format& = 0
      85. Return Winversion$
      86. ElseIf Format& = 1
      87. Return winanzeige$
      88. ElseIf Format& = 2
      89. Return ServicePack$
      90. ElseIf Format& = 3
      91. Return BuildNumber$
      92. endif
      93. ENDPROC
      Alles anzeigen

      Hier Anwendung:

      Quellcode

      1. $I Windowsversion.inc
      2. Print "Windows Versionsnummer: " + WindowsVersionNeu(0)
      3. Print "Windowsversion: " + WindowsVersionNeu(1)
      4. If WindowsVersionNeu(2) <> ""
      5. Print "Servicepack: " + WindowsVersionNeu(2)
      6. endif
      7. If WindowsVersionNeu(3) <> ""
      8. Print "Build: " + WindowsVersionNeu(3)
      9. endif
      10. While 1
      11. Waitinput
      12. EndWhile
      Alles anzeigen
      ________________________________________________________

      PPFScanner PPFS Android MisterXMail@web.de
      Mfg AHT

      Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von AHT ()