CD или DVD

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 12.05.2006 (Пт) 16:45

Konst_One писал(а):WBEM ODBC Driver надо поставить из сетапа (искать на сайте мелкософта)

Они его обсолетнули, причем довольно давно. Лучше в референсах к проекту подключить Microsoft WMI Scripting V1.x Library (1.1 для винтукея, 1.2 для XP/2003, кажется, хотя это как раз апдейтится без проблем) и работать как со стандартным WMI. Селекты там те же самые будут, во всяком случае.

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 12.05.2006 (Пт) 17:07

если XP/2003 , то можно сразу через Win32_PhysicalMedia

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 12.05.2006 (Пт) 17:12

добьем тему:

Код: Выделить всё
On Error Resume Next

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colItems = objWMIService.ExecQuery("Select * from Win32_CDROMDrive")

For Each objItem in colItems
    Wscript.Echo "Availability: " & objItem.Availability
    For Each strCapability in objItem.Capabilities
        Wscript.Echo "Capability: "& strCapability
    Next
    Wscript.Echo "Caption: " & objItem.Caption
    Wscript.Echo "Description: " & objItem.Description
    Wscript.Echo "Device ID: " & objItem.DeviceID
    Wscript.Echo "Drive: " & objItem.Drive
    Wscript.Echo "Manufacturer: " & objItem.Manufacturer
    Wscript.Echo "Media Loaded: " & objItem.MediaLoaded
    Wscript.Echo "Media Type: " & objItem.MediaType
    Wscript.Echo "Name: " & objItem.Name
    Wscript.Echo "PNP Device ID: " & objItem.PNPDeviceID
    Wscript.Echo "SCSI Bus: " & objItem.SCSIBus
    Wscript.Echo "SCSI Logical Unit: " & objItem.SCSILogicalUnit
    Wscript.Echo "SCSI Port: " & objItem.SCSIPort
    Wscript.Echo "SCSI Target ID: " & objItem.SCSITargetId
Next



vbskb_cd vbskb_cdrom vbskv_dvd vbskb_dvdrom vbskb_drive vbskb_wmi

GRS
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 186
Зарегистрирован: 29.02.2004 (Вс) 22:23
Откуда: Казахстан, Алматы

Сообщение GRS » 15.05.2006 (Пн) 17:59

Спрашивали, как определить вставлен ли CD.

Модуль:
Код: Выделить всё
Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Const GWL_WNDPROC = (-4)
Public Const WM_DEVICECHANGE = &H219
Public glngPrevWndProc As Long

Public Function MyWindowProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    If Msg = WM_DEVICECHANGE Then
    Select Case wParam
    ' Событие возникает при появлении нового диска в CD-ROM'е.
    Case &H8000&
    Call Form1.DeviceArrival
    ' Событие возникает при изъятии диска из CD-ROM'а
    Case &H8004&
    Call Form1.DeviceRemoveComplete
    End Select
    MyWindowProc = 0
    Exit Function
    End If
    ' остальные сообщения передаются для обработки стандартной процедуре окна
    MyWindowProc = CallWindowProc(glngPrevWndProc, hwnd, Msg, wParam, lParam)
End Function


Форма:

Код: Выделить всё
Private Sub Form_Load()
    ' Перенаправление сообщений Windows от формы к собственной
    ' процедуре обработки сообщений Module1.MyWindowProc
    glngPrevWndProc = GetWindowLong(hwnd, GWL_WNDPROC)
    SetWindowLong hwnd, GWL_WNDPROC, AddressOf MyWindowProc
End Sub

Private Sub Form_Unload(Cancel As Integer)
    ' Возвращение управления форме
    SetWindowLong hwnd, GWL_WNDPROC, glngPrevWndProc
End Sub

Sub DeviceArrival()
    ' Здесь вы можете поместить код, который будет выполнятся при
    ' появление компакт-диска в устройстве CD-ROM
End Sub

Sub DeviceRemoveComplete()
    ' Здесь вы можете поместить код, который будет выполнятся при
    ' удалении компакт-диска из устройства CD-ROM
End Sub
Встану рано утром, выпью чашку ртути... Всё равно я сдохну в этом институте...

Saturn.65
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 543
Зарегистрирован: 13.10.2006 (Пт) 18:46

Сообщение Saturn.65 » 14.10.2006 (Сб) 10:47

GRS
Огромное спасибо!!! Все работает. Есть ведь добрые люди! А то спрашивают зачем тебе код? Вместо того чтоб его просто написать. :D

Пред.

Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 52

    TopList