Форум вверху этого раздела писал(а):Этот раздел не предназначен для того, чтобы вы адресовали свою проблему профессионалам.
Этот раздел предназначен для профессионалов, которые столкнулись с проблемой и не могут решить ее самостоятельно.
Если захотеть — будет.WMI в Windows 98 нет.
Public Function GetFlashID() As String
Dim obj As Object, objs As Object, PnPID As String
Set objs = GetObject("winmgmts:").InstancesOf("Win32_DiskDrive")
For Each obj In objs
If obj.InterfaceType = "USB" Then PnPID = obj.PnPDeviceID
Next
GetFlashID = Replace(Mid(PnPID, InStrRev(PnPID, "\") + 1), "&0", "")
End Function
aleksmir писал(а):Как узнать серийник флэшки, на которой она в данный момент расположена (ну на которой сам файл exe)?
trash писал(а):Я пользовался такой функцией:
- Код: Выделить всё
Public Function GetFlashID() As String
Dim obj As Object, objs As Object, PnPID As String
Set objs = GetObject("winmgmts:").InstancesOf("Win32_DiskDrive")
For Each obj In objs
If obj.InterfaceType = "USB" Then PnPID = obj.PnPDeviceID
Next
GetFlashID = Replace(Mid(PnPID, InStrRev(PnPID, "\") + 1), "&0", "")
End Function
Собственно, выделенный участок в строке "USBSTOR\DISK&VEN_GENERIC&PROD_USB_FLASH_DISK&REV_0.00\200704C3A4F6BA&0" и есть серийный номер флешки.
Еще его можно найти в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB\Vid_058f&Pid_6387\, там будет список из серийников.
Xcode писал(а):aleksmir писал(а):Как узнать серийник флэшки, на которой она в данный момент расположена (ну на которой сам файл exe)?
Узнать путь до файла, выделить имя диска.
djalex777 писал(а):App.Path?
Хакер писал(а):А кому это нафиг нужно?
Хакер писал(а):Если только тебе нужно, чтобы программа запускалась только с флешки, следи за собой и запускай её только с флешки.
aleksmir писал(а):Теперь нужна фунция API, чтобы узнать букву диска, которая относятся к флэшке с серийным номером 12345.
Private Sub Form_Load()
Me.AutoRedraw = True
strComputer = "."
Set objSWbemService = GetObject("winmgmts:\\" & strComputer & "\ROOT\CIMV2")
Set wmiDiskDrives = objSWbemService.ExecQuery("SELECT * FROM Win32_DiskDrive")
For Each wmiDiskDrive In wmiDiskDrives
If wmiDiskDrive.InterfaceType = "USB" Then 'IDE
Print "USB диск:", wmiDiskDrive.Model
Print "Size:", wmiDiskDrive.Size & " Байт"
PnPID = wmiDiskDrive.PnPDeviceID
Print "Заводской номер:", Replace(Mid(PnPID, InStrRev(PnPID, "\") + 1), "&0", "")
strEscapedDeviceID = Replace(wmiDiskDrive.DeviceID, "\", "\\", 1, -1, vbTextCompare)
Set wmiDiskPartitions = objSWbemService.ExecQuery _
("ASSOCIATORS OF {Win32_DiskDrive.DeviceID=""" & _
strEscapedDeviceID & """} WHERE AssocClass = " & _
"Win32_DiskDriveToDiskPartition")
For Each wmiDiskPartition In wmiDiskPartitions
Set wmiLogicalDisks = objSWbemService.ExecQuery _
("ASSOCIATORS OF {Win32_DiskPartition.DeviceID=""" & _
wmiDiskPartition.DeviceID & """} WHERE AssocClass = " & _
"Win32_LogicalDiskToPartition")
For Each wmiLogicalDisk In wmiLogicalDisks
Print "Логический диск:", wmiLogicalDisk.DeviceID
Next
Next
End If
Next
End Sub
awl100Alex писал(а):Никакие API не надо. Эту задачу можно решить тем же WMI, например, так...
trash писал(а):Еще его можно найти в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB\Vid_058f&Pid_6387\, там будет список из серийников.
0xy писал(а):aleksmir Думаю, Вам проще проверять валидность номерка флешки, прежде чем строить на нем защиту.
А кому это нафиг нужно?
Зачем такая дурь может быть нужна?
alex77755 писал(а):Очень полезные и вразумительные ответы
iGrok писал(а):awl100alex у нас славится своими решениями несуществующих проблем через задницу, alex77755 к нему, в последнее время, приближается по этой же характеристике...
iGrok писал(а):Вы вообще осознаёте, что это(такая привязка/защита) ломается за 5 секунд...
iGrok писал(а):Вы вообще осознаёте, что это(такая привязка/защита) ломается за 5 секунд, и мало того, будет работать далеко не у каждого пользователя?
awl100Alex писал(а):уже оскорбление
двух(!)
Сейчас этот форум просматривают: AhrefsBot, Google-бот, Yandex-бот и гости: 14