+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 10 su 10

ProductName (Nome - e non numero di versione - di Windows)

  1. #1
    fabel non è in linea Scolaretto
    Si trovano in rete listati per leggere la versione e anche il service pack installato in Windows mediante la funzione api seguente:
    Public Declare Function GetVersionExA Lib "Kernel32" (lpVersionInformation As OSVERSIONINFO) As Long
    
    ma non mi risulta che esista la possibilità di leggere il nome di Windows.
    Che voi sappiate, esiste dunque un API che svolga questa funzione (cioè dare come risultato "Windows 7" oppure "Windows Xp" o "Windows 2000", ecc.)?

  2. #2
    L'avatar di gibra
    gibra non è in linea Very Important Person
    Non credo esista.
    Ma trovi tutto quello che ti serve nel registro:

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion

    Ad esempio, nel mio Windows 7 Ultimate:

    CurrentBuild = 7601
    CurrentVersion = 6.1
    ProductName = Windows 7 Ultimate
    ℹ️ Leggi di più su gibra ...

  3. #3
    fabel non è in linea Scolaretto
    Questo è vero: è da Windows 2K che si può trovare in questa sezione del registro il "nome" del Sistema operativo ma non era così per i sistemi da Win95 a WinMe ed anche Nt non aveva il ProductName in questa posizione, tuttavia non è detto che in futuro non cambi. Una funzione API invece produrrebbe lo stesso risultato anche se Microsoft cambiasse questi riferimenti...

  4. #4
    L'avatar di gibra
    gibra non è in linea Very Important Person
    Quote Originariamente inviato da fabel Visualizza il messaggio
    Questo è vero: è da Windows 2K che si può trovare in questa sezione del registro il "nome" del Sistema operativo ma non era così per i sistemi da Win95 a WinMe ed anche Nt non aveva il ProductName in questa posizione, tuttavia non è detto che in futuro non cambi. Una funzione API invece produrrebbe lo stesso risultato anche se Microsoft cambiasse questi riferimenti...
    Win95, WinMe, WinNT, ... stai parlando di preistoria.
    ℹ️ Leggi di più su gibra ...

  5. #5
    fabel non è in linea Scolaretto
    Evidentemente non mi sono spiegato . Il fatto che oggi il ProductName di Windows si trovi in quel punto del registro non significa che lo sarà sempre: infatti in passato non si trovava lì. Un API invece (se esistesse) darebbe sempre luogo alla risposta corretta. Dal momento che la libreria Kernel32 non fornisce questa funzione, il problema (per quanto possa essere considerato tale) rimane. Comunque grazie per la risposta.

  6. #6
    con la GetVersion ottieni la versione di windows,ogni versione corrisponde a un windows massimo 2.
    Con la GetVersionEX puoi anche risalire a che modello di windows hai tramite il flags wSuiteMask.
    Bastano quindi un paio di if e un array di stringhe ed il gioco è fatto.
    msdn OSVERSIONINFOEX structure
    ℹ️ Leggi di più su vbExtreme ...

  7. #7
    L'avatar di gibra
    gibra non è in linea Very Important Person
    Quote Originariamente inviato da fabel Visualizza il messaggio
    Evidentemente non mi sono spiegato . Il fatto che oggi il ProductName di Windows si trovi in quel punto del registro non significa che lo sarà sempre: infatti in passato non si trovava lì. Un API invece (se esistesse) darebbe sempre luogo alla risposta corretta. Dal momento che la libreria Kernel32 non fornisce questa funzione, il problema (per quanto possa essere considerato tale) rimane.
    Perchè non esiste.
    Quello che conta è il numero di versione, se vuoi risalire al ProductName senza accedere al registro, devi crearti una funzione che restituisca tale valore in base al numero di versione, tramite una serie di IF Versione=x.x Then ProductName = "Windows xxxxxxxx" Else .......

    Però, così facendo, sei sicuro al 100% che ogni volta uscirà una nuova versione dovrai modificare la tua funzione, aggiungendo la nuova versione.
    Non mi pare una soluzione adeguata, soprattutto per applicazioni distribuite.

    Francamente dubito che Microsoft cambi chiave nel Registro (considerando che se non erro è rimasta invariata da Windows 2000), ma tra le due possibili soluzioni preferisco sempre quella di leggermi il Registro. Se poi Microsoft cambia idea, allora in quel caso mi adeguerò.

    IMHO

    ℹ️ Leggi di più su gibra ...

  8. #8
    fabel non è in linea Scolaretto
    Seguendo il link segnalato da vbExtreme si può scoprire che l'API GetVersionEX da Windows 8.1 è obsoleta:
    Targeting your application for Windows*8.1 (Windows)

  9. #9
    L'avatar di gibra
    gibra non è in linea Very Important Person
    Quote Originariamente inviato da fabel Visualizza il messaggio
    Seguendo il link segnalato da vbExtreme si può scoprire che l'API GetVersionEX da Windows 8.1 è obsoleta:
    Targeting your application for Windows*8.1 (Windows)
    Appunto. Come vedi è esattamente il contrario di quello che hai pensato.

    Mentre il ProductName letto dalla chiave del Registro:

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion

    Restituisce i valori corretti anche con Windows 8.

    ℹ️ Leggi di più su gibra ...

  10. #10
    fabel non è in linea Scolaretto
    Appunto. Come vedi è esattamente il contrario di quello che hai pensato.
    Beh Gibra, i fatti ti danno ragione e in più ti ritengo esperto di programmazione (senza ironia)!
    Tuttavia converrai che dopo 18 anni di uso immutato di questa API non fosse errato pensare che avrebbe continuato a svolgere questa funzione!
    Inoltre prelevare il ProductName dal registro è possibile solo(!) da 13 anni (cioè da Windows 2000).
    In più chi garantisce che qualcuno non modifichi il ProductName manualmente generando, attraverso la lettura del registro, risultati diversi da quelli attesi?
    Per concludere mi interessava solo sapere dell'esistenza di un API con questa funzione di rendere il nome del sistema operativo e ho capito che non esiste: tutto qui.

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. recupero numero versione programma
    Da pierovb nel forum Visual Basic 6
    Risposte: 1
    Ultimo Post: 31-07-2020, 11:04
  2. [VS2010] Nome del progetto e versione a runtime
    Da dolcissimo nel forum Visual Basic .Net
    Risposte: 0
    Ultimo Post: 09-01-2012, 17:39
  3. Registro di sistema e versione di windows
    Da artemis79 nel forum Microsoft Windows
    Risposte: 5
    Ultimo Post: 02-12-2010, 11:29
  4. Numero versione
    Da alex__ice nel forum Visual Basic .Net
    Risposte: 1
    Ultimo Post: 23-04-2008, 12:25
  5. nome utente e numero di telefono si modif
    Da stefano_ nel forum Microsoft Windows
    Risposte: 38
    Ultimo Post: 17-01-2005, 01:10