.NET 4.x Конвертировать с Delphi на VB.NET. Код определения флешки - Visual Basic .NET
Формулировка задачи:
Всем доброго времени суток!
Знатоки! Помогите конвертировать этот код написанный на DELPHI в Vb.net...ну, пожалуйста. Мне, собственно, нужно узнать вставлена флешка или нет.
Листинг программы
- //...............
- private
- procedure WMDeviceChange(var Msg: TMessage); message WM_DeviceChange;
- //...............
- const
- DBT_DeviceArrival = $8000;
- DBT_DeviceRemoveComplete = $8004;
- type
- PDevBroadcastVolume = ^TDevBroadcastVolume; //Если честно не помню точно, но помоему эта структура описана не полностью...
- TDevBroadcastVolume = packed record
- dbcv_size: DWORD;
- dbcv_devicetype: DWORD;
- dbcv_reserved: DWORD;
- dbcv_unitmask: DWORD;
- dbcv_flags: Word;
- end;
- function GetDrive(pDBVol: PDevBroadcastVolume): string;
- //...............
- function GetDrive(pDBVol: PDevBroadcastVolume): string; //Получаем букву драйва из структуры PDevBroadcastVolume
- var
- i: Byte;
- Maske: DWORD;
- begin
- Maske := pDBVol^.dbcv_unitmask;
- for i := 0 to 25 do begin
- if (Maske and 1) = 1 then Result := Char(i + Ord('A')) + ':';
- Maske := Maske shr 1;
- end;
- end;
- procedure TForm1.WMDeviceChange(var Msg: TMessage); //собственно ловим инсерт/еджект драйвов
- var
- Drive: string;
- begin
- Application.ProcessMessages;
- if Msg.wParam = DBT_DeviceArrival then begin //если засунули
- Drive := GetDrive(PDevBroadcastVolume(Msg.lParam));
- ShowMessage(Drive);
- end
- else if Msg.wParam = DBT_DeviceRemoveComplete then begin //если выдернули
- Drive := GetDrive(PDevBroadcastVolume(Msg.lParam));
- ShowMessage(Drive);
- end;
- end;
Решение задачи: «.NET 4.x Конвертировать с Delphi на VB.NET. Код определения флешки»
textual
Листинг программы
- Public Class Form1
- Public Delegate Sub dHookSub(ByVal msg As System.Windows.Forms.Message)
- Private Const DBT As Int32 = &H219 '537
- Private Const DBT_Device_Arrival As Int32 = &H8000
- Private Const DBT_Device_Remove_Complete = &H8004
- Public Structure sPMSG
- Public d As dHookSub
- Public Msg As Int32
- Public Sub New(ByVal d As dHookSub, Msg As Int32)
- Me.d = d
- Me.Msg = Msg
- End Sub
- End Structure
- Private Class cWinMessages
- Inherits NativeWindow
- Public checks As List(Of sPMSG) = Nothing
- Public Sub New(ByVal Parent As Form)
- Me.checks = New List(Of sPMSG)
- AddHandler Parent.HandleCreated, AddressOf Me.OnHandleCreated
- AddHandler Parent.HandleDestroyed, AddressOf Me.OnHandleDestroyed
- If Me.Handle <> Parent.Handle Then AssignHandle(CType(Parent, Form).Handle)
- End Sub
- Private Sub OnHandleCreated(ByVal sender As Object, ByVal e As EventArgs)
- AssignHandle(CType(sender, Form).Handle)
- End Sub
- Private Sub OnHandleDestroyed(ByVal sender As Object, ByVal e As EventArgs)
- ReleaseHandle()
- End Sub
- Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
- MyBase.WndProc(m)
- Dim Msg As Int32 = m.Msg
- For i As Int32 = Me.checks.Count - 1 To 0 Step -1
- If (Me.checks(i).Msg = Msg) Then Me.checks(i).d(m)
- Next
- End Sub
- End Class
- Private wm As cWinMessages = Nothing
- Private Sub Flash(ByVal m As System.Windows.Forms.Message)
- Dim WParam As Int32 = m.WParam.ToInt32
- If WParam = DBT_Device_Arrival Then MsgBox("Добавили флешку", MsgBoxStyle.Information)
- If WParam = DBT_Device_Remove_Complete Then MsgBox("Вынули флешку", MsgBoxStyle.Information)
- End Sub
- Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
- Me.Show()
- Me.wm = New cWinMessages(Me)
- Me.wm.checks.Add(New sPMSG(AddressOf Me.Flash, DBT))
- End Sub
- End Class
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д