Тема: AHK: Плеер
Решил сделать универсальное окошко с текстами песен.
Сюда же нужны и возможности включить, выключить, поставить на паузу, промотать музыку..
Вобщем-то, полноценный плеер нужен.
К своему удивлению, библиотек для плееров на ahk не нашел.
Да, есть SoundPlay, но SoundPause нету, не думаю что это подойдет.
К тому же, душа жаждет ту заветную плеерскую полосочку
Есть у кого пример уже написанного плеера?
Пока что перебиваюсь фоновым AIMP-ом
Вот что получилось:
#NoEnv
#Include C:\Program Files\AutoHotkey\Gdip.ahk
#IfWinActive, Kroke2
Size:=30
Spac:=Size+5
If !pToken := Gdip_Startup()
{
MsgBox, 48, gdiplus error!, Gdiplus failed to start. Please ensure you have gdiplus on your system
ExitApp
}
Gui, Kroke2: +E0x80000 +LastFound +OwnDialogs -Caption ;-AlwaysOnTop +ToolWindow
Gui, Kroke2:Show,,Kroke2
hwnd1 := WinExist()
hbm := CreateDIBSection(A_ScreenWidth, A_ScreenHeight)
hdc := CreateCompatibleDC()
obm := SelectObject(hdc, hbm)
G := Gdip_GraphicsFromHDC(hdc)
;
Gdip_SetSmoothingMode(G, 0)
pBrushYellow :=Gdip_BrushCreateSolid("0xffbbbb00")
pBrushBlack :=Gdip_BrushCreateSolid("0xff000000")
EscapeNope:=0
Names:=[]
loop,%A_ScriptDir%\*.mp3
{
Names.push(A_LoopFileName)
nNames++
}
MainDY:=0
St:
Gdip_GraphicsClear(G, 0xff000000)
for k, v in Names
Gdip_TextToGraphics(G, "| " substr(v,1,-4),"x100 y" 50+(A_Index-1)*Spac-MainDY*spac " cffaaaaaa s" Size) ;cffbbbb00
SquarePos:=1
UpdateLayeredWindow(hwnd1, hdc, 0, 0, A_ScreenWidth, A_ScreenHeight)
OnMessage(0x200, "WM_MOUSEMOVE")
Return
WM_MOUSEMOVE()
{
global
MouseGetPos, mx, my
if (mx<100 or mx>A_ScreenWidth-100 or my<50 or (my-50)//Spac+1+MAINDY>nNames)
Return
pSquarePos:=SquarePos
SquarePos:=(my-50)//Spac+1+MAINDY
if (pSquarePos!=SquarePos)
{
Gdip_FillRectangle(G, pBrushBlack, 0, 53+(SquarePos-1-MAINDY)*Spac, A_ScreenWidth, size+4)
Gdip_FillRectangle(G, pBrushBlack, 0, 53+(pSquarePos-1-MAINDY)*Spac, A_ScreenWidth, size+4)
Gdip_TextToGraphics(G, "| " substr(Names[SquarePos],1,-4) ,"x110 y" 50+(SquarePos-1-MAINDY)*Spac " cffbbbb00 s" Size) ;cffbbbb00
Gdip_TextToGraphics(G, "| " substr(Names[pSquarePos],1,-4) ,"x100 y" 50+(pSquarePos-1-MAINDY)*Spac " cffaaaaaa s" Size) ;cffbbbb00
UpdateLayeredWindow(hwnd1, hdc, 0, 0, A_ScreenWidth, A_ScreenHeight)
}
}
LButton::
if EscapeNope=0
Run, % Names[SquarePos]
; SoundPlay, % Names[SquarePos]
Return
Space::
if EscapeNope=1
Run, % Names[SquarePos]
Return
RButton::
Gdip_GraphicsClear(G, 0xff000000)
FileRead, lyrics, % substr(Names[SquarePos],1,-4) ".txt"
yst:=0
maxyst:=-spac*15
loop,parse,lyrics,`n
maxyst+=spac
Gdip_TextToGraphics(G, lyrics,"x100 y" 50+(A_Index-1)*Spac-yst " cffbbbb00 s" Size) ;cffbbbb00
UpdateLayeredWindow(hwnd1, hdc, 0, 0, A_ScreenWidth, A_ScreenHeight)
OnMessage(0x200, "WM_MOUSEMOVE",0)
Hotkey, LButton, MinusTime
Hotkey, RButton, PlusTime
EscapeNope:=1
Return
Lyrics:
Gdip_GraphicsClear(G, 0xff000000)
Gdip_TextToGraphics(G, lyrics,"x100 y" 50+(A_Index-1)*Spac-yst " cffbbbb00 s" Size) ;cffbbbb00
UpdateLayeredWindow(hwnd1, hdc, 0, 0, A_ScreenWidth, A_ScreenHeight)
Return
MButton::Media_Play_Pause
Escape::
if EscapeNope=0
ExitApp
else
{
EscapeNope:=0
Hotkey, LButton, LButton
Hotkey, RButton, RButton
goto st
}
Return
PlusTime:
Send,^!{Volume_Up}
Return
MinusTime:
Send,^!{Volume_Down}
Return
^WheelUp::
if (size<50)
{
Size++
Spac:=Size+5
}
if EscapeNope=0
goto st
if EscapeNope=1
goto Lyrics
Return
^WheelDown::
if (size>14)
{
Size--
Spac:=Size+5
}
if EscapeNope=0
goto st
if EscapeNope=1
goto Lyrics
Return
WheelDown::
if EscapeNope=1
{
if (yst<maxyst)
yst+=spac*2
goto Lyrics
}
Else
{
MainDY++
goto st
}
Return
WheelUp::
if EscapeNope=1
{
if (yst>0)
yst-=spac*2
goto Lyrics
}
Else if MainDY>0
{
MainDY--
goto st
}
Return
Для работы нужно закинуть в папку со скриптом mp3 и txt файлы с одинаковым именем. (MyMysic.mp3, MyMysic.txt)
А там, потыкаете и разберетесь.