Вот здесь обсуждалась данная панель, наконец решил реализовать. Строки взятые в коммент работают при установленно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