Вот здесь обсуждалась данная панель, наконец решил реализовать. Строки взятые в коммент работают при установленноq проге Alcohol. Половина кода взята из кодархива, поэтому код смотрится сумбурно и я не стал ничего менять(прога небольшая, разобраться несложно). Спасибо Adrenalin за помощь.
Архив

Enumeration
#Window_0
#HDD
#CD
#USB
#FOLDER
EndEnumeration
Structure HiLow
lowlow.w
lowhi.w
hilow.w
hihi.w
EndStructure
Global NewList DISK.s()
Global NewList DISKCD.s()
Global NewList DISKZNACH.s()
Global NewList DISKCDZNACH.l()
Global aaa$
Global bbb$
Global FReeCD
Global FullCD
Global VKL
Global KOLA
DataSection
HDD:
IncludeBinary "HDD1.png"
CD:
IncludeBinary "CDR.png"
USB:
IncludeBinary "USB.png"
FOLDER:
IncludeBinary "folder.png"
EndDataSection
UsePNGImageDecoder()
ExamineDesktops()
Declare PROV()
Procedure.s GetFreeSpace(p$)
#div=10
#mask=(1<<#div)-1
#mul=16-#div
If Left(p$,2)="\\"
a=FindString(p$,"\",3)
Else
a=FindString(p$,"\",1)
EndIf
If a=0 : a=Len(p$) : EndIf
p$=Left(p$,a)
If GetDiskFreeSpaceEx_(@p$,@free.HiLow,@Total.HiLow,@TotalFree.HiLow)
hilow=Free\hilow&$ffff
hihi=Free\hihi&$ffff
lowlow=Free\lowlow&$ffff
lowhi=Free\lowhi&$ffff
hilow1=Total\hilow&$ffff
hihi1=Total\hihi&$ffff
lowlow1=Total\lowlow&$ffff
lowhi1=Total\lowhi&$ffff
p=1
While hihi>0 Or hilow>0 Or lowhi>0
lowlow=(lowlow>>#div)+((lowhi & #mask)<<#mul)
lowhi =(lowhi >>#div)+((hilow & #mask)<<#mul)
hilow =(hilow >>#div)+((hihi & #mask)<<#mul)
hihi =(hihi>>#div)
p+1
Wend
g=1
While hihi1>0 Or hilow1>0 Or lowhi1>0
lowlow1=(lowlow1>>#div)+((lowhi1 & #mask)<<#mul)
lowhi1 =(lowhi1 >>#div)+((hilow1 & #mask)<<#mul)
hilow1 =(hilow1 >>#div)+((hihi1 & #mask)<<#mul)
hihi1 =(hihi1>>#div)
g+1
Wend
If lowlow1>1024
bbb$= StrF(lowlow1/1024,2)+" "+StringField("Byte,KB,MB,GB,TB",g+1,",")
Else
bbb$= StrF(lowlow1,2)+" "+StringField("Byte,KB,MB,GB,TB",g,",")
EndIf
If lowlow>1024
aaa$= StrF(lowlow/1024,2)+" "+StringField("Byte,KB,MB,GB,TB",p+1,",")
Else
aaa$= StrF(lowlow,2)+" "+StringField("Byte,KB,MB,GB,TB",p,",")
EndIf
Else
aaa$="---"
EndIf
EndProcedure
Procedure VALCD(cdr.s)
SectorsPerCluster.q : BytesPerSector.q : NumberOfFreeClusters.q
SetErrorMode_(#SEM_FAILCRITICALERRORS)
GetDiskFreeSpaceEx_(cdr.s,@SectorsPerCluster,@BytesPerSector,@NumberOfFreeClusters)
FReeCD=(NumberOfFreeClusters)/1048576
FullCD=(BytesPerSector)/1048576
EndProcedure
Procedure Valuedisk()
bufflen = $FF
*memid = AllocateMemory(bufflen)
bufflen = GetLogicalDriveStrings_(bufflen,*memid)
i = 0
While i < bufflen
Lw.s = PeekS(*memid+i)
i + 4
LwT = GetDriveType_ (@Lw)
If Lw<>"A:\"
KOLA+1
If LwT = #DRIVE_CDROM
AddElement(DISKCD())
DISKCD()=Lw
ElseIf LwT = #DRIVE_FIXED Or LwT =#DRIVE_REMOVABLE Or LwT =#DRIVE_RAMDISK
AddElement(DISK())
DISK()=Lw
EndIf
EndIf
Wend
FreeMemory(*memid)
ProcedureReturn KOLA
EndProcedure
Procedure ValuediskREZ()
bufflen = $FF
*memid = AllocateMemory(bufflen)
bufflen = GetLogicalDriveStrings_(bufflen,*memid)
i = 0
While i < bufflen
Lw.s = PeekS(*memid+i)
i + 4
LwT = GetDriveType_ (@Lw)
If Lw<>"A:\"
KOL+1
EndIf
Wend
FreeMemory(*memid)
ProcedureReturn KOL
EndProcedure
Procedure OpenWindow_Window_0(KOLA)
If OpenWindow(#Window_0, DesktopWidth(0), 0, 140, KOLA*75+100, "Window_0", #PB_Window_BorderLess)
MakeToolWindow( WindowID(#Window_0), #True )
StickyWindow(#Window_0, 1)
SetWindowColor(#Window_0, RGB(212, 251, 183))
; If CreatePopupImageMenu(1)
; MenuItem(1, "Смонтировать образ")
; MenuItem(2,"Демонтировать образ")
; EndIf
HDDD=CatchImage(#HDD, ?HDD)
CDDD=CatchImage(#CD, ?CD)
FOLDERR=CatchImage(#FOLDER, ?FOLDER)
USB=CatchImage(#USB, ?USB)
b=25
c=1
e=10
d=20
ResetList(DISK())
For a=1 To ListSize(DISK())
NextElement(DISK())
lw.s=DISK()
If GetDriveType_ (@Lw)=#DRIVE_REMOVABLE Or GetDriveType_ (@Lw)=#DRIVE_RAMDISK
ButtonImageGadget(c,15,b,50,50,USB)
Else
ButtonImageGadget(c,15,b,50,50,HDDD)
EndIf
TextGadget(d,35,e,17,13,DISK(),#PB_Text_Center)
SetGadgetColor(d,#PB_Gadget_BackColor,RGB(212, 251, 183))
GetFreeSpace(DISK())
AddElement(DISKZNACH())
DISKZNACH()=bbb$
AddElement(DISKZNACH())
DISKZNACH()=aaa$
TextGadget(d+10,73,e+25,55,13,bbb$,#PB_Text_Center)
TextGadget(d+20,73,e+45,55,13,aaa$,#PB_Text_Center)
SetGadgetColor(d+10,#PB_Gadget_BackColor,RGB(212, 251, 183))
SetGadgetColor(d+20,#PB_Gadget_BackColor,RGB(212, 251, 183))
b+75
c+1
e+75
d+1
Next
ResetList(DISKCD())
For a=1 To ListSize(DISKCD())
ButtonImageGadget(c,15,b,50,50,CDDD)
NextElement(DISKCD())
TextGadget(d,35,e,17,13,DISKCD(),#PB_Text_Center)
SetGadgetColor(d,#PB_Gadget_BackColor,RGB(212, 251, 183))
VALCD(DISKCD())
AddElement(DISKCDZNACH())
DISKCDZNACH()=FullCD
AddElement(DISKCDZNACH())
DISKCDZNACH()=FReeCD
TextGadget(d+10,73,e+25,55,13,Str(FullCD)+" МБ",#PB_Text_Center)
TextGadget(d+20,73,e+45,55,13,Str(FReeCD)+" МБ",#PB_Text_Center)
SetGadgetColor(d+10,#PB_Gadget_BackColor,RGB(212, 251, 183))
SetGadgetColor(d+20,#PB_Gadget_BackColor,RGB(212, 251, 183))
b+75
c+1
e+75
d+1
Next
ButtonImageGadget(c,15,b+5,50,50,FOLDERR)
TextGadget(d,15,e+5,110,13,"МОИ ДОКУМЕНТЫ",#PB_Text_Center)
SetGadgetColor(d,#PB_Gadget_BackColor,RGB(212, 251, 183))
EndIf
EndProcedure
Procedure SBROS()
KillTimer_(WindowID(#Window_0), 1)
CloseWindow(#Window_0)
ClearList(DISK())
ClearList(DISKCD())
ClearList(DISKZNACH())
ClearList(DISKCDZNACH())
VKL=0
KOLA=0
KOLA=Valuedisk()
OpenWindow_Window_0(KOLA)
SetTimer_(WindowID(#Window_0), 1, 10, @PROV() )
EndProcedure
Procedure PROV1()
If ValuediskREZ()<>KOLA
SBROS()
ProcedureReturn
EndIf
ResetList(DISK())
ResetList(DISKZNACH())
For a=1 To ListSize(DISK())
NextElement(DISK())
NextElement(DISKZNACH())
GetFreeSpace(DISK())
If bbb$<>DISKZNACH()
SBROS()
ProcedureReturn
EndIf
NextElement(DISKZNACH())
If aaa$<>DISKZNACH()
SBROS()
ProcedureReturn
EndIf
Next
ResetList(DISKCD())
ResetList(DISKCDZNACH())
For a=1 To ListSize(DISKCD())
NextElement(DISKCD())
NextElement(DISKCDZNACH())
VALCD(DISKCD())
If FullCD<>DISKCDZNACH()
SBROS()
ProcedureReturn
EndIf
NextElement(DISKCDZNACH())
If FReeCD<>DISKCDZNACH()
SBROS()
ProcedureReturn
EndIf
Next
EndProcedure
Procedure PROV()
If VKL=0
If DesktopMouseX()>DesktopWidth(0)-5 And DesktopMouseY()<WindowHeight(#Window_0) And DesktopMouseY()>25
PROV1()
ResizeWindow(#Window_0, WindowX(#Window_0)-140 , #PB_Ignore, #PB_Ignore, #PB_Ignore)
VKL=1
EndIf
EndIf
If VKL=1
If DesktopMouseX()<DesktopWidth(0)-200 Or DesktopMouseY()>WindowHeight(#Window_0)+50
ResizeWindow(#Window_0, WindowX(#Window_0)+140 , #PB_Ignore, #PB_Ignore, #PB_Ignore)
VKL=0
EndIf
EndIf
EndProcedure
KOLA=Valuedisk()
OpenWindow_Window_0(KOLA)
SetTimer_(WindowID(#Window_0), 1, 10, @PROV() )
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_Gadget
Select EventGadget()
Case 1 To ListSize(DISK())
SelectElement(DISK(),GetActiveGadget()-1)
RunProgram(DISK())
Case ListSize(DISK()) To ListSize(DISK())+ListSize(DISKCD())
SelectElement(DISKCD(),GetActiveGadget()-ListSize(DISK())-1)
RunProgram(DISKCD())
Case ListSize(DISK())+ListSize(DISKCD())+1
RunProgram(GetHomeDirectory()+"Documents")
EndSelect
; Case #WM_RBUTTONDOWN
; If DesktopMouseY()>250 And DesktopMouseY()<300
; DisplayPopupMenu(1, WindowID(#Window_0))
; EndIf
; Case #PB_Event_Menu
; Select EventMenu()
; Case 1
; put.s=OpenFileRequester("","","Файлы образов|*.bwt;*.b5t;*.b6t;*.ccd;*.cdi;*.pdi;*.iso;*.isz;*.mds;*.mdx;*.nrg;*.cue",0)
; If put
; RunProgram("C:\Program Files\Alcohol Soft\Alcohol 52\AxCmd.exe ", "F: /M:"+put,"")
; EndIf
; Case 2
; RunProgram("C:\Program Files\Alcohol Soft\Alcohol 52\AxCmd.exe ", "F: /U","")
; EndSelect
EndSelect
ForEver
