Serial Disc Number   otázka

VB.NET

Potřeboval bych zjistit sériové číslo disku počítače, na kterém je nějaká aplikace nainstalovaná. Ve VB 6 jsem to programoval pomocí API GetVolumeInformation. Je možné se na tuto informaci nějakým způsobem dostat ve VB.NET?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ano, pomocí WMI. Je to však dost komplikované, protože je potřeba zjistit: Fyzický disk, typ disku, mapování oddíl-disk a potom teprve DeviceID. Za předpokladu, že chcete vybírat podle písmena disku (např. C:).

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Díky za bleskovou odpověď. API funkce ve tvaru:

Private Declare Function GetVolumeInformation Lib "kernel32" Alias "GetVolumeInformationA" (ByVal lpRootPathName As String, ByVal lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Long, lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Long) As Long

nedává správnou odpověď patrně kvůli nekompatibilitě předávaných parametrů. Jinými slovy: co je ve funkci definováno jako typ Long, mělo by být ve volání datového typu UINT32. Nebo se mýlím?

nahlásit spamnahlásit spam 0 odpovědětodpovědět
Partial Public Class NativeMethods
    
    '''Return Type: BOOL->int
    '''lpRootPathName: LPCWSTR->WCHAR*
    '''lpVolumeNameBuffer: LPWSTR->WCHAR*
    '''nVolumeNameSize: DWORD->unsigned int
    '''lpVolumeSerialNumber: LPDWORD->DWORD*
    '''lpMaximumComponentLength: LPDWORD->DWORD*
    '''lpFileSystemFlags: LPDWORD->DWORD*
    '''lpFileSystemNameBuffer: LPWSTR->WCHAR*
    '''nFileSystemNameSize: DWORD->unsigned int
    <System.Runtime.InteropServices.DllImportAttribute("kernel32.dll", EntryPoint:="GetVolumeInformationW")>  _
    Public Shared Function GetVolumeInformationW(<System.Runtime.InteropServices.InAttribute(), System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.LPWStr)> ByVal lpRootPathName As String, <System.Runtime.InteropServices.OutAttribute(), System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.LPWStr)> ByVal lpVolumeNameBuffer As System.Text.StringBuilder, ByVal nVolumeNameSize As UInteger, ByVal lpVolumeSerialNumber As System.IntPtr, ByVal lpMaximumComponentLength As System.IntPtr, ByVal lpFileSystemFlags As System.IntPtr, <System.Runtime.InteropServices.OutAttribute(), System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.LPWStr)> ByVal lpFileSystemNameBuffer As System.Text.StringBuilder, ByVal nFileSystemNameSize As UInteger) As <System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.Bool)> Boolean
    End Function
End Class

http://www.vbnet.cz/BlogArticle.aspx?id=...

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Dobrý den,

a nebo pomocí System.Management

Příklad:

    Function GetHDDSerial(ByVal HDD_idx As Integer) As String
        Dim searcher As New System.Management.ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive")

        For Each wmi_HD As System.Management.ManagementObject In searcher.Get()
            If CInt(wmi_HD.Item("Index")) = HDD_idx Then
                Return wmi_HD.Item("Signature").ToString
            End If
        Next wmi_HD

        Return ""
    End Function

Jako parametr je pořadové číslo fyzického disku.

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback