1

Тема: AHK: отслеживание подключения дисков

Скрипт отслеживает момент подключения/отключения диска:

OnMessage(0x219, "notify_change") ; WM_DEVICECHANGE
Return

notify_change(wParam, lParam, msg, hwnd)
{
    MsgBox, %wParam% %lParam% %msg% %hwnd%
}

Вывод подключенных съёмных дисков:

SetFormat, Integer, H
DriveGet, DrvList, List, Removable
Loop, Parse, DrvList
{
   DriveGet, DrvSerial, Serial, %A_Loopfield%:
   StringTrimLeft, DrvSerial, DrvSerial, 2
   StringUpper, DrvSerial, DrvSerial
   MsgBox, Serial Number of  %A_Loopfield%: is %DrvSerial%
}

Примеры опубликовал Wlad.

Предложения в русском языке начинаются с большой буквы и заканчиваются точкой.
В названии ветки всегда должен быть указан язык программирования или среда исполнения скрипта, если это возможно.

2

Re: AHK: отслеживание подключения дисков

Отслеживание события подключения/отключения диска и получение его буквы:

OnMessage(0x219, "WM_DEVICECHANGE")
return

EventHandling(drive, event)
{
   TrayTip, Диск %drive%:, %event%,, 1
}

WM_DEVICECHANGE(wp, lp)
{
   static DBT_DEVICEARRIVAL := 0x8000, DBT_DEVICEREMOVECOMPLETE := 0x8004, DBT_DEVTYP_VOLUME := 2
   
   if ((wp = DBT_DEVICEARRIVAL || wp = DBT_DEVICEREMOVECOMPLETE) && NumGet(lp+4, "UInt") = DBT_DEVTYP_VOLUME)
   {
      dbcv_unitmask := NumGet(lp+12, "UInt")
   
      Loop
         Letter := Chr(Asc("A") + A_Index - 1)
      until (dbcv_unitmask >> (A_Index - 1))&1
      
      EventHandling(Letter, wp = DBT_DEVICEARRIVAL ? "подключен" : "отключен")
   }
}

Информация:
WM_DEVICECHANGE
DEV_BROADCAST_VOLUME structure
Связанная тема

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg