Список разделов › foobar2000 › Секреты foobar2000
Запускаем foobar2000_v1.3.8.exe из папки D:seriousstas:можно-ли при помощи wsh на кнопку повесить запуск exe-шника
var WshShell = new ActiveXObject("WScript.Shell");
function on_mouse_lbtn_up(x,y){
try {
WshShell.Run("d:\\foobar2000_v1.3.8.exe");
} catch(e) {};
}
У меня "толку не хватает" . . .Yurnikos:вопрос на засыпку
Спасибо , понял , а как правильно связать с PSS и будет-ли работать изапускаем foobar2000_v1.3.8.exe из папки D:
Тут уже обсуждалось.seriousstas:связать с PSS
Именно так, для меня. Но не принципиально, кому-то "захочется" наоборотkgena_ua:в одну линию слева сик а справа громкость...
Не получается только из WSH , а из сборки кнопкой работает ?запуск Shift.exe - открывается panel settings - как и должно быть,
а вот с TAB.exe что-то не выходит, не хочет открываться panel playlists.
#NoTrayIcon
ControlFocus, uie_wsh_panel_mod_class6,, Analog VU Meter
Send {TAB}
// ==PREPROCESSOR==
// @name "properties"
// @author "kgena_ua"
// ==/PREPROCESSOR==
function RGB(r, g, b) {
return (0xff000000 | (r << 16) | (g << 8) | (b));
}
var tfarray = [];
var codes = new Array ();
var g_tooltip = window.CreateTooltip();
var ttText = "";
g_tooltip.SetMaxWidth(300);
var g_font = gdi.Font("Areal",12,0);
var g_font2 = gdi.Font("Tahoma",10,0);
DT_LEFT = 0x00000000;
DT_CENTER = 0x00000001;
DT_RIGHT = 0x00000002;
DT_WORD_ELLIPSIS = 0x00040000;
DT_SINGLELINE = 0x00000020;
//var color1 = RGB(140,164,179);
var color1 = RGB(140,140,140);
var color2 = RGB(255,255,225);
var color3 = RGB(90,90,90);
var ww, wh;
window.GetProperty("skip",0);
var name, value, measure, t_height;
var path = "", title;
var g_drag = false;
var g_drag_y = 0;
var s = 0;
var col1 = 10;
var col2 = 110;
var col3;
var metadb;
on_item_focus_change();
function on_paint(gr) {
gr.FillSolidRect (0, 0, ww, wh, RGB(30,30,30));
tfarray = [];
for (j = 0; j < tfname.length; j++) {
group = false;
if (tfname[j].search('group') >= 0 || tfname[j] == "\r\n" ) group = true;
if (path.substr(0,4) == "http" || path.substr(0,4) == "mms:") {
value = fb.TitleFormat("[" + tfname[j] + "]").Eval();
} else {
value = fb.TitleFormat("[" + tfname[j] + "]").EvalWithMetadb(metadb);
}
if ( window.GetProperty("skip") == 1) {
if (value || group) tfarray.push(tfname[j]);
} else {
tfarray.push(tfname[j]);
}
}
t_height = gr.CalcTextHeight("text", g_font) + 2;
codes = [];
for (i = 0; i < tfarray.length; i++) {
group = false;
measure = "";
row = i * t_height + s;
if (tfarray[i].search('group') >= 0) group = true;
name = tfarray[i].replace(/[%\$\(\)]|info|meta|group |lastfm/g,'').replace(/_/g,' ');
if (path.substr(0,4) == "http" || path.substr(0,4) == "mms:") {
value = fb.TitleFormat("[" + tfarray[i] + "]").Eval();
} else {
value = fb.TitleFormat("[" + tfarray[i] + "]").EvalWithMetadb(metadb);
}
if (name && value){
if (tfarray[i] == "$info(bitrate)") measure = "kbps";
if (tfarray[i] == "$info(samplerate)") measure = "Hz";
if (tfarray[i] == "$info(bitspersample)") measure = "bps";
if (tfarray[i] == "$info(channels)") measure = "ch";
if (tfarray[i] == "$meta(rating)") measure = "(tag)";
}
line_row = row - t_height / 2;
if (group) gr.DrawLine(col1, line_row, ww - col1, line_row, 1, color3);
gr.GdiDrawText(name, group ? g_font2 : g_font, group ? color3 : color1, col1, row, ww - col1 * 2, wh, DT_LEFT | DT_WORD_ELLIPSIS);
// t_width1 = gr.CalcTextWidth(name + " ", g_font);
t_width2 = gr.CalcTextWidth(value, g_font);
col3 = col2 + t_width2 + 5;
if (t_width2 > ww - col2 - col1) { codes.push(row,'"' + tfarray[i] + '"')};
gr.GdiDrawText(value, g_font, color2, col2, row, ww - col2 - col1, wh, DT_LEFT | DT_WORD_ELLIPSIS | DT_SINGLELINE);
gr.GdiDrawText(measure, g_font, color1, col3, row, ww - col3 - col1, wh, DT_LEFT | DT_WORD_ELLIPSIS);
}
g_tooltip.Text = ttText;
if (ttText) g_tooltip.Activate();
}
function on_mouse_lbtn_down(x, y) {
g_drag = true;
g_drag_y = (y - s);
}
function on_mouse_lbtn_up(x, y) {
g_drag = false;
}
function on_mouse_move(x, y) {
window.SetCursor(32649);
ttText = "";
for (i = 0; i < codes.length; i = i + 2) {
if (y > codes[i] && y < codes[i] + t_height && x > col2) {
if (path.substr(0,4) == "http" || path.substr(0,4) == "mms:") {
ttText = fb.TitleFormat("[" + codes[i + 1] + "]").Eval();
} else {
ttText = fb.TitleFormat("[" + codes[i + 1] + "]").EvalWithMetadb(metadb);
}
}
}
if (g_drag) {
if (s <= 0 && (tfarray.length * t_height) >= wh) {s = y - g_drag_y};
applyDelta();
}
}
function on_mouse_wheel(step) {
if (s <= 0 && tfarray.length * t_height >= wh) {s = s + step * t_height};
applyDelta();
}
function applyDelta() {
s = s > 0 ? 0 : s;
s = s < (wh - tfarray.length * t_height) && s < 0? (wh - tfarray.length * t_height) : s;
window.Repaint();
}
function on_mouse_leave() {
window.SetCursor(32512);
g_tooltip.Deactivate();
window.Repaint();
}
function on_metadb_changed() {
path = fb.Titleformat("%path%").EvalWithMetadb(metadb);
title = fb.Titleformat("%title%").EvalWithMetadb(metadb);
}
function on_item_focus_change() {
metadb = fb.IsPlaying ? fb.GetNowPlaying() : fb.GetFocusItem() ,true;
if (metadb) on_metadb_changed();
window.Repaint();
}
function on_playback_new_track(metadb) {
on_item_focus_change();
}
function on_playback_time(time){
on_item_focus_change();
}
function on_selection_changed(metadb) {
on_item_focus_change();
}
function on_playlist_switch() {
on_item_focus_change();
}
function on_size() {
ww = window.Width;
wh = window.Height;
if (s < 0) s = 0;
}
function on_mouse_rbtn_up (x, y){
var _menu = window.CreatePopupMenu();
var i = 1;
MF_ENABLED = 0x00000000;
MF_GRAYED = 0x00000001;
_menu.AppendMenuItem(MF_ENABLED, 1, "skip if empty");
_menu.CheckMenuItem(1, window.GetProperty("skip"));
ShiftDown = utils.IsKeyPressed(0x10) ? true : false;
if (ShiftDown) {
_menu.AppendMenuItem(0x00000800, 0, 0);
_menu.AppendMenuItem(0x00000000, 10, "Reload");
_menu.AppendMenuItem(0x00000800, 0, 0);
_menu.AppendMenuItem(0x00000000, 20, "Properties");
_menu.AppendMenuItem(0x00000000, 30, "Configure ...");
}
ret = _menu.TrackPopupMenu(x,y);
switch (ret) {
case 1:
window.SetProperty("skip", window.GetProperty("skip") == 0 ? 1 : 0);
break;
case 10:
window.Reload();
break;
case 20:
window.ShowProperties();
break;
case 30:
window.ShowConfigure();
break;
}
_menu.Dispose();
return true;
}
var tfname = new Array(
"%artist%",
"%title%",
"%album%",
"%date%",
"%genre%",
"%composer%",
"%performer%",
"%publisher%",
"%album artist%",
"%track number%",
"%totaltracks%",
"%discnumber%",
"%totaldiscs%",
"%comment%",
"%rating%",
"$meta(rating)",
"\r\n",
"group G E N E R A L",
"$info(samplerate)",
"$info(channels)",
"$info(bitspersample)",
"$info(bitrate)",
"%codec%",
"$info(codec_profile)",
"$info(encoding)",
"%length%",
"$info(tool)",
"$info(cue_embedded)",
"\r\n",
"group L O C A T I O N",
"%filename_ext%",
"%path%",
"%subsong%",
"%filesize_natural%",
"%last_modified%",
"%folder name%",
"\r\n",
"group P L A Y B A C K S T A T I S T I C S",
"%play_count%",
"%first_played%",
"%last_played%",
"%added%",
"\r\n",
"group L a s t F M",
"%lastfm_bio%",
"%lastfm_similar_artist%",
"%lastfm_artist_playcount%",
"%lastfm_artist_listeners%",
"%lastfm_album_playcount%",
"%lastfm_album_listeners%",
"%lastfm_album_content%"
);
// plmanager status
var fso = new ActiveXObject("Scripting.FileSystemObject");
if(!fso.FolderExists( fb.ProfilePath + "settings")) {fso.CreateFolder( fb.ProfilePath + "settings" )};
var set_path = fb.ProfilePath + "\\settings\\";
var is_plmanager = 0;
if(fso.FileExists( set_path + "plmanager_1")) {
fso.deleteFile( set_path + "plmanager_" + "*" );
fso.CreateTextFile( set_path + "plmanager_0" )
}
#NoTrayIcon
#SingleInstance force
SetWorkingDir %A_ScriptDir%
IfExist, %A_WorkingDir%\plmanager_0
{
ControlFocus, uie_wsh_panel_mod_class7, ahk_class {E7076D1C-A7BF-4f39-B771-BCBE88F2A2A8}
Send {TAB}
Sleep, 1000
}
IfExist, %A_WorkingDir%\plmanager_1
{
WinWait, Load Playlist:,, 12
WinWaitClose
WinWait, Rename playlist,, 1
WinWaitClose
}
IfNotExist, %A_WorkingDir%\plmanager_0
{
WinWait, ahk_class {E7076D1C-A7BF-4f39-B771-BCBE88F2A2A8}
WinActivate
ControlFocus, uie_wsh_panel_mod_class7, ahk_class {E7076D1C-A7BF-4f39-B771-BCBE88F2A2A8}
Send {TAB}
}
Else
ExitApp
Поиск не дал результатов , направте пожалуйстасвязать с PSS
Тут уже обсуждалось.
Но follow cursor не решает проблему , тк плейлист очищается, либо есть ситуация, когда радиостанция не ловил поток -vladj писал(а):
И второе то, что Панель напрочь отказывается запускатся, когда фубар ничего не играет, т.е. находится в режиме Стоп.
marc2003 подсказал решение:
Splitter settings -> закладка "Script" -> Titleformat mode on startup -> поменять now playing на follow cursor
[code]var WshShell = new ActiveXObject("WScript.Shell");
function on_mouse_lbtn_up(x,y){
try {
WshShell.Run(fb.ProfilePath + "\\Emul\\TAB.exe");
} catch(e) {};
}[/code]
Мы уже делали кнопку, а Вы ее доработали до этого (что значит как ) :seriousstas:как из этого сделать кнопку ?
function RGB(r,g,b) { return (0xff000000|(r<<16)|(g<<8)|(b)); }
var font = gdi.Font("Arial",11,1);
var ww,wh;
var on_mouse = false; // если нужно изменять изображение кнопки при наведении мышкой
function on_size(){
ww = window.Width;
wh = window.Height;
}
var WshShell = new ActiveXObject("WScript.Shell"); // это обязательно
function on_paint(gr){
тут рисуем кнопку
}
function on_mouse_lbtn_up (x, y){
// это обязательно
try {
WshShell.Run(fb.ProfilePath + "\\Emul\\TAB.exe");
} catch(e) {};
}
// если нужно изменять изображение кнопки при наведении мышкой
function on_mouse_move(x, y) {
on_mouse = true;
window.Repaint();
}
function on_mouse_leave() {
on_mouse = false;
window.Repaint();
}
// ==PREPROCESSOR==
// @name "properties"
// @author "kgena_ua"
// ==/PREPROCESSOR==
function RGB(r, g, b) {
return (0xff000000 | (r << 16) | (g << 8) | (b));
}
var g_font = gdi.Font("Areal",12,0);
var g_font2 = gdi.Font("Tahoma",10,0);
DT_LEFT = 0x00000000;
DT_CENTER = 0x00000001;
DT_RIGHT = 0x00000002;
DT_WORD_ELLIPSIS = 0x00040000;
DT_SINGLELINE = 0x00000020;
var ww, wh;
//var color1 = RGB(140,164,179);
var color1 = RGB(140,140,140);
var color2 = RGB(255,255,225);
var color3 = RGB(90,90,90);
var tfarray = [];
var widestring = [];
var g_tooltip = window.CreateTooltip();
var ttText = "";
g_tooltip.SetMaxWidth(300);
window.GetProperty("skip",0);
var name, value, measure, t_height;
var path = "", title;
var g_drag = false;
var g_drag_y = 0;
var s = 0;
var col1 = 10;
var col2 = 110;
var col3;
var metadb;
on_item_focus_change();
var ttt = 0;
function on_paint(gr) {
gr.FillSolidRect (0, 0, ww, wh, RGB(30,30,30));
tfarray = [];
for (j = 0; j < tfname.length; j++) {
group = false;
// if (tfname[j].search('group') >= 0 || tfname[j] == "\r\n" ) group = true;
if (tfname[j].search('group') >= 0 || tfname[j] == "line" ) group = true;
if (path.substr(0,4) == "http" || path.substr(0,4) == "mms:") {
value = fb.TitleFormat("[" + tfname[j] + "]").Eval();
} else {
if (metadb) value = fb.TitleFormat("[" + tfname[j] + "]").EvalWithMetadb(metadb);
}
if ( window.GetProperty("skip") == 1) {
if (value || group) tfarray.push(tfname[j]);
} else {
tfarray.push(tfname[j]);
}
}
t_height = gr.CalcTextHeight("text", g_font) + 2;
widestring = [];
for (i = 0; i < tfarray.length; i++) {
line = false;
group = false;
measure = "";
row = i * t_height + s;
if (tfarray[i].search('line') >= 0) line = true;
if (tfarray[i].search('group') >= 0) group = true;
name = tfarray[i].replace(/[%\$\(\)]|info|meta|group |line|lastfm/g,'').replace(/_/g,' ');
if (path.substr(0,4) == "http" || path.substr(0,4) == "mms:") {
value = fb.TitleFormat("[" + tfarray[i] + "]").Eval();
} else {
if (metadb) value = fb.TitleFormat("[" + tfarray[i] + "]").EvalWithMetadb(metadb);
}
if (name && value){
if (tfarray[i] == "$info(bitrate)") measure = " kbps";
if (tfarray[i] == "$info(samplerate)") measure = " Hz";
if (tfarray[i] == "$info(bitspersample)") measure = " bps";
if (tfarray[i] == "$info(channels)") measure = " ch";
if (tfarray[i] == "$meta(rating)") measure = " (tag)";
}
line_row = row + t_height / 2;
if (line) gr.DrawLine(col1, line_row, ww - col1, line_row, 1, color3);
gr.GdiDrawText(name, group ? g_font2 : g_font, group ? color3 : color1, col1, row, ww - col1 * 2, wh, DT_LEFT | DT_WORD_ELLIPSIS);
t_width2 = gr.CalcTextWidth(value, g_font);
col3 = col2 + t_width2;
if (t_width2 > ww - col2 - col1) { widestring.push(row,'"' + tfarray[i] + '"')};
gr.GdiDrawText(value, g_font, color2, col2, row, ww - col2 - col1, wh, DT_LEFT | DT_WORD_ELLIPSIS | DT_SINGLELINE);
gr.GdiDrawText(measure, g_font, color1, col3, row, ww - col3 - col1, wh, DT_LEFT | DT_WORD_ELLIPSIS);
}
g_tooltip.Text = ttText;
if (ttText) g_tooltip.Activate();
gr.GdiDrawText("", g_font, color2, 0, 140, ww, wh, DT_RIGHT | DT_WORD_ELLIPSIS);
gr.GdiDrawText("", g_font, color2, 0, 160, ww, wh, DT_RIGHT | DT_WORD_ELLIPSIS);
}
function on_mouse_lbtn_down(x, y) {
g_drag = true;
g_drag_y = (y - s);
}
function on_mouse_lbtn_up(x, y) {
g_drag = false;
}
function on_mouse_move(x, y) {
window.SetCursor(32649);
ttText = "";
for (i = 0; i < widestring.length; i = i + 2) {
if (y > widestring[i] && y < widestring[i] + t_height && x > col2) {
if (path.substr(0,4) == "http" || path.substr(0,4) == "mms:") {
ttText = fb.TitleFormat("[" + widestring[i + 1] + "]").Eval();
} else {
if (metadb) ttText = fb.TitleFormat("[" + widestring[i + 1] + "]").EvalWithMetadb(metadb);
}
if (ttText) return;
}
}
if (g_drag) {
if (s <= 0 && (tfarray.length * t_height) >= wh) {s = y - g_drag_y};
applyDelta();
}
if (s == 0 || s == wh - tfarray.length * t_height) g_drag_y = (y - s);
window.Repaint();
}
function on_mouse_wheel(step) {
if (s <= 0 && tfarray.length * t_height >= wh) {s = s + step * t_height};
applyDelta();
}
function applyDelta() {
s = s > 0 ? 0 : s;
s = s < (wh - tfarray.length * t_height) && s < 0 ? (wh - tfarray.length * t_height) : s;
window.Repaint();
}
function on_mouse_leave() {
window.SetCursor(32512);
g_tooltip.Deactivate();
window.Repaint();
}
function on_metadb_changed() {
path = fb.Titleformat("%path%").EvalWithMetadb(metadb);
title = fb.Titleformat("%title%").EvalWithMetadb(metadb);
artist = fb.Titleformat("%artist%").EvalWithMetadb(metadb);
}
function on_item_focus_change() {
metadb = fb.IsPlaying ? fb.GetNowPlaying() : fb.GetFocusItem() ,true;
if (metadb) on_metadb_changed();
window.Repaint();
}
function on_playback_new_track(metadb) {
on_item_focus_change();
}
function on_playback_time(time){
on_item_focus_change();
}
function on_selection_changed(metadb) {
on_item_focus_change();
}
function on_playlist_switch() {
on_item_focus_change();
}
function on_playback_stop() {
window.Repaint();
}
function on_size() {
ww = window.Width;
wh = window.Height;
if (s < 0) s = 0;
}
function on_mouse_rbtn_up (x, y){
var _menu = window.CreatePopupMenu();
var i = 1;
MF_ENABLED = 0x00000000;
MF_GRAYED = 0x00000001;
_menu.AppendMenuItem(MF_ENABLED, 1, "skip if empty");
_menu.CheckMenuItem(1, window.GetProperty("skip"));
ShiftDown = utils.IsKeyPressed(0x10) ? true : false;
// if (ShiftDown) {
_menu.AppendMenuItem(0x00000800, 0, 0);
_menu.AppendMenuItem(0x00000000, 10, "Reload");
_menu.AppendMenuItem(0x00000800, 0, 0);
_menu.AppendMenuItem(0x00000000, 20, "Properties");
_menu.AppendMenuItem(0x00000000, 30, "Configure ...");
// }
ret = _menu.TrackPopupMenu(x,y);
switch (ret) {
case 1:
window.SetProperty("skip", window.GetProperty("skip") == 0 ? 1 : 0);
if (s < 0) s = 0;
break;
case 10:
window.Reload();
break;
case 20:
window.ShowProperties();
break;
case 30:
window.ShowConfigure();
break;
}
_menu.Dispose();
return true;
}
var tfname = new Array(
"%artist%",
"%title%",
"%album%",
"%date%",
"%genre%",
"%composer%",
"%performer%",
"%publisher%",
"%album artist%",
"%track number%",
"%totaltracks%",
"%discnumber%",
"%totaldiscs%",
"%comment%",
"%rating%",
"$meta(rating)",
"line",
//"\r\n",
"group G E N E R A L",
"$info(samplerate)",
"$info(channels)",
"$info(bitspersample)",
"$info(bitrate)",
"%codec%",
"$info(codec_profile)",
"$info(encoding)",
"%length%",
"$info(tool)",
"$info(cue_embedded)",
"line",
//"\r\n",
"group L O C A T I O N",
"%filename_ext%",
"%path%",
"%subsong%",
"%filesize_natural%",
"%last_modified%",
"%folder name%",
"line",
//"\r\n",
"group P L A Y B A C K S T A T I S T I C S",
"%play_count%",
"%first_played%",
"%last_played%",
"%added%",
"line",
//"\r\n",
"group L A S T F M",
"%lastfm_bio%",
"%lastfm_similar_artist%",
"%lastfm_artist_playcount%",
"%lastfm_artist_listeners%",
"%lastfm_album_playcount%",
"%lastfm_album_listeners%",
"%lastfm_album_content%"
);
Нет, вроде не писали. Выложите этот трек. И что это за символ &.AHAPXICT:там никак нельзя избавится от нижнего подчёркивания заменяющего символ & в названиях треков
Вернуться в Секреты foobar2000