.NET 4.x Конвертировать с Delphi на VB.NET. Код определения флешки - Visual Basic .NET

Узнай цену своей работы

Формулировка задачи:

Всем доброго времени суток!

Знатоки! Помогите конвертировать этот код написанный на DELPHI в Vb.net...ну, пожалуйста. Мне, собственно, нужно узнать вставлена флешка или нет.
Листинг программы
  1. //...............
  2. private
  3. procedure WMDeviceChange(var Msg: TMessage); message WM_DeviceChange;
  4. //...............
  5. const
  6. DBT_DeviceArrival = $8000;
  7. DBT_DeviceRemoveComplete = $8004;
  8. type
  9. PDevBroadcastVolume = ^TDevBroadcastVolume; //Если честно не помню точно, но помоему эта структура описана не полностью...
  10. TDevBroadcastVolume = packed record
  11. dbcv_size: DWORD;
  12. dbcv_devicetype: DWORD;
  13. dbcv_reserved: DWORD;
  14. dbcv_unitmask: DWORD;
  15. dbcv_flags: Word;
  16. end;
  17. function GetDrive(pDBVol: PDevBroadcastVolume): string;
  18. //...............
  19. function GetDrive(pDBVol: PDevBroadcastVolume): string; //Получаем букву драйва из структуры PDevBroadcastVolume
  20. var
  21. i: Byte;
  22. Maske: DWORD;
  23. begin
  24. Maske := pDBVol^.dbcv_unitmask;
  25. for i := 0 to 25 do begin
  26. if (Maske and 1) = 1 then Result := Char(i + Ord('A')) + ':';
  27. Maske := Maske shr 1;
  28. end;
  29. end;
  30. procedure TForm1.WMDeviceChange(var Msg: TMessage); //собственно ловим инсерт/еджект драйвов
  31. var
  32. Drive: string;
  33. begin
  34. Application.ProcessMessages;
  35. if Msg.wParam = DBT_DeviceArrival then begin //если засунули
  36. Drive := GetDrive(PDevBroadcastVolume(Msg.lParam));
  37. ShowMessage(Drive);
  38. end
  39. else if Msg.wParam = DBT_DeviceRemoveComplete then begin //если выдернули
  40. Drive := GetDrive(PDevBroadcastVolume(Msg.lParam));
  41. ShowMessage(Drive);
  42. end;
  43. end;

Решение задачи: «.NET 4.x Конвертировать с Delphi на VB.NET. Код определения флешки»

textual
Листинг программы
  1. Public Class Form1
  2.  
  3.     Public Delegate Sub dHookSub(ByVal msg As System.Windows.Forms.Message)
  4.  
  5.     Private Const DBT As Int32 = &H219 '537
  6.     Private Const DBT_Device_Arrival As Int32 = &H8000
  7.     Private Const DBT_Device_Remove_Complete = &H8004
  8.  
  9.     Public Structure sPMSG
  10.  
  11.         Public d As dHookSub
  12.         Public Msg As Int32
  13.  
  14.         Public Sub New(ByVal d As dHookSub, Msg As Int32)
  15.  
  16.             Me.d = d
  17.             Me.Msg = Msg
  18.  
  19.         End Sub
  20.  
  21.     End Structure
  22.  
  23.     Private Class cWinMessages
  24.         Inherits NativeWindow
  25.  
  26.         Public checks As List(Of sPMSG) = Nothing
  27.  
  28.         Public Sub New(ByVal Parent As Form)
  29.  
  30.             Me.checks = New List(Of sPMSG)
  31.  
  32.             AddHandler Parent.HandleCreated, AddressOf Me.OnHandleCreated
  33.             AddHandler Parent.HandleDestroyed, AddressOf Me.OnHandleDestroyed
  34.  
  35.             If Me.Handle <> Parent.Handle Then AssignHandle(CType(Parent, Form).Handle)
  36.  
  37.         End Sub
  38.  
  39.         Private Sub OnHandleCreated(ByVal sender As Object, ByVal e As EventArgs)
  40.  
  41.             AssignHandle(CType(sender, Form).Handle)
  42.  
  43.         End Sub
  44.  
  45.         Private Sub OnHandleDestroyed(ByVal sender As Object, ByVal e As EventArgs)
  46.  
  47.             ReleaseHandle()
  48.  
  49.         End Sub
  50.  
  51.         Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
  52.  
  53.             MyBase.WndProc(m)
  54.  
  55.             Dim Msg As Int32 = m.Msg
  56.  
  57.             For i As Int32 = Me.checks.Count - 1 To 0 Step -1
  58.  
  59.                 If (Me.checks(i).Msg = Msg) Then Me.checks(i).d(m)
  60.  
  61.             Next
  62.  
  63.         End Sub
  64.  
  65.     End Class
  66.  
  67.     Private wm As cWinMessages = Nothing
  68.  
  69.     Private Sub Flash(ByVal m As System.Windows.Forms.Message)
  70.  
  71.         Dim WParam As Int32 = m.WParam.ToInt32
  72.  
  73.         If WParam = DBT_Device_Arrival Then MsgBox("Добавили флешку", MsgBoxStyle.Information)
  74.  
  75.         If WParam = DBT_Device_Remove_Complete Then MsgBox("Вынули флешку", MsgBoxStyle.Information)
  76.  
  77.     End Sub
  78.  
  79.     Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  80.  
  81.         Me.Show()
  82.  
  83.         Me.wm = New cWinMessages(Me)
  84.  
  85.         Me.wm.checks.Add(New sPMSG(AddressOf Me.Flash, DBT))
  86.  
  87.     End Sub
  88.  
  89. End Class

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.125 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы