Skip to main content

Notice

Please note that most of the software linked on this forum is likely to be safe to use. If you are unsure, feel free to ask in the relevant topics, or send a private message to an administrator or moderator. To help curb the problems of false positives, or in the event that you do find actual malware, you can contribute through the article linked here.
Topic: WSH Panel Mod (Read 814891 times) previous topic - next topic
nikolai4ik and 1 Guest are viewing this topic.

WSH Panel Mod

Reply #250
After all my stupid questions I now want to share my input box for tag editing. Maybe it is usefull for someone else aswel. Play around with the last two rows to change the setup or add other fields, but remember it is destructive for your tags...
btw: this text box supports accents the same way windows does.

Code: [Select]
InputBoxes = [];

function InputBox(title, tag, x, y, tw, tbw, h) {
this.title = title;
this.tag = tag;
this.content = "";
this.contentbak = "";
this.lft = x;
this.left = x + tw;
this.top = y;
this.tw = tw;
this.w = tbw;
this.fh = h;
this.right = x + tbw;
this.bottom = y + h;
this.margin = 0.3 * h;
this.colourb = RGB(255, 255, 255);
this.colourba = RGB(255, 255, 200);
this.colourt = RGB(255, 255, 255);
this.colourttb = RGB(0, 0, 0);
this.active = false;
this.specialchar = "";
InputBoxes.push(this);

this.draw = function (gr) {
gfont = gdi.Font("Arial Unicode MS", this.fh, 0);
flags = 0x00000000;
flagsl = 0x00000002;
info = gr.MeasureString(this.content, gfont, 0, 0, 10000, 100, 0);
nfo = gr.MeasureString("n", gfont, 0, 0, 10000, 100, 0);
this.h = nfo.Height;
gr.GdiDrawText(this.title, gfont, this.colourt, this.lft, this.top, this.w-this.margin, this.h, flags);
wth = this.w
if (info.Width > (this.w-2*this.margin-nfo.Width) & this.active) {flags=flagsl; wth = this.w - nfo.Width;}
if (this.active){
gr.FillSolidRect(this.left, this.top, this.w, this.h, this.colourba);
}
else
gr.FillSolidRect(this.left, this.top, this.w, this.h, this.colourb);
gr.GdiDrawText(this.content, gfont, this.colourttb, this.left+this.margin, this.top, wth-2*this.margin, this.h, flags);
cursorinfo=gr.MeasureString(this.content.slice(0, this.cursor), gfont, 0, 0, 10000, 100, 0);
if (this.active) gr.FillSolidRect(this.left + this.margin + cursorinfo.Width,this.top + 1.1 * this.fh, 0.5 * nfo.Width, 2, this.colourttb);
}

this.onClick = function (x, y) {
(!this.active) ? tmp = true : tmp = false;
this.active = (this.left < x) && (x < this.right) && (this.top < y) && (y < this.bottom);
if (this.active & tmp)  {
this.cursor = this.content.length;
this.special = false;
}
this.save();
}

this.load = function () {
metadata = g_handle.GetFileInfo();
idx = metadata.MetaFind(this.tag);
this.content = metadata.MetaValue(idx, 0);
this.contentbak = this.content;
}

this.save = function () {
metadata = g_handle.GetFileInfo();
idx = metadata.MetaFind(this.tag);
if (this.content != metadata.MetaValue(idx, 0)) {
g_handle.UpdateFileInfoSimple(this.tag, this.content);
this.active = false;
}
}
}

function InputBoxesDraw(gr) {
gr.FillSolidRect(0, 0, window.Width, window.Height, RGB(0,0,0));
for (i in InputBoxes) {
InputBoxes[i].draw(gr);
}
}

function InputBoxesLoad() {
for (i in InputBoxes) {
InputBoxes[i].load();
}
}

function InputBoxesSave() {
for (i in InputBoxes) {
InputBoxes[i].save();
}
}

function RGB(r, g, b) {
return (0xff000000 | (r << 16) | (g << 8) | (b));
}

// --- APPLICATION START
var g_handle = fb.GetFocusItem();
ww = window.Width;
hh = window.Height;
cur_btn = null;
fpath = ""
load = true;

function on_mouse_lbtn_down(x, y) {
for (i in InputBoxes) {
InputBoxes[i].onClick(x,y);
}
window.Repaint();
}

function on_notify_data(click, info) {
InputBoxesSave();
window.Repaint();
}

function on_focus(is_focused) {
InputBoxesSave();
window.Repaint();
}

function on_item_focus_change() {
InputBoxesSave();
g_handle = fb.GetFocusItem();
if (g_handle.Path != fpath) {
load = true;
fpath = g_handle.Path;
}
window.Repaint();
}

function on_paint(gr) {
if (load) {
InputBoxesLoad();
load = false;
}
InputBoxesDraw(gr);
}

function on_key_down(vkey) {
key = vkey;
ins = "";
tb = null;

//ctrl, alt?
if (!utils.IsKeyPressed(17) & !utils.IsKeyPressed(18)){
for (i in InputBoxes) {
tb=InputBoxes[i];
if (tb.active) break;
}

if (!tb.special) {

//0-9
if (47<key && key<58 && !utils.IsKeyPressed(16)) {
ins = String.fromCharCode(key);
}

//A-Z
if (64<key && key<91) {
if (!utils.IsKeyPressed(16)) key += 32
ins = String.fromCharCode(key);
}

//simple characters
if (!utils.IsKeyPressed(16)) {
switch (key){
case 189: ins = "-"; break;
case 187: ins = "="; break;
case 219: ins = "["; break;
case 221: ins = "]"; break;
case 186: ins = ";"; break;
case 220: ins = "\\"; break;
case 226: ins = "\\"; break;
case 188: ins = ","; break;
case 190: ins = "."; break;
case 191: ins = "/"; break;
}
}

//simple shift characters
if (utils.IsKeyPressed(16)) {
switch (key){
case 49: ins = "!"; break;
case 50: ins = "@"; break;
case 51: ins = "#"; break;
case 52: ins = "$"; break;
case 53: ins = "%"; break;
case 55: ins = "&&"; break;
case 56: ins = "*"; break;
case 57: ins = "("; break;
case 48: ins = ")"; break;
case 189: ins = "_"; break;
case 187: ins = "+"; break;
case 219: ins = "{"; break;
case 221: ins = "}"; break;
case 186: ins = ":"; break;
case 220: ins = "|"; break;
case 226: ins = "|"; break;
case 188: ins = "<"; break;
case 190: ins = ">"; break;
case 191: ins = "?"; break;
}
}

//special characters
if (!utils.IsKeyPressed(16)) {
switch (key){
case 192: tb.special = true; tb.specialchar = "`"; break;
case 222: tb.special = true; tb.specialchar = "'"; break;
}
}

//special shift characters
if (utils.IsKeyPressed(16)) {
switch (key){
case 192: tb.special = true; tb.specialchar = "~"; break;
case 54: tb.special = true; tb.specialchar = "^"; break;
case 222: tb.special = true; tb.specialchar = "\""; break;
}
}

//space
if (key == 32){
ins = String.fromCharCode(key);
}

}
else {
ins0 = tb.specialchar;

//special characters
switch (key){
case 65:
switch (tb.specialchar){
case "~": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Ã" : ins = "ã"; key = null; break;
case "`": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "À" : ins = "à"; key = null; break;
case "^": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Â" : ins = "â"; key = null; break;
case "\"": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Ä" : ins = "ä"; key = null; break;
case "'": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Á" : ins = "á"; key = null; break;
}
break;
case 67:
switch (tb.specialchar){
case "'": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Ç" : ins = "ç"; key = null; break;
}
break;
case 69:
switch (tb.specialchar){
case "`": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "È" : ins = "è"; key = null; break;
case "^": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Ê" : ins = "ê"; key = null; break;
case "\"": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Ë" : ins = "ë"; key = null; break;
case "'": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "É" : ins = "é"; key = null; break;
}
break;
case 73:
switch (tb.specialchar){
case "`": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Ì" : ins = "ì"; key = null; break;
case "^": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Î" : ins = "î"; key = null; break;
case "\"": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Ï" : ins = "ï"; key = null; break;
case "'": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "í" : ins = "í"; key = null; break;
}
break;
case 78:
switch (tb.specialchar){
case "~": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Ñ" : ins = "ñ"; key = null; break;
}
break;
case 79:
switch (tb.specialchar){
case "~": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Õ" : ins = "õ"; key = null; break;
case "`": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Ò" : ins = "ò"; key = null; break;
case "^": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Ô" : ins = "ô"; key = null; break;
case "\"": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Ö" : ins = "ö"; key = null; break;
case "'": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Ó" : ins = "ó"; key = null; break;
}
break;
case 83:
switch (tb.specialchar){
case "\"": if (!utils.IsKeyPressed(16)) {ins0 = ""; ins = "ß"; key = null}; break;
}
break;
case 85:
switch (tb.specialchar){
case "`": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Ù" : ins = "ù"; key = null; break;
case "^": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Û" : ins = "û"; key = null; break;
case "\"": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Ü" : ins = "ü"; key = null; break;
case "'": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Ú" : ins = "ú"; key = null; break;
}
break;
case 89:
switch (tb.specialchar){
case "\"": if (!utils.IsKeyPressed(16)) {ins0 = ""; ins = "ÿ"; key = null}; break;
case "'": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Ý" : ins = "ý"; key = null; break;
}
break;
}

//0-9
if (47<key && key<58 && !utils.IsKeyPressed(16)) {
ins = String.fromCharCode(key);
}

//A-Z
if (64<key && key<91) {
if (!utils.IsKeyPressed(16)) key += 32
ins = String.fromCharCode(key);
}

//simple characters
if (!utils.IsKeyPressed(16)) {
switch (key){
case 189: ins = "-"; break;
case 187: ins = "="; break;
case 219: ins = "["; break;
case 221: ins = "]"; break;
case 186: ins = ";"; break;
case 220: ins = "\\"; break;
case 226: ins = "\\"; break;
case 188: ins = ","; break;
case 190: ins = "."; break;
case 191: ins = "/"; break;
}
}

//simple shift characters
if (utils.IsKeyPressed(16)) {
switch (key){
case 49: ins = "!"; break;
case 50: ins = "@"; break;
case 51: ins = "#"; break;
case 52: ins = "$"; break;
case 53: ins = "%"; break;
case 55: ins = "&&"; break;
case 56: ins = "*"; break;
case 57: ins = "("; break;
case 48: ins = ")"; break;
case 189: ins = "_"; break;
case 187: ins = "+"; break;
case 219: ins = "{"; break;
case 221: ins = "}"; break;
case 186: ins = ":"; break;
case 220: ins = "|"; break;
case 226: ins = "|"; break;
case 188: ins = "<"; break;
case 190: ins = ">"; break;
case 191: ins = "?"; break;
}
}

tmp = ins
ins = ins0 + tmp;
tb.special = false;
tb.specialchar = "";

}

//left
if (key == 37){
if (tb.cursor != 0) tb.cursor -= 1;
}

//right
if (key == 39){
if (tb.cursor != tb.content.length) tb.cursor += 1;
}

//home
if (key == 36){
tb.cursor = 0;
}

//end
if (key == 35){
tb.cursor = tb.content.length;
}

//backspace
if (key == 8){
if (tb.cursor != 0){
str2 = tb.content.slice(tb.cursor);
tb.cursor -= 1;
str1 = tb.content.slice (0, tb.cursor);
tb.content = str1 + str2
}
}

//delete
if (key == 46){
if (tb.cursor != tb.content.length){
str2 = tb.content.slice(tb.cursor + 1);
str1 = tb.content.slice (0, tb.cursor);
tb.content = str1 + str2
}
}

//enter
if (key == 13) {
InputBoxesSave();
}

//esc
if (key == 27) {
tb.content = tb.contentbak;
tb.cursor = tb.content.length;
}

str1 = tb.content.slice(0, tb.cursor);
str2 = tb.content.slice(tb.cursor);
tb.content = str1 + ins + str2;
tb.cursor += ins.length;
window.Repaint();
}
}

// InputBox (Title, Tag, x, y, Title width, Text box width, Font size)
var ib_test = new InputBox("Title", "title",10,10,100, 500,20);
var ib_testlang = new InputBox("Artist", "artist",10,50,100, 500,40);


WSH Panel Mod

Reply #252
Two issues:

The following code will consume a GDI handle on each repaint without freeing it:
Code: [Select]
this.draw = function (gr) {
        gfont = gdi.Font("Arial Unicode MS", this.fh, 0);
...
}
If you are typing very much, you will encounter funny things on your screen after a while. Calls to gdi.Font() should always be minimized, because there is no way to free the associated GDI handles.

Another problem: Scrolling very fast with arrow up/down through a playlist (at least when using ELPlaylist) leads to not updating the input boxes, but always updating the tags. This will end up with all affected tracks having the same values.

WSH Panel Mod

Reply #253
Two issues:

The following code will consume a GDI handle on each repaint without freeing it:
Code: [Select]
this.draw = function (gr) {
         gfont = gdi.Font("Arial Unicode MS", this.fh, 0);
 ...
 }
If you are typing very much, you will encounter funny things on your screen after a while. Calls to gdi.Font() should always be minimized, because there is no way to free the associated GDI handles.

Another problem: Scrolling very fast with arrow up/down through a playlist (at least when using ELPlaylist) leads to not updating the input boxes, but always updating the tags. This will end up with all affected tracks having the same values.

Thanks for this feedback! I solved both issues and found some more bugs. Here is the updated code:
Code: [Select]
InputBoxes = [];

function InputBox(title, tag, x, y, tw, tbw, h) {
this.title = title;
this.tag = tag;
this.content = "";
this.contentbak = "";
this.lft = x;
this.left = x + tw;
this.top = y;
this.tw = tw;
this.w = tbw;
this.fh = h;
this.right = x + tbw;
this.bottom = y + h;
this.margin = 0.3 * h;
this.colourb = RGB(255, 255, 255);
this.colourba = RGB(255, 255, 200);
this.colourt = RGB(255, 255, 255);
this.colourttb = RGB(0, 0, 0);
this.active = false;
this.specialchar = "";
this.gfont = gdi.Font("Arial Unicode MS", this.fh, 0);

InputBoxes.push(this);

this.draw = function (gr) {
flags = 0x00000000;
flagsl = 0x00000002;
info = gr.MeasureString(this.content, this.gfont, 0, 0, 10000, 100, 0);
nfo = gr.MeasureString("n", this.gfont, 0, 0, 10000, 100, 0);
this.h = nfo.Height;
gr.GdiDrawText(this.title, this.gfont, this.colourt, this.lft, this.top, this.w-this.margin, this.h, flags);
wth = this.w
if (info.Width > (this.w-2*this.margin-nfo.Width) & this.active) {flags=flagsl; wth = this.w - nfo.Width;}
if (this.active){
gr.FillSolidRect(this.left, this.top, this.w, this.h, this.colourba);
}
else
gr.FillSolidRect(this.left, this.top, this.w, this.h, this.colourb);
gr.GdiDrawText(this.content, this.gfont, this.colourttb, this.left+this.margin, this.top, wth-2*this.margin, this.h, flags);
cursorinfo=gr.MeasureString(this.content.slice(0, this.cursor), this.gfont, 0, 0, 10000, 100, 0);
if (this.active) gr.FillSolidRect(this.left + this.margin + cursorinfo.Width,this.top + 1.1 * this.fh, 0.5 * nfo.Width, 2, this.colourttb);
}

this.onClick = function (x, y) {
(!this.active) ? tmp = true : tmp = false;
this.active = (this.left < x) && (x < this.right) && (this.top < y) && (y < this.bottom);
if (this.active & tmp)  {
this.cursor = this.content.length;
this.special = false;
}
if (this.content != this.contentbak) {
g_handle.UpdateFileInfoSimple(this.tag, this.content);
this.contentbak = this.content;
}
}

this.load = function () {
idx = metadata.MetaFind(this.tag);
this.content = metadata.MetaValue(idx, 0);
this.contentbak = this.content;
}

this.save = function () {
if (this.content != this.contentbak && this.active) {
g_handle.UpdateFileInfoSimple(this.tag, this.content);
this.contentbak = this.content;
this.active = false;
}
}
}

function InputBoxesDraw(gr) {
gr.FillSolidRect(0, 0, window.Width, window.Height, RGB(0,0,0));
for (i in InputBoxes) {
InputBoxes[i].draw(gr);
}
}

function InputBoxesLoad() {
if (g_handle.Path != fpath) {
for (i in InputBoxes) {
InputBoxes[i].load();
}
fpath = g_handle.Path;
}
}

function InputBoxesSave() {
for (i in InputBoxes) {
InputBoxes[i].save();
}
}

function RGB(r, g, b) {
return (0xff000000 | (r << 16) | (g << 8) | (b));
}

// --- APPLICATION START
var g_handle = fb.GetFocusItem();
var metadata = g_handle.GetFileInfo();
fpath = ""

function on_mouse_lbtn_down(x, y) {
for (i in InputBoxes) {
InputBoxes[i].onClick(x,y);
}
window.Repaint();
}

function on_focus(is_focused) {
InputBoxesSave();
window.Repaint();
}

function on_item_focus_change() {
InputBoxesSave();
g_handle = fb.GetFocusItem();
metadata = g_handle.GetFileInfo();
InputBoxesLoad();
window.Repaint();
}

function on_paint(gr) {
InputBoxesLoad();
InputBoxesDraw(gr);
}

function on_key_down(vkey) {
key = vkey;
ins = "";
tb = null;

//ctrl, alt?
if (!utils.IsKeyPressed(17) & !utils.IsKeyPressed(18)){
for (i in InputBoxes) {
tb=InputBoxes[i];
if (tb.active) break;
}
if (tb.active) {

if (!tb.special) {

//0-9
if (47<key && key<58 && !utils.IsKeyPressed(16)) {
ins = String.fromCharCode(key);
}

//A-Z
if (64<key && key<91) {
if (!utils.IsKeyPressed(16)) key += 32
ins = String.fromCharCode(key);
}

//simple characters
if (!utils.IsKeyPressed(16)) {
switch (key){
case 189: ins = "-"; break;
case 187: ins = "="; break;
case 219: ins = "["; break;
case 221: ins = "]"; break;
case 186: ins = ";"; break;
case 220: ins = "\\"; break;
case 226: ins = "\\"; break;
case 188: ins = ","; break;
case 190: ins = "."; break;
case 191: ins = "/"; break;
}
}

//simple shift characters
if (utils.IsKeyPressed(16)) {
switch (key){
case 49: ins = "!"; break;
case 50: ins = "@"; break;
case 51: ins = "#"; break;
case 52: ins = "$"; break;
case 53: ins = "%"; break;
case 55: ins = "&&"; break;
case 56: ins = "*"; break;
case 57: ins = "("; break;
case 48: ins = ")"; break;
case 189: ins = "_"; break;
case 187: ins = "+"; break;
case 219: ins = "{"; break;
case 221: ins = "}"; break;
case 186: ins = ":"; break;
case 220: ins = "|"; break;
case 226: ins = "|"; break;
case 188: ins = "<"; break;
case 190: ins = ">"; break;
case 191: ins = "?"; break;
}
}

//special characters
if (!utils.IsKeyPressed(16)) {
switch (key){
case 192: tb.special = true; tb.specialchar = "`"; break;
case 222: tb.special = true; tb.specialchar = "'"; break;
}
}

//special shift characters
if (utils.IsKeyPressed(16)) {
switch (key){
case 192: tb.special = true; tb.specialchar = "~"; break;
case 54: tb.special = true; tb.specialchar = "^"; break;
case 222: tb.special = true; tb.specialchar = "\""; break;
}
}

//space
if (key == 32){
ins = String.fromCharCode(key);
}

}
else {
ins0 = tb.specialchar;

//special characters
switch (key){
case 65:
switch (tb.specialchar){
case "~": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Ã" : ins = "ã"; key = null; break;
case "`": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "À" : ins = "à"; key = null; break;
case "^": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Â" : ins = "â"; key = null; break;
case "\"": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Ä" : ins = "ä"; key = null; break;
case "'": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Á" : ins = "á"; key = null; break;
}
break;
case 67:
switch (tb.specialchar){
case "'": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Ç" : ins = "ç"; key = null; break;
}
break;
case 69:
switch (tb.specialchar){
case "`": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "È" : ins = "è"; key = null; break;
case "^": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Ê" : ins = "ê"; key = null; break;
case "\"": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Ë" : ins = "ë"; key = null; break;
case "'": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "É" : ins = "é"; key = null; break;
}
break;
case 73:
switch (tb.specialchar){
case "`": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Ì" : ins = "ì"; key = null; break;
case "^": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Î" : ins = "î"; key = null; break;
case "\"": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Ï" : ins = "ï"; key = null; break;
case "'": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "í" : ins = "í"; key = null; break;
}
break;
case 78:
switch (tb.specialchar){
case "~": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Ñ" : ins = "ñ"; key = null; break;
}
break;
case 79:
switch (tb.specialchar){
case "~": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Õ" : ins = "õ"; key = null; break;
case "`": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Ò" : ins = "ò"; key = null; break;
case "^": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Ô" : ins = "ô"; key = null; break;
case "\"": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Ö" : ins = "ö"; key = null; break;
case "'": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Ó" : ins = "ó"; key = null; break;
}
break;
case 83:
switch (tb.specialchar){
case "\"": if (!utils.IsKeyPressed(16)) {ins0 = ""; ins = "ß"; key = null}; break;
}
break;
case 85:
switch (tb.specialchar){
case "`": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Ù" : ins = "ù"; key = null; break;
case "^": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Û" : ins = "û"; key = null; break;
case "\"": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Ü" : ins = "ü"; key = null; break;
case "'": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Ú" : ins = "ú"; key = null; break;
}
break;
case 89:
switch (tb.specialchar){
case "\"": if (!utils.IsKeyPressed(16)) {ins0 = ""; ins = "ÿ"; key = null}; break;
case "'": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Ý" : ins = "ý"; key = null; break;
}
break;
}

//0-9
if (47<key && key<58 && !utils.IsKeyPressed(16)) {
ins = String.fromCharCode(key);
}

//A-Z
if (64<key && key<91) {
if (!utils.IsKeyPressed(16)) key += 32
ins = String.fromCharCode(key);
}

//simple characters
if (!utils.IsKeyPressed(16)) {
switch (key){
case 189: ins = "-"; break;
case 187: ins = "="; break;
case 219: ins = "["; break;
case 221: ins = "]"; break;
case 186: ins = ";"; break;
case 220: ins = "\\"; break;
case 226: ins = "\\"; break;
case 188: ins = ","; break;
case 190: ins = "."; break;
case 191: ins = "/"; break;
}
}

//simple shift characters
if (utils.IsKeyPressed(16)) {
switch (key){
case 49: ins = "!"; break;
case 50: ins = "@"; break;
case 51: ins = "#"; break;
case 52: ins = "$"; break;
case 53: ins = "%"; break;
case 55: ins = "&&"; break;
case 56: ins = "*"; break;
case 57: ins = "("; break;
case 48: ins = ")"; break;
case 189: ins = "_"; break;
case 187: ins = "+"; break;
case 219: ins = "{"; break;
case 221: ins = "}"; break;
case 186: ins = ":"; break;
case 220: ins = "|"; break;
case 226: ins = "|"; break;
case 188: ins = "<"; break;
case 190: ins = ">"; break;
case 191: ins = "?"; break;
}
}

tmp = ins
ins = ins0 + tmp;
tb.special = false;
tb.specialchar = "";

}

//left
if (key == 37){
if (tb.cursor != 0) tb.cursor -= 1;
}

//right
if (key == 39){
if (tb.cursor != tb.content.length) tb.cursor += 1;
}

//home
if (key == 36){
tb.cursor = 0;
}

//end
if (key == 35){
tb.cursor = tb.content.length;
}

//backspace
if (key == 8){
if (tb.cursor != 0){
str2 = tb.content.slice(tb.cursor);
tb.cursor -= 1;
str1 = tb.content.slice (0, tb.cursor);
tb.content = str1 + str2
}
}

//delete
if (key == 46){
if (tb.cursor != tb.content.length){
str2 = tb.content.slice(tb.cursor + 1);
str1 = tb.content.slice (0, tb.cursor);
tb.content = str1 + str2
}
}

//enter
if (key == 13) {
InputBoxesSave();
}

//esc
if (key == 27) {
tb.content = tb.contentbak;
tb.cursor = tb.content.length;
}

str1 = tb.content.slice(0, tb.cursor);
str2 = tb.content.slice(tb.cursor);
tb.content = str1 + ins + str2;
tb.cursor += ins.length;
window.Repaint();
}
}
}

// InputBox (Title, Tag, x, y, Title width, Text box width, Font size)
var ib_test = new InputBox("Title", "title",10,10,100, 500,20);
var ib_testlang = new InputBox("Artist", "artist",10,50,100, 500,40);
There are a few things to keep in mind:
    - This code assumes a us layout keyboard
    - Don't use this in a Tabbed panel stack, because it keeps focussed when the tab is changed, so it keeps editing[/li]
I also have a question: I would like to add support for fields with multiple values (right now it only loads the first one), but I don't know how to write them from wsh panel mod. Anyone a suggestion?

WSH Panel Mod

Reply #254
I've upload 1.1.10 Beta 6 to googlecode, this version contains these changes:
Code: [Select]
v1.1.10
- ADD: GdiAlphaBlend() method to IGdiGraphics interface, see Interfaces.txt for more details.
- ADD: Dispose() method to various classes, so now avoid using CollectGarbage(), see Interfaces.txt for more details.
- ADD: Reize() method to IGdiBitmap interface.
- ADD: ApplyMask() method to IGdiBitmap interface.
- ADD: utils.GetAlbumArtAsync() method and on_get_album_art_done() callback for getting album art asynchronously.
- ADD: window.ID() property, for now only used in utils.GetAlbumArtAsync().
- ADD: window.GetBackgroundImage() and on_refresh_background_done() callback to retrieve pseudo transparent bakground image.
- ADD: MetaRemoveField(), MetaAdd() and MetaInsertValue() methods for IFbFileInfo interface.
- CHG: UpdateFileInfoSimple() method of IFbMetadbHandle interface now supports multivalue fields, defined in foobar2000 Preferences->Advanced->Display->Properties dialog->Multivalue fields.
- CHG: Set timeout to 0 now means disabling script hangs check.
- CHG: Updated Samples.
- FIX: Misc bugs fixed.

Note that method name or callback function name newly added may be changed later, so use new features with caution.
eg. (on_get_album_art_done() changed from on_get_album_art() added in Beta 5)



WSH Panel Mod

Reply #257
@grimes:
I've met that problem, I'll fix that later.

WSH Panel Mod

Reply #258
Thanks for this update!

I now updated my textbox to support multiple values (and fixed some other bugs):

Code: [Select]
InputBoxes = [];

function InputBox(title, tag, multivalue, x, y, tw, tbw, h) {
this.title = title;
this.tag = tag;
this.multivalue = multivalue;
this.editsep = "; ";
this.content = new Array();
this.contentedit = "";
this.contenteditbak = "";
this.nrvalues = 0;
this.tleft = x;
this.left = x + tw;
this.top = y;
this.tw = tw;
this.w = tbw;
this.h = 0;
this.fh = h;
this.margin = 0.3 * h;
this.colourb = RGB(255, 255, 255);
this.colourba = RGB(255, 255, 200);
this.colourt = RGB(255, 255, 255);
this.colourttb = RGB(0, 0, 0);
this.active = false;
this.specialchar = "";
this.gfont = gdi.Font("Arial Unicode MS", this.fh, 0);

InputBoxes.push(this);

this.draw = function (gr) {
sepcolour = RGB(255, 127, 127);
flags = 0x00000000;
flagsl = 0x00000002;
nfo = gr.MeasureString("n", this.gfont, 0, 0, 10000, 100, 0);
sepinfo = gr.MeasureString("; ", this.gfont, 0, 0, 10000, 100, 0);
this.h = nfo.Height;

//title
gr.GdiDrawText(this.title, this.gfont, this.colourt, this.tleft, this.top, this.w-this.margin, this.h, flags);

if (!this.active) {
gr.FillSolidRect(this.left, this.top, this.w, this.h, this.colourb);

//content not active
pos = 0;
tmpstr = "";
for (n = 0 ; n < this.nrvalues; n++) {
if (n != 0) {
tmpstr += this.editsep;
if (pos < (this.w - 2 * this.margin)) gr.GdiDrawText(this.editsep, this.gfont, sepcolour, this.left + this.margin + pos, this.top, this.w - 2 * this.margin - pos, this.h, flags);
info = gr.MeasureString(this.editsep, this.gfont, 0, 0, 10000, 100, 0);
pos += info.Width;
if (tmpstr.slice(-1) == " ") pos += 0.5*nfo.Width;
}
tmpstr += this.content[n];
if (pos < (this.w - 2 * this.margin)) gr.GdiDrawText(this.content[n], this.gfont, this.colourttb, this.left + this.margin + pos, this.top, this.w - 2 * this.margin - pos, this.h, flags);
info = gr.MeasureString(this.content[n], this.gfont, 0, 0, 10000, 100, 0);
pos += info.Width;
}
}
else {
gr.FillSolidRect(this.left, this.top, this.w, this.h, this.colourba);

//content active
info = gr.MeasureString(this.contentedit, this.gfont, 0, 0, 10000, 100, 0);
flg = flags;
befcur = this.contentedit.slice(0, this.cursor);
tbw = this.w
cursorinfo = gr.MeasureString(befcur, this.gfont, 0, 0, 10000, 100, 0);
cend = false;
drwtxt = this.contentedit;
if (cursorinfo.Width > (this.w - this.margin - nfo.Width)) {
flg = flagsl;
cend = true;
drwtxt = befcur;
tbw -= 0.5 * nfo.Width;
}
gr.GdiDrawText(drwtxt, this.gfont, this.colourttb, this.left + this.margin, this.top, tbw - 2 * this.margin, this.h, flg);

//cursor
if (cend)  {
gr.FillSolidRect(this.left + tbw - this.margin, this.top + 1.1 * this.fh, 0.5 * nfo.Width, 2, this.colourttb);
}
else {
cursorinfo=gr.MeasureString(this.contentedit.slice(0, this.cursor), this.gfont, 0, 0, 10000, 100, 0);
cleft = cursorinfo.Width;
if (befcur.slice(-1) == " ") cleft += 0.5*nfo.Width;
gr.FillSolidRect(this.left + this.margin + cleft, this.top + 1.1 * this.fh, 0.5 * nfo.Width, 2, this.colourttb);
}
}
}

this.onClick = function (x, y) {
if ((this.left < x) && (x < (this.left + this.w)) && (this.top < y) && (y < (this.top + this.h))) {
if (!this.active) {
this.active = true;
this.cursor = this.contentedit.length;
this.special = false;
}
}
else {
this.save();
}
}

this.loadeditstr = function () {
tmpstr = "";
for (n = 0 ; n < this.nrvalues; n++) {
if (n != 0) tmpstr += this.editsep;
tmpstr += this.content[n];
}
this.contenteditbak = this.contentedit;
this.contentedit = tmpstr;
}

this.spliteditstr = function () {
if (this.multivalue) {
tmparr = new Array ();
tmpstr = this.contentedit;
editseptrim = this.editsep;
if (editseptrim.slice(0, 1) == " ") editseptrim = editsepttrim.slice(1);
if (editseptrim.slice(-1) == " ") editseptrim = editseptrim.slice(0, editseptrim.length - 1);
m = 0;
do {
seppos = tmpstr.indexOf(editseptrim);
if (seppos == -1) {
tmparr[m] = tmpstr;
}
else {
tmparr[m] = tmpstr.slice(0, seppos);
tmpstr = tmpstr.slice(seppos + 1);
if (tmpstr.slice(0, 1) == " ") tmpstr = tmpstr.slice(1);
}
if (tmparr[m].slice(-1) == " ") tmparr[m] = tmparr[m].slice(0, tmparr[m].Length - 1);
m++;
} while (seppos != -1);
this.content = tmparr;
this.nrvalues = m;
}
else
this.content[0] = this.contentedit;
}

this.load = function () {
idx = metadata.MetaFind(this.tag);
if (idx > metadata.MetaCount) this.nrvalues = 0; else this.nrvalues = metadata.MetaValueCount(idx);
for (n = 0 ; n < this.nrvalues; n++) this.content[n] = metadata.MetaValue(idx, n);
this.active = false;
this.loadeditstr();
}

this.save = function () {
if (this.contentedit != this.contenteditbak && this.active) {
this.spliteditstr();
if (this.multivalue) {
metadata.MetaRemoveField(this.tag);
idx = metadata.MetaAdd(this.tag, this.content[this.nrvalues -1]);
for (n = this.nrvalues - 2 ; n > -1; n--) {
metadata.MetaInsertValue(idx, 0, this.content[n]);
}
}
else
metadata.MetaSet (this.tag, this.content[0]);

g_handle.UpdateFileInfo(metadata);
this.active = false;
this.loadeditstr();
}
else
this.active = false;
}
}

function InputBoxesDraw(gr) {
gr.FillSolidRect(0, 0, window.Width, window.Height, RGB(0,0,0));
for (i in InputBoxes) {
InputBoxes[i].draw(gr);
}
}

function InputBoxesLoad() {
if (g_handle.Path != fpath) {
for (i in InputBoxes) {
InputBoxes[i].load();
}
fpath = g_handle.Path;
}
}

function InputBoxesSave() {
for (i in InputBoxes) {
InputBoxes[i].save();
}
}

function RGB(r, g, b) {
return (0xff000000 | (r << 16) | (g << 8) | (b));
}

// --- APPLICATION START
var g_handle = fb.GetFocusItem();
var metadata = g_handle.GetFileInfo();
fpath = ""

function on_mouse_lbtn_down(x, y) {
for (i in InputBoxes) {
InputBoxes[i].onClick(x,y);
}
window.Repaint();
}

function on_focus(is_focused) {
InputBoxesSave();
window.Repaint();
}

function on_item_focus_change() {
InputBoxesSave();
g_handle = fb.GetFocusItem();
metadata = g_handle.GetFileInfo();
InputBoxesLoad();
window.Repaint();
}

function on_paint(gr) {
InputBoxesLoad();
InputBoxesDraw(gr);
}

function on_key_down(vkey) {
key = vkey;
ins = "";
tb = null;

//ctrl, alt?
if (!utils.IsKeyPressed(17) & !utils.IsKeyPressed(18)){
for (i in InputBoxes) {
tb=InputBoxes[i];
for (n = 0 ; n < tb.nrvalues; n++) {
if (tb.active[n]) break;
}
if (tb.active) break;
}
if (tb.active) {

if (!tb.special) {

//0-9
if (47<key && key<58 && !utils.IsKeyPressed(16)) {
ins = String.fromCharCode(key);
}

//A-Z
if (64<key && key<91) {
if (!utils.IsKeyPressed(16)) key += 32
ins = String.fromCharCode(key);
}

//simple characters
if (!utils.IsKeyPressed(16)) {
switch (key){
case 189: ins = "-"; break;
case 187: ins = "="; break;
case 219: ins = "["; break;
case 221: ins = "]"; break;
case 186: ins = ";"; break;
case 220: ins = "\\"; break;
case 226: ins = "\\"; break;
case 188: ins = ","; break;
case 190: ins = "."; break;
case 191: ins = "/"; break;
}
}

//simple shift characters
if (utils.IsKeyPressed(16)) {
switch (key){
case 49: ins = "!"; break;
case 50: ins = "@"; break;
case 51: ins = "#"; break;
case 52: ins = "$"; break;
case 53: ins = "%"; break;
case 55: ins = "&&"; break;
case 56: ins = "*"; break;
case 57: ins = "("; break;
case 48: ins = ")"; break;
case 189: ins = "_"; break;
case 187: ins = "+"; break;
case 219: ins = "{"; break;
case 221: ins = "}"; break;
case 186: ins = ":"; break;
case 220: ins = "|"; break;
case 226: ins = "|"; break;
case 188: ins = "<"; break;
case 190: ins = ">"; break;
case 191: ins = "?"; break;
}
}

//special characters
if (!utils.IsKeyPressed(16)) {
switch (key){
case 192: tb.special = true; tb.specialchar = "`"; break;
case 222: tb.special = true; tb.specialchar = "'"; break;
}
}

//special shift characters
if (utils.IsKeyPressed(16)) {
switch (key){
case 192: tb.special = true; tb.specialchar = "~"; break;
case 54: tb.special = true; tb.specialchar = "^"; break;
case 222: tb.special = true; tb.specialchar = "\""; break;
}
}

//space
if (key == 32){
ins = String.fromCharCode(key);
}

}
else {
ins0 = tb.specialchar;

//special characters
switch (key){
case 65:
switch (tb.specialchar){
case "~": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Ã" : ins = "ã"; key = null; break;
case "`": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "À" : ins = "à"; key = null; break;
case "^": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Â" : ins = "â"; key = null; break;
case "\"": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Ä" : ins = "ä"; key = null; break;
case "'": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Á" : ins = "á"; key = null; break;
}
break;
case 67:
switch (tb.specialchar){
case "'": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Ç" : ins = "ç"; key = null; break;
}
break;
case 69:
switch (tb.specialchar){
case "`": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "È" : ins = "è"; key = null; break;
case "^": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Ê" : ins = "ê"; key = null; break;
case "\"": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Ë" : ins = "ë"; key = null; break;
case "'": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "É" : ins = "é"; key = null; break;
}
break;
case 73:
switch (tb.specialchar){
case "`": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Ì" : ins = "ì"; key = null; break;
case "^": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Î" : ins = "î"; key = null; break;
case "\"": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Ï" : ins = "ï"; key = null; break;
case "'": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "í" : ins = "í"; key = null; break;
}
break;
case 78:
switch (tb.specialchar){
case "~": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Ñ" : ins = "ñ"; key = null; break;
}
break;
case 79:
switch (tb.specialchar){
case "~": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Õ" : ins = "õ"; key = null; break;
case "`": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Ò" : ins = "ò"; key = null; break;
case "^": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Ô" : ins = "ô"; key = null; break;
case "\"": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Ö" : ins = "ö"; key = null; break;
case "'": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Ó" : ins = "ó"; key = null; break;
}
break;
case 83:
switch (tb.specialchar){
case "\"": if (!utils.IsKeyPressed(16)) {ins0 = ""; ins = "ß"; key = null}; break;
}
break;
case 85:
switch (tb.specialchar){
case "`": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Ù" : ins = "ù"; key = null; break;
case "^": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Û" : ins = "û"; key = null; break;
case "\"": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Ü" : ins = "ü"; key = null; break;
case "'": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Ú" : ins = "ú"; key = null; break;
}
break;
case 89:
switch (tb.specialchar){
case "\"": if (!utils.IsKeyPressed(16)) {ins0 = ""; ins = "ÿ"; key = null}; break;
case "'": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Ý" : ins = "ý"; key = null; break;
}
break;
}

//0-9
if (47<key && key<58 && !utils.IsKeyPressed(16)) {
ins = String.fromCharCode(key);
}

//A-Z
if (64<key && key<91) {
if (!utils.IsKeyPressed(16)) key += 32
ins = String.fromCharCode(key);
}

//simple characters
if (!utils.IsKeyPressed(16)) {
switch (key){
case 189: ins = "-"; break;
case 187: ins = "="; break;
case 219: ins = "["; break;
case 221: ins = "]"; break;
case 186: ins = ";"; break;
case 220: ins = "\\"; break;
case 226: ins = "\\"; break;
case 188: ins = ","; break;
case 190: ins = "."; break;
case 191: ins = "/"; break;
}
}

//simple shift characters
if (utils.IsKeyPressed(16)) {
switch (key){
case 49: ins = "!"; break;
case 50: ins = "@"; break;
case 51: ins = "#"; break;
case 52: ins = "$"; break;
case 53: ins = "%"; break;
case 55: ins = "&&"; break;
case 56: ins = "*"; break;
case 57: ins = "("; break;
case 48: ins = ")"; break;
case 189: ins = "_"; break;
case 187: ins = "+"; break;
case 219: ins = "{"; break;
case 221: ins = "}"; break;
case 186: ins = ":"; break;
case 220: ins = "|"; break;
case 226: ins = "|"; break;
case 188: ins = "<"; break;
case 190: ins = ">"; break;
case 191: ins = "?"; break;
}
}

tmp = ins
ins = ins0 + tmp;
tb.special = false;
tb.specialchar = "";

}

//left
if (key == 37){
if (tb.cursor != 0) tb.cursor -= 1;
}

//right
if (key == 39){
if (tb.cursor != tb.contentedit.length) tb.cursor += 1;
}

//home
if (key == 36){
tb.cursor = 0;
}

//end
if (key == 35){
tb.cursor = tb.contentedit.length;
}

//backspace
if (key == 8){
if (tb.cursor != 0){
str2 = tb.contentedit.slice(tb.cursor);
tb.cursor -= 1;
str1 = tb.contentedit.slice (0, tb.cursor);
tb.contentedit = str1 + str2
}
}

//delete
if (key == 46){
if (tb.cursor != tb.content.length){
str2 = tb.contentedit.slice(tb.cursor + 1);
str1 = tb.contentedit.slice (0, tb.cursor);
tb.contentedit = str1 + str2
}
}

//enter
if (key == 13) {
InputBoxesSave();
}

//esc
if (key == 27) {
tb.contentedit = tb.contenteditbak;
tb.cursor = tb.contentedit.length;
}

str1 = tb.contentedit.slice(0, tb.cursor);
str2 = tb.contentedit.slice(tb.cursor);
tb.contentedit = str1 + ins + str2;
tb.cursor += ins.length;
window.Repaint();
}
}
}

// InputBox (Title, Tag, Multivalue, x, y, Title width, Text box width, Font size)
var ib_test = new InputBox("Title", "title", false, 10,10,100, 500,20);
var ib_testlang = new InputBox("Artist", "artist", true, 10,50,100, 500,40);

WSH Panel Mod

Reply #259
foobar crashed with latest version and when I send report got this feedback:

Problem caused by: foo_uie_wsh_panel_mod.dll : WSH Panel

The crash:
Code: [Select]
Illegal operation:
Code: C0000005h, flags: 00000000h, address: D8A58300h
Access violation, operation: read, address: D8A58300h

Call path:
entry=>app_mainloop

Stack (0022D8D0h):
0022D8B0h:  00000000 00000000 FFFFFD34 000002E4
0022D8C0h:  FFFFFD34 000002CC 00000018 00000000
0022D8D0h:  7715FFBC 04A5ED08 0022D98C 0CAA08A4
0022D8E0h:  00000000 01A17BE8 00000000 77155108
0022D8F0h:  00000009 00000000 0022D9A0 77155597
0022D900h:  01A17BE8 143C0009 005F0002 0022D98C
0022D910h:  00000000 0CAA087C 00000000 00000002
0022D920h:  00000000 045D1788 0022DB5C 0022DA18
0022D930h:  045D17A0 00000009 005F0002 0022D9E8
0022D940h:  005F0150 0022DB6C 0022DA24 FFFFFFFF
0022D950h:  00000000 00392CB8 00000009 0000000B
0022D960h:  00000001 0022DB5C 045D17D4 00000000
0022D970h:  FFFFFFFF 00000008 00000000 00000000
0022D980h:  00000000 143C0009 0CAA087C 7EFBD443
0022D990h:  4CB24F6F 2B88EE9E F6CB199B 9F1979F2
0022D9A0h:  0022DA34 77154D67 045D1788 003926D4
0022D9B0h:  00000001 0022DB5C 0022DA18 0022D9E8
0022D9C0h:  0022DA24 0022DB6C 00000000 0022DA8C
0022D9D0h:  00000000 04A5E4F8 00000000 002BF600
0022D9E0h:  005F0000 0137FE58 0022D930 FF6C7344

Registers:
EAX: 04A5ED08, EBX: 01A17BE8, ECX: 69C60008, EDX: 0CAA08A4
ESI: 0CAA089C, EDI: 0CAA087C, EBP: 0022D8F8, ESP: 0022D8D0

Unable to identify crash location!

Loaded modules:
foobar2000                      loaded at 01290000h - 0142A000h
ntdll                            loaded at 778E0000h - 77A1C000h
kernel32                        loaded at 77210000h - 772E4000h
KERNELBASE                      loaded at 75AE0000h - 75B28000h
COMCTL32                        loaded at 749C0000h - 74B5C000h
msvcrt                          loaded at 761A0000h - 7624C000h
GDI32                            loaded at 77060000h - 770AE000h
USER32                          loaded at 75F30000h - 75FFB000h
LPK                              loaded at 770C0000h - 770CA000h
USP10                            loaded at 77A70000h - 77B0D000h
SHLWAPI                          loaded at 77880000h - 778D7000h
DSOUND                          loaded at 70C70000h - 70CE3000h
ADVAPI32                        loaded at 776E0000h - 77780000h
sechost                          loaded at 77A20000h - 77A39000h
RPCRT4                          loaded at 75E30000h - 75ED1000h
ole32                            loaded at 772F0000h - 7744C000h
WINMM                            loaded at 70CF0000h - 70D22000h
POWRPROF                        loaded at 73FC0000h - 73FE5000h
SETUPAPI                        loaded at 76000000h - 7619D000h
CFGMGR32                        loaded at 75AB0000h - 75AD7000h
OLEAUT32                        loaded at 77140000h - 771CF000h
DEVOBJ                          loaded at 75B60000h - 75B72000h
SHELL32                          loaded at 762D0000h - 76F16000h
shared                          loaded at 10000000h - 1002B000h
imagehlp                        loaded at 75D30000h - 75D5A000h
UxTheme                          loaded at 74840000h - 74880000h
dbghelp                          loaded at 6A410000h - 6A4FC000h
COMDLG32                        loaded at 76250000h - 762CB000h
IMM32                            loaded at 77A40000h - 77A5F000h
MSCTF                            loaded at 75D60000h - 75E2C000h
CRYPTBASE                        loaded at 759B0000h - 759BC000h
CLBCatQ                          loaded at 77450000h - 774D3000h
MMDevApi                        loaded at 74530000h - 74569000h
PROPSYS                          loaded at 74880000h - 74975000h
dwmapi                          loaded at 74510000h - 74523000h
foo_lyricsgrabber                loaded at 6A3A0000h - 6A405000h
WS2_32                          loaded at 771D0000h - 77205000h
NSI                              loaded at 770D0000h - 770D6000h
foo_dsp_bs2b                    loaded at 01200000h - 01227000h
foo_input_tta                    loaded at 01230000h - 0125B000h
foo_benchmark                    loaded at 01970000h - 0199D000h
foo_cdtext                      loaded at 019A0000h - 019C9000h
foo_discogs                      loaded at 01B10000h - 01B75000h
WININET                          loaded at 77780000h - 77874000h
Normaliz                        loaded at 77A60000h - 77A63000h
urlmon                          loaded at 76F20000h - 77055000h
CRYPT32                          loaded at 75C10000h - 75D2C000h
MSASN1                          loaded at 75AA0000h - 75AAC000h
iertutil                        loaded at 774E0000h - 776D9000h
gdiplus                          loaded at 746B0000h - 74840000h
foo_dumb                        loaded at 028C0000h - 0294E000h
foo_cdda                        loaded at 02950000h - 02990000h
foo_uie_playlists_dropdown      loaded at 029E0000h - 02A1D000h
foo_dsp_vstwrap                  loaded at 69E10000h - 6A39B000h
foo_uie_ptb                      loaded at 01CF0000h - 01D15000h
foo_cmd_playlist                loaded at 029A0000h - 029A9000h
MSVCR80                          loaded at 71190000h - 7122B000h
foo_facets                      loaded at 02B00000h - 02B81000h
MSIMG32                          loaded at 74070000h - 74075000h
foo_uie_typefind                loaded at 02A70000h - 02AA0000h
foo_out_asio                    loaded at 02BC0000h - 02BF6000h
foo_dsp_downmix                  loaded at 02E60000h - 02E98000h
libfftw3f-3                      loaded at 63740000h - 6380B000h
foo_run                          loaded at 02EA0000h - 02EFF000h
foo_httpcontrol                  loaded at 02F10000h - 02F5A000h
WSOCK32                          loaded at 742E0000h - 742E7000h
MPR                              loaded at 72150000h - 72163000h
foo_dsp_vst                      loaded at 02F60000h - 02F82000h
foo_textdisplay                  loaded at 69DD0000h - 69E0F000h
foo_channel_mixer                loaded at 02FB0000h - 02FEA000h
foo_dsp_vlevel                  loaded at 02E30000h - 02E3B000h
foo_mouse_gesture                loaded at 03000000h - 03029000h
foo_grabber_python              loaded at 69D70000h - 69DC7000h
python25                        loaded at 1E000000h - 1E208000h
MSVCR71                          loaded at 7C360000h - 7C3B6000h
foo_dsp_span                    loaded at 69D40000h - 69D6E000h
foo_uie_tagger_mod              loaded at 030F0000h - 03131000h
foo_exvar                        loaded at 030A0000h - 030C8000h
foo_unpack                      loaded at 03140000h - 0316E000h
foo_utils                        loaded at 69CF0000h - 69D34000h
foo_dsp_fsurround                loaded at 03270000h - 032A1000h
foo_dsp_mm                      loaded at 03500000h - 03541000h
foo_menu_addons                  loaded at 031B0000h - 031D5000h
foo_input_std                    loaded at 03710000h - 03851000h
foo_masstag                      loaded at 03560000h - 035B4000h
foo_ui_columns                  loaded at 03920000h - 03A90000h
foo_input_adplug                loaded at 03860000h - 038E1000h
foo_dbsearch_api_demo            loaded at 035C0000h - 035E1000h
foo_random                      loaded at 03600000h - 03639000h
foo_cuesheet_creator            loaded at 03680000h - 036AC000h
foo_dbsearch                    loaded at 03A90000h - 03B00000h
foo_input_alac                  loaded at 036D0000h - 036F0000h
foo_dsp_loudspeakereq            loaded at 03C50000h - 03C7C000h
foo_extm3u                      loaded at 03B00000h - 03B1D000h
foo_input_ofr                    loaded at 03C80000h - 03CBD000h
OptimFROG                        loaded at 03CC0000h - 03CF2000h
foo_abx                          loaded at 03D50000h - 03D82000h
foo_uie_albumlist                loaded at 03DD0000h - 03E13000h
foo_input_monkey                loaded at 03E20000h - 03E68000h
foo_skip                        loaded at 69CD0000h - 69CED000h
foo_midi                        loaded at 03FA0000h - 0404C000h
foo_scheduler                    loaded at 04050000h - 040EF000h
foo_navigator                    loaded at 03E70000h - 03EA4000h
foo_playcount                    loaded at 03EB0000h - 03EE0000h
foo_jesus                        loaded at 69CB0000h - 69CCC000h
foo_lyricsdb                    loaded at 03F30000h - 03F5F000h
foo_psf                          loaded at 04320000h - 043F6000h
foo_biometric                    loaded at 04160000h - 04197000h
FooID                            loaded at 040F0000h - 0410A000h
foo_input_ht                    loaded at 04620000h - 04729000h
foo_uie_bookmarks                loaded at 04200000h - 04261000h
foo_input_avs                    loaded at 041A0000h - 041C0000h
foo_dsp_std                      loaded at 04280000h - 042C9000h
foo_dsp_xover                    loaded at 04480000h - 04502000h
foo_cuefilter                    loaded at 69CA0000h - 69CAD000h
MSVCR90                          loaded at 70550000h - 705F3000h
foo_uie_library_tree            loaded at 04400000h - 04457000h
foo_scrobblecharts              loaded at 04550000h - 04583000h
foo_out_wasapi                  loaded at 04510000h - 04536000h
foo_uie_wsh_panel_mod            loaded at 69C00000h - 69C92000h
foo_gep                          loaded at 04760000h - 04802000h
foo_uie_panel_splitter          loaded at 04840000h - 04892000h
foo_playlist_playback_attribute  loaded at 048A0000h - 048CE000h
foo_np_simple                    loaded at 69BD0000h - 69BFE000h
foo_uie_console                  loaded at 048D0000h - 048EA000h
foo_bitcompare                  loaded at 048F0000h - 04918000h
foo_playlist_bind                loaded at 04960000h - 04992000h
foo_albumlist                    loaded at 049A0000h - 049FB000h
foo_dsp_crossfader              loaded at 04A10000h - 04A43000h
foo_texttools                    loaded at 69B90000h - 69BC3000h
foo_dsp_dolbyhp                  loaded at 69B60000h - 69B82000h
VERSION                          loaded at 74F30000h - 74F39000h
foo_osd                          loaded at 056B0000h - 056E6000h
foo_dsp_delta                    loaded at 05700000h - 0571F000h
foo_dsp_resampler                loaded at 05750000h - 05788000h
foo_musicbrainz                  loaded at 69B00000h - 69B5C000h
WINHTTP                          loaded at 72DE0000h - 72E38000h
webio                            loaded at 72D90000h - 72DDF000h
foo_dsp_winamp                  loaded at 05800000h - 05828000h
foo_hotness                      loaded at 05860000h - 0588C000h
foo_new_file_stamper_mod        loaded at 058C0000h - 058E9000h
foo_w7shell                      loaded at 058F0000h - 0592B000h
foo_converter                    loaded at 05A40000h - 05AAC000h
foo_default_videoplayer          loaded at 058A0000h - 058AD000h
foo_input_dts                    loaded at 05B00000h - 05B6A000h
foo_dockable_panels              loaded at 05990000h - 059C3000h
foo_rgscan                      loaded at 059E0000h - 05A2E000h
foo_playcount_sql                loaded at 69AC0000h - 69AFA000h
MSVCP90                          loaded at 70600000h - 7068E000h
foo_vis_shpeck                  loaded at 69A80000h - 69ABF000h
foo_ac3                          loaded at 05BE0000h - 05C10000h
foo_fileops                      loaded at 05C20000h - 05C66000h
foo_freedb2                      loaded at 05CC0000h - 05D01000h
foo_chacon                      loaded at 69A60000h - 69A80000h
foo_verifier                    loaded at 05C70000h - 05CA9000h
foo_uie_vis_peakmeter_spectrum  loaded at 05D10000h - 05D4F000h
foo_uie_lyrics                  loaded at 05DC0000h - 05E1D000h
foo_ui_std                      loaded at 05F50000h - 0605E000h
foo_convolve                    loaded at 060B0000h - 06101000h
foo_uie_lyrics_panel            loaded at 06150000h - 061B4000h
foo_dsp_tube                    loaded at 05E20000h - 05E46000h
foo_dsp_soundtouch              loaded at 05E60000h - 05E87000h
foo_input_tak                    loaded at 69A10000h - 69A53000h
tak_deco_lib                    loaded at 05EB0000h - 05ECC000h
foo_runcmd                      loaded at 061C0000h - 061F4000h
foo_uie_biography                loaded at 06230000h - 06280000h
USERENV                          loaded at 75090000h - 750A7000h
profapi                          loaded at 75A30000h - 75A3B000h
ntmarta                          loaded at 73F60000h - 73F81000h
WLDAP32                          loaded at 75EE0000h - 75F25000h
LINKINFO                        loaded at 718C0000h - 718C9000h
apphelp                          loaded at 75960000h - 759AB000h
gameux                          loaded at 71400000h - 71678000h
XmlLite                          loaded at 744E0000h - 7450F000h
wer                              loaded at 71850000h - 718B2000h
ntshrui                          loaded at 71B50000h - 71BBF000h
srvcli                          loaded at 758B0000h - 758C9000h
cscapi                          loaded at 71BC0000h - 71BCB000h
slc                              loaded at 73E30000h - 73E3A000h
CRYPTSP                          loaded at 754A0000h - 754B6000h
rsaenh                          loaded at 75250000h - 7528B000h
WindowsCodecs                    loaded at 743E0000h - 744DB000h
SXS                              loaded at 759C0000h - 75A1F000h
jscript                          loaded at 69950000h - 69A01000h
pdm                              loaded at 698F0000h - 69946000h
RpcRtRemote                      loaded at 75A20000h - 75A2E000h
msdbg2                          loaded at 698A0000h - 698E2000h
winroll                          loaded at 063D0000h - 063D7000h
dsp_3dspatialsurround            loaded at 06B20000h - 06B84000h
explorerframe                    loaded at 71D60000h - 71ECE000h
DUser                            loaded at 745C0000h - 745EF000h
DUI70                            loaded at 745F0000h - 746A1000h
_socket                          loaded at 067C0000h - 067CD000h
mswsock                          loaded at 75460000h - 7549C000h
wshtcpip                        loaded at 74FC0000h - 74FC5000h
sud                              loaded at 697E0000h - 6989B000h
ADVPACK                          loaded at 697B0000h - 697DF000h
sqlceoledb35                    loaded at 7D400000h - 7D42B000h
sqlceer35EN                      loaded at 06B90000h - 06BB5000h
sqlcese35                        loaded at 7D550000h - 7D5A8000h
sqlceqp35                        loaded at 7D750000h - 7D7EE000h
oledb32                          loaded at 68700000h - 687D4000h
MSDART                          loaded at 69700000h - 6971F000h
bcrypt                          loaded at 755F0000h - 75607000h
OLEDB32R                        loaded at 69560000h - 69574000h
avrt                            loaded at 73FB0000h - 73FB7000h
AUDIOSES                        loaded at 6D9D0000h - 6DA06000h
windowscodecsext                loaded at 69500000h - 69533000h
msxml6                          loaded at 72400000h - 72557000h
mscms                            loaded at 719F0000h - 71A69000h
tiptsf                          loaded at 713A0000h - 713F8000h
EhStorShell                      loaded at 71C50000h - 71C81000h
cscui                            loaded at 71BE0000h - 71C4A000h
CSCDLL                          loaded at 71BD0000h - 71BD9000h
msls31                          loaded at 71780000h - 717AA000h
StructuredQuery                  loaded at 68540000h - 6859C000h
Secur32                          loaded at 75920000h - 75928000h
SSPICLI                          loaded at 75940000h - 7595A000h
actxprxy                        loaded at 71900000h - 7194E000h
ieproxy                          loaded at 6A500000h - 6A52B000h
SearchFolder                    loaded at 692F0000h - 6938F000h
thumbcache                      loaded at 67B90000h - 67BA6000h
PSAPI                            loaded at 770B0000h - 770B5000h
SHDOCVW                          loaded at 718D0000h - 718FD000h
ieframe                          loaded at 6B7A0000h - 6C21B000h
OLEACC                          loaded at 6B760000h - 6B79C000h
samcli                          loaded at 74280000h - 7428F000h
SAMLIB                          loaded at 74980000h - 74992000h
netutils                        loaded at 742A0000h - 742A9000h
NetworkExplorer                  loaded at 70DB0000h - 70F48000h
drprov                          loaded at 71730000h - 71738000h
WINSTA                          loaded at 755A0000h - 755C9000h
ntlanman                        loaded at 70D90000h - 70DA4000h
davclnt                          loaded at 70D70000h - 70D86000h
DAVHLPR                          loaded at 70D60000h - 70D68000h
wkscli                          loaded at 74290000h - 7429F000h
PortableDeviceApi                loaded at 6C580000h - 6C609000h
NetworkItemFactory              loaded at 749B0000h - 749BD000h
dtsh                            loaded at 749A0000h - 749AB000h
FirewallAPI                      loaded at 74F40000h - 74FB6000h
WINTRUST                        loaded at 75B30000h - 75B5D000h
EhStorAPI                        loaded at 69580000h - 695A2000h
AcLayers                        loaded at 67930000h - 679BD000h
WINSPOOL                        loaded at 71340000h - 71391000h
AcSpecfc                        loaded at 66E20000h - 66E9A000h
DDRAW                            loaded at 688A0000h - 68987000h
DCIMAN32                        loaded at 6B420000h - 6B426000h
msi                              loaded at 70F50000h - 71190000h
SHUNIMPL                        loaded at 694F0000h - 694F6000h
MSONSEXT                        loaded at 49090000h - 491E5000h
pkmws                            loaded at 49970000h - 49985000h
hlink                            loaded at 689D0000h - 689E8000h
npmproxy                        loaded at 717B0000h - 717B8000h
dnsapi                          loaded at 75330000h - 75374000h
iphlpapi                        loaded at 72A50000h - 72A6C000h
WINNSI                          loaded at 72A40000h - 72A47000h
nsextint                        loaded at 492E0000h - 492EC000h
FunDisc                          loaded at 6A8F0000h - 6A91B000h
ATL                              loaded at 73E60000h - 73E74000h
fdwcn                            loaded at 687E0000h - 687F7000h
wcnapi                          loaded at 67910000h - 67929000h
fdWNet                          loaded at 689C0000h - 689C9000h
dfscli                          loaded at 66E10000h - 66E1D000h
browcli                          loaded at 72D60000h - 72D6D000h

Stack dump analysis:
Address: 7715FFBCh (OLEAUT32+1FFBCh), symbol: "VarI4FromR8" (+144h)
Address: 77155108h (OLEAUT32+15108h), symbol: "DispCallFunc" (+263h)
Address: 77155597h (OLEAUT32+15597h), symbol: "DispCallFunc" (+6F2h)
Address: 77154D67h (OLEAUT32+14D67h), symbol: "DispInvoke" (+23Ch)
Address: 0137FE58h (foobar2000+EFE58h)
Address: 778FE7D5h (ntdll+1E7D5h), symbol: "DbgPrint" (+37Bh)
Address: 7793464Fh (ntdll+5464Fh), symbol: "RtlTryEnterCriticalSection" (+B8Ch)
Address: 77934260h (ntdll+54260h), symbol: "RtlTryEnterCriticalSection" (+79Dh)
Address: 69C0D82Ah (foo_uie_wsh_panel_mod+D82Ah)
Address: 69975A40h (jscript+25A40h), symbol: "DllGetClassObject" (+7EECh)
Address: 699731ECh (jscript+231ECh), symbol: "DllGetClassObject" (+5698h)
Address: 69975994h (jscript+25994h), symbol: "DllGetClassObject" (+7E40h)
Address: 69975907h (jscript+25907h), symbol: "DllGetClassObject" (+7DB3h)
Address: 7715706Bh (OLEAUT32+1706Bh), symbol: "LHashValOfNameSysA" (+35Eh)
Address: 69976252h (jscript+26252h), symbol: "DllGetClassObject" (+86FEh)
Address: 6997A1F3h (jscript+2A1F3h), symbol: "DllGetClassObject" (+C69Fh)
Address: 69975446h (jscript+25446h), symbol: "DllGetClassObject" (+78F2h)
Address: 699757D0h (jscript+257D0h), symbol: "DllGetClassObject" (+7C7Ch)
Address: 69950001h (jscript+1h)
Address: 69975877h (jscript+25877h), symbol: "DllGetClassObject" (+7D23h)
Address: 6997A235h (jscript+2A235h), symbol: "DllGetClassObject" (+C6E1h)
Address: 747774E8h (gdiplus+C74E8h), symbol: "GdipCreateSolidFill" (+804BCh)
Address: 7470AA0Eh (gdiplus+5AA0Eh), symbol: "GdipCreateSolidFill" (+139E2h)
Address: 74823480h (gdiplus+173480h), symbol: "GdipCreateSolidFill" (+12C454h)
Address: 7470B62Dh (gdiplus+5B62Dh), symbol: "GdipCreateSolidFill" (+14601h)
Address: 770669CBh (GDI32+69CBh), symbol: "DeleteObject" (+117h)
Address: 77066B6Fh (GDI32+6B6Fh), symbol: "DeleteDC" (+19Ch)
Address: 7474A0BDh (gdiplus+9A0BDh), symbol: "GdipCreateSolidFill" (+53091h)
Address: 69960001h (jscript+10001h)
Address: 6996560Bh (jscript+1560Bh)
Address: 699E69E4h (jscript+969E4h), symbol: "DllRegisterServer" (+199D3h)
Address: 69976554h (jscript+26554h), symbol: "DllGetClassObject" (+8A00h)
Address: 699658C2h (jscript+158C2h)
Address: 699764B2h (jscript+264B2h), symbol: "DllGetClassObject" (+895Eh)
Address: 69965A0Ch (jscript+15A0Ch)
Address: 6995FBF9h (jscript+FBF9h)
Address: 69977B0Dh (jscript+27B0Dh), symbol: "DllGetClassObject" (+9FB9h)
Address: 699E69E4h (jscript+969E4h), symbol: "DllRegisterServer" (+199D3h)
Address: 69960098h (jscript+10098h)
Address: 74725957h (gdiplus+75957h), symbol: "GdipCreateSolidFill" (+2E92Bh)
Address: 69976AF5h (jscript+26AF5h), symbol: "DllGetClassObject" (+8FA1h)
Address: 699E69E4h (jscript+969E4h), symbol: "DllRegisterServer" (+199D3h)
Address: 699E69E4h (jscript+969E4h), symbol: "DllRegisterServer" (+199D3h)
Address: 6995FE4Eh (jscript+FE4Eh)
Address: 699E69E4h (jscript+969E4h), symbol: "DllRegisterServer" (+199D3h)
Address: 6995DF84h (jscript+DF84h)
Address: 6995DECFh (jscript+DECFh)
Address: 69960322h (jscript+10322h)
Address: 6995DD88h (jscript+DD88h)
Address: 699E69E4h (jscript+969E4h), symbol: "DllRegisterServer" (+199D3h)
Address: 6995810Dh (jscript+810Dh)
Address: 69C0BC3Bh (foo_uie_wsh_panel_mod+BC3Bh)
Address: 69C6B860h (foo_uie_wsh_panel_mod+6B860h), symbol: "foobar2000_get_interface" (+43CA0h)
Address: 69C0D123h (foo_uie_wsh_panel_mod+D123h)
Address: 69C6E8E0h (foo_uie_wsh_panel_mod+6E8E0h), symbol: "foobar2000_get_interface" (+46D20h)
Address: 75F40281h (USER32+10281h), symbol: "SystemParametersInfoW" (+10Ch)
Address: 75F40293h (USER32+10293h), symbol: "SystemParametersInfoW" (+11Eh)
Address: 69C674A8h (foo_uie_wsh_panel_mod+674A8h), symbol: "foobar2000_get_interface" (+3F8E8h)
Address: 69C0C3A6h (foo_uie_wsh_panel_mod+C3A6h)
Address: 75F40293h (USER32+10293h), symbol: "SystemParametersInfoW" (+11Eh)
Address: 75F44706h (USER32+14706h), symbol: "PtInRect" (+13Bh)
Address: 75F44733h (USER32+14733h), symbol: "PtInRect" (+168h)
Address: 7792772Eh (ntdll+4772Eh), symbol: "KiUserCallbackDispatcher" (+2Eh)
Address: 779276E0h (ntdll+476E0h), symbol: "KiUserApcDispatcher" (+48h)
Address: 063D1C0Fh (winroll+1C0Fh), symbol: "WR_InvertAlpha" (+3F5h)
Address: 75F66B87h (USER32+36B87h), symbol: "SetWindowsHookExA" (+21h)
Address: 75F6636Eh (USER32+3636Eh), symbol: "DrawFocusRect" (+302h)
Address: 75F6634Bh (USER32+3634Bh), symbol: "DrawFocusRect" (+2DFh)
Address: 75F461F2h (USER32+161F2h), symbol: "wsprintfA" (+180h)
Address: 75F4751Fh (USER32+1751Fh), symbol: "GetWindowLongW" (+2Bh)
Address: 75F4752Bh (USER32+1752Bh), symbol: "GetWindowLongW" (+37h)
Address: 69C68E83h (foo_uie_wsh_panel_mod+68E83h), symbol: "foobar2000_get_interface" (+412C3h)
Address: 75F96FEFh (USER32+66FEFh), symbol: "InvertRect" (+CC0h)
Address: 69C50475h (foo_uie_wsh_panel_mod+50475h), symbol: "foobar2000_get_interface" (+288B5h)
Address: 75F4E782h (USER32+1E782h), symbol: "gapfnScSendMessage" (+1FAh)
Address: 75F48645h (USER32+18645h), symbol: "SetPropW" (+96h)
Address: 69C502E0h (foo_uie_wsh_panel_mod+502E0h), symbol: "foobar2000_get_interface" (+28720h)
Address: 75F4E803h (USER32+1E803h), symbol: "gapfnScSendMessage" (+27Bh)
Address: 75F96FEFh (USER32+66FEFh), symbol: "InvertRect" (+CC0h)
Address: 75F47425h (USER32+17425h), symbol: "PeekMessageW" (+1ADh)
Address: 69C502E0h (foo_uie_wsh_panel_mod+502E0h), symbol: "foobar2000_get_interface" (+28720h)
Address: 75F44733h (USER32+14733h), symbol: "PtInRect" (+168h)
Address: 75F96FEFh (USER32+66FEFh), symbol: "InvertRect" (+CC0h)
Address: 75F47481h (USER32+17481h), symbol: "PeekMessageW" (+209h)
Address: 69C502E0h (foo_uie_wsh_panel_mod+502E0h), symbol: "foobar2000_get_interface" (+28720h)
Address: 7792772Eh (ntdll+4772Eh), symbol: "KiUserCallbackDispatcher" (+2Eh)
Address: 779276E0h (ntdll+476E0h), symbol: "KiUserApcDispatcher" (+48h)
Address: 69C502E0h (foo_uie_wsh_panel_mod+502E0h), symbol: "foobar2000_get_interface" (+28720h)
Address: 75F473DAh (USER32+173DAh), symbol: "PeekMessageW" (+162h)
Address: 75F484E3h (USER32+184E3h), symbol: "FillRect" (+67h)
Address: 75F48372h (USER32+18372h), symbol: "DrawTextW" (+52h)
Address: 75F96FEFh (USER32+66FEFh), symbol: "InvertRect" (+CC0h)
Address: 75F4EED0h (USER32+1EED0h), symbol: "DispatchMessageW" (+Fh)
Address: 69C502E0h (foo_uie_wsh_panel_mod+502E0h), symbol: "foobar2000_get_interface" (+28720h)
Address: 75F66251h (USER32+36251h), symbol: "DrawFocusRect" (+1E5h)
Address: 75F65C82h (USER32+35C82h), symbol: "GetActiveWindow" (+BFh)
Address: 75F8E2F5h (USER32+5E2F5h), symbol: "SoftModalMessageBox" (+68Ah)
Address: 75F30000h (USER32+0h), symbol: "Ordinal2390" (+0h)
Address: 75F8D868h (USER32+5D868h), symbol: "MB_GetString" (+F48h)
Address: 75F8E879h (USER32+5E879h), symbol: "SoftModalMessageBox" (+C0Eh)
Address: 75F300E0h (USER32+E0h), symbol: "Ordinal2390" (+E0h)
Address: 778FE7D5h (ntdll+1E7D5h), symbol: "DbgPrint" (+37Bh)
Address: 75F8E8CCh (USER32+5E8CCh), symbol: "SoftModalMessageBox" (+C61h)
Address: 75F300E0h (USER32+E0h), symbol: "Ordinal2390" (+E0h)
Address: 778FE7D5h (ntdll+1E7D5h), symbol: "DbgPrint" (+37Bh)
Address: 7793C9DAh (ntdll+5C9DAh), symbol: "LdrGetProcedureAddressEx" (+2B3h)
Address: 7793C840h (ntdll+5C840h), symbol: "LdrGetProcedureAddressEx" (+119h)
Address: 7793C9E7h (ntdll+5C9E7h), symbol: "LdrGetProcedureAddressEx" (+2C0h)
Address: 779335D7h (ntdll+535D7h), symbol: "RtlAllocateHeap" (+2DCh)
Address: 75F30000h (USER32+0h), symbol: "Ordinal2390" (+0h)
Address: 779368ADh (ntdll+568ADh), symbol: "RtlInitAnsiStringEx" (+4Dh)
Address: 7793CA18h (ntdll+5CA18h), symbol: "LdrGetProcedureAddress" (+18h)
Address: 75F30000h (USER32+0h), symbol: "Ordinal2390" (+0h)
Address: 75F8E9ACh (USER32+5E9ACh), symbol: "MessageBoxTimeoutW" (+7Fh)
Address: 75F8EA56h (USER32+5EA56h), symbol: "MessageBoxTimeoutA" (+A1h)
Address: 75F3B49Eh (USER32+B49Eh), symbol: "GetUserObjectInformationA" (+0h)

WSH Panel Mod

Reply #260
@2E7AH :

if Panel Stack Splitter use, be sure that there are no wsh panels overlapping !

-> putting a panel over a wsh panel is not clean and cause crashes (be carefull if you are using splitters like Panel Stack Splitter that allow you to place panels where you want)

WSH Panel Mod

Reply #261
I use only WSH panel as toolbar for rating. I don't have PSS in my layout


WSH Panel Mod

Reply #263
@2E7AH:
I think it because of the wrong order of how to init/uninit active scripting engine...
I'll upload a 'fixed' version soon.

WSH Panel Mod

Reply #264
I extended my text box to a hole set of object for editing tags, which I hereby share with all of you. Any comments are ofcourse welcome.

The following code contains:

- InputBox (Title, Tag, Multivalue, x, y, Title width, Text box width, Font size)
- Keywords (Title, Tag, List of values, List of descriptions, x, y, Title width, Max width of values, Font size)
- CheckBox(Title, Tag, x, y, Title width, Font size)
- RadioBox(Title, Tag, List of values, List of descriptions, x, y, Title width, Value width [if not show all], Font size, Show all)
- InputRating (Title, Tag, Maximum rating, x, y, Title width, Font size)

Code: [Select]
inputobjects = [];

function InputBox(title, tag, multivalue, x, y, tw, tbw, h) {
this.type = "ib";
this.title = title;
this.tag = tag;
this.multivalue = multivalue;
this.editsep = "; ";
this.content = new Array();
this.contentedit = "";
this.contenteditbak = "";
this.nrvalues = 0;
this.tleft = x;
this.left = x + tw;
this.top = y;
this.tw = tw;
this.w = tbw;
this.h = 0;
this.fh = h;
this.margin = 0.3 * h;
this.colourb = RGB(255, 255, 255);
this.colourba = RGB(255, 255, 200);
this.colourt = RGB(255, 255, 255);
this.colourttb = RGB(0, 0, 0);
this.active = false;
this.specialchar = "";
this.gfont = gdi.Font("Arial Unicode MS", this.fh, 0);

inputobjects.push(this);

this.draw = function (gr) {
sepcolour = RGB(255, 127, 127);
flags = 0x00000000;
flagsl = 0x00000002;
nfo = gr.MeasureString("n", this.gfont, 0, 0, 10000, 100, 0);
sepinfo = gr.MeasureString(this.editsep, this.gfont, 0, 0, 10000, 100, 0);
this.h = nfo.Height;

//title
gr.GdiDrawText(this.title, this.gfont, this.colourt, this.tleft, this.top, this.tw-this.margin, this.h, 0);

if (!this.active) {
gr.FillSolidRect(this.left, this.top, this.w, this.h, this.colourb);

//content not active
pos = 0;
tmpstr = "";
for (n = 0 ; n < this.nrvalues; n++) {
if (n != 0) {
tmpstr += this.editsep;
if (pos < (this.w - 2 * this.margin)) gr.GdiDrawText(this.editsep, this.gfont, sepcolour, this.left + this.margin + pos, this.top, this.w - 2 * this.margin - pos, this.h, flags);
info = gr.MeasureString(this.editsep, this.gfont, 0, 0, 10000, 100, 0);
pos += info.Width;
if (tmpstr.slice(-1) == " ") pos += 0.5*nfo.Width;
}
tmpstr += this.content[n];
if (pos < (this.w - 2 * this.margin)) gr.GdiDrawText(this.content[n], this.gfont, this.colourttb, this.left + this.margin + pos, this.top, this.w - 2 * this.margin - pos, this.h, flags);
info = gr.MeasureString(this.content[n], this.gfont, 0, 0, 10000, 100, 0);
pos += info.Width;
}
}
else {
gr.FillSolidRect(this.left, this.top, this.w, this.h, this.colourba);

//content active
info = gr.MeasureString(this.contentedit, this.gfont, 0, 0, 10000, 100, 0);
flg = flags;
befcur = this.contentedit.slice(0, this.cursor);
tbw = this.w
cursorinfo = gr.MeasureString(befcur, this.gfont, 0, 0, 10000, 100, 0);
cend = false;
drwtxt = this.contentedit;
if (cursorinfo.Width > (this.w - this.margin - nfo.Width)) {
flg = flagsl;
cend = true;
drwtxt = befcur;
tbw -= 0.5 * nfo.Width;
}
gr.GdiDrawText(drwtxt, this.gfont, this.colourttb, this.left + this.margin, this.top, tbw - 2 * this.margin, this.h, flg);

//cursor
if (cend)  {
gr.FillSolidRect(this.left + tbw - this.margin, this.top + 1.1 * this.fh, 0.5 * nfo.Width, 2, this.colourttb);
}
else {
cursorinfo=gr.MeasureString(this.contentedit.slice(0, this.cursor), this.gfont, 0, 0, 10000, 100, 0);
cleft = cursorinfo.Width;
if (befcur.slice(-1) == " ") cleft += 0.5*nfo.Width;
gr.FillSolidRect(this.left + this.margin + cleft, this.top + 1.1 * this.fh, 0.5 * nfo.Width, 2, this.colourttb);
}
}
}

this.onMove = function (x, y) {}

this.onClick = function (x, y) {
if ((this.left < x) && (x < (this.left + this.w)) && (this.top < y) && (y < (this.top + this.h))) {
if (!this.active) {
this.active = true;
this.cursor = this.contentedit.length;
this.special = false;
}
}
else {
this.save();
}
}

this.loadeditstr = function () {
tmpstr = "";
for (n = 0 ; n < this.nrvalues; n++) {
if (n != 0) tmpstr += this.editsep;
tmpstr += this.content[n];
}
this.contenteditbak = this.contentedit;
this.contentedit = tmpstr;
}

this.spliteditstr = function () {
if (this.multivalue) {
tmparr = new Array ();
tmpstr = this.contentedit;
editseptrim = this.editsep;
if (editseptrim.slice(0, 1) == " ") editseptrim = editsepttrim.slice(1);
if (editseptrim.slice(-1) == " ") editseptrim = editseptrim.slice(0, editseptrim.length - 1);
m = 0;
do {
seppos = tmpstr.indexOf(editseptrim);
if (seppos == -1) {
tmparr[m] = tmpstr;
}
else {
tmparr[m] = tmpstr.slice(0, seppos);
tmpstr = tmpstr.slice(seppos + 1);
if (tmpstr.slice(0, 1) == " ") tmpstr = tmpstr.slice(1);
}
if (tmparr[m].slice(-1) == " ") tmparr[m] = tmparr[m].slice(0, tmparr[m].Length - 1);
m++;
} while (seppos != -1);
this.content = tmparr;
this.nrvalues = m;
}
else
this.content[0] = this.contentedit;
}

this.load = function () {
idx = metadata.MetaFind(this.tag);
if (idx > metadata.MetaCount) this.nrvalues = 0; else this.nrvalues = metadata.MetaValueCount(idx);
for (n = 0 ; n < this.nrvalues; n++) this.content[n] = metadata.MetaValue(idx, n);
this.active = false;
this.loadeditstr();
}

this.save = function () {
if (this.contentedit != this.contenteditbak && this.active) {
this.spliteditstr();
if (this.multivalue) {
metadata.MetaRemoveField(this.tag);
idx = metadata.MetaAdd(this.tag, this.content[this.nrvalues -1]);
for (n = this.nrvalues - 2 ; n > -1; n--) {
metadata.MetaInsertValue(idx, 0, this.content[n]);
}
}
else
metadata.MetaSet (this.tag, this.content[0]);
g_handle.UpdateFileInfo(metadata);
this.active = false;
this.loadeditstr();
reload = true;
}
else
this.active = false;
}
}

function Keywords(title, tag, list, listlong, x, y, tw, kw, h) {
this.type = "kw";
this.title = title;
this.tag = tag;
this.list = list;
this.listlong = listlong;
this.content = new Array();
this.changed = false;
this.errorstr = "";
this.errorcontent = new Array();
this.nrvalues = 0;
this.tleft = x;
this.left = new Array();
this.top = y;
this.tw = tw;
this.kw = kw;
this.width = new Array();
this.h = 0;
this.fh = h;
this.margin = 0.3 * h;
this.scroll = 0;
this.maxscroll = 0;
this.scrollpbut = false;
this.scrollnbut = false;
this.colourkw = RGB(229, 229, 229);
this.colourkwh = RGB(255, 255, 200);
this.colourt = RGB(255, 255, 255);
this.hover = -1;
this.hoverbut = -1;
this.emptyhover = false;
this.emptyhoverbut = false;
this.gfont = gdi.Font("Arial Unicode MS", this.fh, 0);
this.gfontbut = gdi.Font("Arial Unicode MS", this.fh / 1.3, 0);

inputobjects.push(this);

this.draw = function (gr) {
flags = 0x00000000;
flagsl = 0x00000002;
flagsb = 0x00000001;
nfo = gr.MeasureString("n", this.gfont, 0, 0, 10000, 100, 0);
nfob = gr.MeasureString("◀", this.gfontbut, 0, 0, 10000, 100, 0);
nfof = gr.MeasureString("▶", this.gfontbut, 0, 0, 10000, 100, 0);
nfop = gr.MeasureString("+", this.gfontbut, 0, 0, 10000, 100, 0);
nfom = gr.MeasureString("−", this.gfontbut, 0, 0, 10000, 100, 0);
this.h = nfo.Height;

//title
gr.GdiDrawText(this.title, this.gfont, this.colourt, this.tleft, this.top, this.tw-this.margin, this.h, 0);

//values
leftstart = this.tleft + this.tw;
pos = 0;
for (i = 0 ; i < this.nrvalues; i++) {
this.left[i] = leftstart + pos;
info = gr.MeasureString(this.content[i], this.gfont, 0, 0, 10000, 100, 0);
this.width[i] = info.Width;
if (this.width[i] < (4 * this.h / 3)) this.width[i] = 4* this.h / 3;
pos += this.width[i];
this.maxscroll = pos - this.kw;
if (this.hover == i) colour = this.colourkwh; else colour = this.colourkw;
if (this.errorcontent[i]) colour = RGB(255, 0, 0);
this.left[i] -= this.scroll;
fl = flags;
if (this.left[i] < leftstart) {
fl = flagsl;
this.width[i] += this.left[i] - leftstart;
this.left[i] = leftstart;
}
if ((this.left[i] + this.width[i]) > (leftstart + this.kw)) this.width[i] = leftstart + this.kw - this.left[i];
if (this.width[i] >= 0) {
gr.GdiDrawText(this.content[i], this.gfont, colour, this.left[i], this.top, this.width[i], this.h, fl);
}
pos += nfo.Width + this.margin;
}

//menu
if (this.hover != -1 && !this.scrollpbut && !this.scrollnbut) {
gr.DrawLine(this.left[this.hover], this.top, this.left[this.hover] + this.width[this.hover], this.top, 1, this.colourkwh);
if (this.hoverbut == 0) {
gr.DrawRect(this.left[this.hover], this.top, this.h / 3, this.h / 3, 1, this.colourkwh);
colour = this.colourkwh;
}
else
colour = this.colourkw;
gr.DrawLine(this.left[this.hover], this.top, this.left[this.hover] + this.h / 3, this.top, 1, this.colourkwh);
gr.GdiDrawText("◀", this.gfontbut, colour, this.left[this.hover] + (this.h / 3 - nfob.width) / 2, this.top - 0.22 * this.h, this.h / 3, this.h, 0);
if (this.hoverbut == 1) {
gr.DrawRect(this.left[this.hover] + this.h / 3, this.top, this.h / 3, this.h / 3, 1, this.colourkwh);
colour = this.colourkwh;
}
else
colour = this.colourkw;
gr.DrawLine(this.left[this.hover] + this.h / 3, this.top, this.left[this.hover] + 2 * this.h / 3, this.top, 1, this.colourkwh);
gr.GdiDrawText("▶", this.gfontbut, colour, this.left[this.hover] + this.h / 3 + (this.h / 3 - nfof.width) / 2, this.top - 0.22 * this.h, this.h / 3, this.h, 0);
if (this.hoverbut == 2) {
gr.DrawRect(this.left[this.hover] + this.width[this.hover] - 2 * this.h / 3, this.top, this.h / 3, this.h / 3, 1, this.colourkwh);
colour = this.colourkwh;
}
else
colour = this.colourkw;
gr.DrawLine(this.left[this.hover] + this.width[this.hover] - 2 * this.h / 3, this.top, this.left[this.hover] + this.width[this.hover] - this.h / 3, this.top, 1, this.colourkwh);
gr.GdiDrawText("+", this.gfontbut, colour, this.left[this.hover] + this.width[this.hover]  - 2 * this.h / 3 + (this.h / 3 - nfop.width) / 2, this.top - 0.22 * this.h, this.h / 3, this.h, 0);
if (this.hoverbut == 3) {
gr.DrawRect(this.left[this.hover] + this.width[this.hover] - this.h / 3, this.top, this.h / 3, this.h / 3, 1, this.colourkwh);
colour = this.colourkwh;
}
else
colour = this.colourkw;
gr.DrawLine(this.left[this.hover] + this.width[this.hover] - this.h / 3, this.top, this.left[this.hover] + this.width[this.hover], this.top, 1, this.colourkwh);
gr.GdiDrawText("−", this.gfontbut, colour, this.left[this.hover] + this.width[this.hover]  -  this.h / 3 + (this.h / 3 - nfom.width) / 2, this.top - 0.22 * this.h, this.h / 3, this.h, 0);
}

//scroll buttons
if (this.scrollpbut) {
gr.DrawRect(leftstart, this.top + this.h / 4, this.h / 2, this.h / 2, 1, this.colourkwh);
gr.GdiDrawText("◀", this.gfont, this.colourkwh, leftstart, this.top, this.h / 2, this.h, flagsb);
}
if (this.scrollnbut) {
gr.DrawRect(leftstart + this.kw - this.h / 2, this.top + this.h / 4, this.h / 2, this.h / 2, 1, this.colourkwh);
gr.GdiDrawText("▶", this.gfont, this.colourkwh, leftstart + this.kw - this.h / 2, this.top, this.h / 2, this.h, flagsb);
}

//empty
if (this.emptyhover) {
gr.DrawLine(leftstart + this.h / 3, this.top, leftstart + this.kw, this.top, 1, this.colourkwh);

if (this.emptyhoverbut == 0)
colour = this.colourkw;
else {
gr.DrawRect(leftstart, this.top, this.h / 3, this.h / 3, 1, this.colourkwh);
colour = this.colourkwh;
}
gr.DrawLine(leftstart, this.top, leftstart + this.h / 3, this.top, 1, this.colourkwh);
gr.GdiDrawText("+", this.gfontbut, colour, leftstart + (this.h / 3 - nfop.width) / 2, this.top - 0.22 * this.h, this.h / 3, this.h, 0);
}
}

this.onMove = function (x, y) {
this.hover = -1;
this.hoverbut = -1;
this.emptyhover = false;
this.emptyhoverbut = false;
for (i = 0 ; i < this.nrvalues; i++) {
if (this.width[i] >= 0) {
if ((this.left[i] < x) && (x < (this.left[i] + this.width[i])) && (this.top < y) && (y < (this.top + this.h))) {
this.hover = i;
if ((this.left[i] < x) && (x < (this.left[i] + this.h / 3)) && (this.top < y) && (y < (this.top + this.h / 3))) this.hoverbut = 0;
if (((this.left[i] + this.h / 3) < x) && (x < (this.left[i] + 2* this.h / 3) ) && (this.top < y) && (y < (this.top + this.h / 3))) this.hoverbut = 1;
if (((this.left[i] + this.width[i] - 2* this.h / 3) < x) && (x < (this.left[i] + this.width[i]) ) && (this.top < y) && (y < (this.top + this.h / 3))) this.hoverbut = 2;
if (((this.left[i] + this.width[i] - this.h / 3) < x) && (x < (this.left[i] + this.width[i]) ) && (this.top < y) && (y < (this.top + this.h / 3))) this.hoverbut = 3;
}
}
}

if (((this.tleft + this.tw) < x) && (x < (this.tleft + this.tw + this.h / 2)) && ((this.top + this.h / 4) < y) && (y < (this.top + 3 * this.h / 4)) && (this.scroll > 0))  {
this.scrollpbut = true;
this.hover = -1;
this.hoverbut = -1;
}
else
this.scrollpbut = false;
if (((this.tleft + this.tw + this.kw - this.h / 2) < x) && (x < (this.tleft + this.tw + this.kw)) && ((this.top + this.h / 4) < y) && (y < (this.top + 3 * this.h / 4)) && (this.scroll < this.maxscroll))  {
this.scrollnbut = true;
this.hover = -1;
this.hoverbut = -1;
}
else
this.scrollnbut = false;
if (((this.tleft + this.tw) < x) && (x < (this.tleft + this.tw + this.kw)) && (this.top < y) && (y < (this.top + this.h)) && (this.nrvalues == 0)) this.emptyhover = true;
if (((this.tleft + this.tw) < x) && (x < (this.tleft + this.tw + this.h / 3)) && (this.top < y) && (y < (this.top + this.h / 3)) && (this.nrvalues == 0)) this.emptyhoverbut = true;
}

this.onClick = function (x, y) {
tmparr1 = new Array ();
tmparr2 = new Array ();
for (i = 0 ; i < this.nrvalues; i++) {
if (this.hover == i) {

// <
if ((this.hoverbut == 0) && (i != 0)) {
for (j = 0 ; j < this.nrvalues; j++) {
tmparr1[j] = this.content[j];
tmparr2[j] = this.errorcontent[j];
}
tmparr1[i - 1] = this.content[i];
tmparr2[i - 1] = this.errorcontent[i];
tmparr1[i] = this.content[i - 1];
tmparr2[i] = this.errorcontent[i - 1];
for (j = 0 ; j < this.nrvalues; j++) {
this.content[j] = tmparr1[j];
this.errorcontent[j] = tmparr2[j];
}
this.changed = true;
this.save();
window.Repaint();
}

// >
if ((this.hoverbut == 1) && (i < this.nrvalues - 1)) {
for (j = 0 ; j < this.nrvalues; j++) {
tmparr1[j] = this.content[j];
tmparr2[j] = this.errorcontent[j];
}
tmparr1[i + 1] = this.content[i];
tmparr2[i + 1] = this.errorcontent[i];
tmparr1[i] = this.content[i + 1];
tmparr2[i] = this.errorcontent[i + 1];
for (j = 0 ; j < this.nrvalues; j++) {
this.content[j] = tmparr1[j];
this.errorcontent[j] = tmparr2[j];
}
this.changed = true;
this.save();
window.Repaint();
}

// +
if (this.hoverbut == 2) {
var popupmenu = window.CreatePopupMenu();
for (j in this.list) {
popupmenu.AppendMenuItem(0, parseInt(j) + 1, this.listlong[j]);
}
menuret = popupmenu.TrackPopupMenu(x, y);
if (menuret != 0) {
this.nrvalues += 1;
for (j = 0 ; j < this.nrvalues; j++) {
if (j <= i) {
tmparr1[j] = this.content[j];
tmparr2[j] = this.errorcontent[j];
}
if (j == (i + 1)) {
tmparr1[j] = this.listlong[menuret - 1];
tmparr2[j] = false;
}
if (j > (i + 1)) {
tmparr1[j] = this.content[j - 1];
tmparr2[j] = this.errorcontent[j - 1];
}
}
for (j = 0 ; j < this.nrvalues; j++) {
this.content[j] = tmparr1[j];
this.errorcontent[j] = tmparr2[j];
}
}
this.changed = true;
this.save();
window.Repaint();
}

// x
if (this.hoverbut == 3) {
this.nrvalues -= 1;
for (j = 0 ; j < this.nrvalues; j++) {
if (j >= i) tmparr1[j] = this.content[j + 1]; else tmparr1[j] = this.content[j];
if (j >= i) tmparr2[j] = this.errorcontent[j + 1]; else tmparr2[j] = this.errorcontent[j];
}
for (j = 0 ; j < this.nrvalues; j++) {
this.content[j] = tmparr1[j];
this.errorcontent[j] = tmparr2[j];
}
this.changed = true;
this.save();
window.Repaint();
}
}
}

// <<
if (this.scrollpbut) {
this.scroll -= this.h;
if (this.scroll < 0) this.scroll = 0;
window.Repaint();
}

// >>
if (this.scrollnbut) {
this.scroll += this.h;
if (this.scroll > this.maxscroll) this.scroll = this.maxscroll;
window.Repaint();
}

// +
if (this.emptyhoverbut) {
var popupmenu = window.CreatePopupMenu();
for (j in this.list) {
popupmenu.AppendMenuItem(0, parseInt(j) + 1, this.listlong[j]);
}
menuret = popupmenu.TrackPopupMenu(x, y);
if (menuret != 0) {
this.nrvalues += 1;
this.content[0] = this.listlong[menuret - 1];
this.changed = true;
this.save();
window.Repaint();
}
}
}

this.loadkeywords = function () {
for (i = 0 ; i < this.nrvalues; i++) {
this.errorcontent[i] = true;
for (j in this.list) {
if (this.content[i] == this.list[j]) {
this.content[i] = this.listlong[j];
this.errorcontent[i] = false;
}
}
}
}

this.load = function () {
idx = metadata.MetaFind(this.tag);
if (idx > metadata.MetaCount) this.nrvalues = 0; else this.nrvalues = metadata.MetaValueCount(idx);
for (n = 0 ; n < this.nrvalues; n++) this.content[n] = metadata.MetaValue(idx, n);
this.loadkeywords();
this.changed = false;
}

this.save = function () {
if (this.changed) {
metadata.MetaRemoveField(this.tag);
writestr = this.content[this.nrvalues - 1];
if (!this.errorcontent[this.nrvalues -1]) {
for (j in this.list) {
if (this.content[this.nrvalues -1] == this.listlong[j]) writestr = this.list[j];
}
}
if (this.nrvalues != 0) idx = metadata.MetaAdd(this.tag, writestr);
for (n = this.nrvalues - 2 ; n > -1; n--) {
writestr = this.content[n];
if (!this.errorcontent[n]) {
for (j in this.list) {
if (this.content[n] == this.listlong[j]) writestr = this.list[j];
}
}
metadata.MetaInsertValue(idx, 0, writestr);
}
g_handle.UpdateFileInfo(metadata);
reload = true;
}
this.changed = false;
}
}

function CheckBox(title, tag, x, y, tw, h) {
this.type = "cb";
this.title = title;
this.tag = tag;
this.content = 0;
this.changed = false;
this.tleft = x;
this.left = x + tw;
this.top = y;
this.tw = tw;
this.h = 0;
this.fh = h;
this.margin = 0.3 * h;
this.colourkw = RGB(229, 229, 229);
this.colourkwb = RGB(0, 0, 0);
this.colourkwh = RGB(255, 255, 200);
this.colourkwbh = RGB(0, 0, 0);
this.colourkws = RGB(229, 229, 229);
this.colourkwsb = RGB(104, 104, 104);
this.colourkwsh = RGB(255, 255, 200);
this.colourkwsbh = RGB(104, 104, 104);
this.colourt = RGB(255, 255, 255);
this.hover = false;
this.gfont = gdi.Font("Arial Unicode MS", this.fh, 0);

inputobjects.push(this);

this.draw = function (gr) {
flagsb = 0x00000001;
nfo = gr.MeasureString("n", this.gfont, 0, 0, 10000, 100, 0);
this.h = nfo.Height;

//title
gr.GdiDrawText(this.title, this.gfont, this.colourt, this.tleft, this.top, this.tw-this.margin, this.h, 0);

//checkbox
if (this.hover) {
colourback = RGB(255, 0, 0);
colour = this.colourkwh;
txt = "";
if (this.content == 0) {
colourback = this.colourkwbh;
colour = this.colourkwh;
txt = "";
}
if (this.content == 1) {
colourback = this.colourkwsbh;
colour = this.colourkwsh;
txt = "✕";
}
}
else {
colourback = RGB(255, 0, 0);
colour = this.colourkw;
txt = "";
if (this.content == 0) {
colourback = this.colourkwb;
colour = this.colourkw;
txt = "";
}
if (this.content == 1) {
colourback = this.colourkwsb;
colour = this.colourkws;
txt = "✕";
}
}
gr.FillEllipse(this.left, this.top, this.h, this.h, colourback);
gr.DrawEllipse(this.left, this.top, this.h, this.h, 1, colour);
gr.GdiDrawText(txt, this.gfont, colour, this.left, this.top, this.h, this.h, flagsb);
}

this.onMove = function (x, y) {
if ((this.left < x) && (x < (this.left + this.h)) && (this.top < y) && (y < (this.top + this.h))) this.hover = true; else this.hover = false;
}

this.onClick = function (x, y) {
if (this.hover) {
if (this.content == 0)
this.content = 1;
else if (this.content == 1)
this.content = 0;
else
this.content = 1;
this.changed = true;
this.save();
window.Repaint();
}
}

this.load = function () {
idx = metadata.MetaFind(this.tag);
if (idx > metadata.MetaCount) this.content = 0; else this.content = metadata.MetaValue(idx, 0);
this.changed = false;
}

this.save = function () {
if (this.changed) {
metadata.MetaSet (this.tag, this.content);
g_handle.UpdateFileInfo(metadata);
reload = true;
}
this.changed = false;
}
}

function RadioBox(title, tag, list, listlong, x, y, tw, rw, h, showall) {
this.type = "rb";
this.title = title;
this.tag = tag;
this.list = list;
this.listlong = listlong;
this.content = 0;
this.contenterror = false;
this.changed = false;
this.tleft = x;
this.left = new Array ();
this.top = y;
this.tw = tw;
this.rw = rw;
this.width = new Array();
this.h = 0;
this.fh = h;
this.margin = 0.3 * h;
this.colourkw = RGB(229, 229, 229);
this.colourkwb = RGB(0, 0, 0);
this.colourkwh = RGB(255, 255, 200);
this.colourkwbh = RGB(0, 0, 0);
this.colourkws = RGB(229, 229, 229);
this.colourkwsb = RGB(104, 104, 104);
this.colourkwsh = RGB(255, 255, 200);
this.colourkwsbh = RGB(104, 104, 104);
this.colourt = RGB(255, 255, 255);
this.showall = showall;
this.hover = -1;
this.gfont = gdi.Font("Arial Unicode MS", this.fh, 0);
this.gfontbut = gdi.Font("Arial Unicode MS", this.fh / 1.3, 0);

inputobjects.push(this);

this.draw = function (gr) {
nfo = gr.MeasureString("n", this.gfont, 0, 0, 10000, 100, 0);
nfod = gr.MeasureString("▾", this.gfontbut, 0, 0, 10000, 100, 0);
this.h = nfo.Height;

//title
gr.GdiDrawText(this.title, this.gfont, this.colourt, this.tleft, this.top, this.tw-this.margin, this.h, 0);

leftstart = this.tleft + this.tw;
if (showall) {

//values
pos = 0;
for (i in this.list) {
this.left[i] = leftstart + pos;
info = gr.MeasureString(this.listlong[i], this.gfont, 0, 0, 10000, 100, 0);
this.width[i] = info.Width;
pos += this.width[i];
if (this.hover == i) {
if (this.content == this.listlong[i]) {
colourback = this.colourkwsbh;
colourl = this.colourkwsh;
colour = this.colourkwsh;
tstsel = true
}
else {
colourback = this.colourkwbh;
colourl = this.colourkwbh;
colour = this.colourkwh;
tstsel = false;
}
}
else {
if (this.content == this.listlong[i]) {
colourback = this.colourkwsb;
colourl = this.colourkws;
colour = this.colourkws;
tstsel = true;
}
else {
colourback = this.colourkwb;
colourl = this.colourkwb;
colour = this.colourkw;
tstsel = false;
}
}
if (tstsel) {
this.left[i] += this.margin;
pos += this.margin;
}
if (this.contenterror) colour = RGB(255, 0, 0);
gr.FillSolidRect(this.left[i] - this.margin, this.top, this.width[i] + 2 * this.margin, this.h, colourback);
gr.DrawRect(this.left[i] - this.margin, this.top, this.width[i] + 2 * this.margin, this.h, 1, colourl);
gr.GdiDrawText(this.listlong[i], this.gfont, colour, this.left[i], this.top, this.width[i], this.h, 0);
pos += nfo.Width + this.margin;
}
}
else {

//value
if (this.hover == -1) colour = this.colourkw; else colour = this.colourkwh;
if (this.contenterror) colour = RGB(255, 0, 0);
if (this.content == "") {
str = "[none]";
colour = RGB(127, 127, 127);
}
else
str = this.content;
gr.GdiDrawText(str, this.gfont, colour, leftstart, this.top, this.rw, this.h, 0);

//menu
if (this.hover != -1) {
gr.DrawLine(leftstart, this.top, leftstart + this.rw, this.top, 1, this.colourkwh);
gr.GdiDrawText("▾", this.gfontbut, this.colourkwh, leftstart + this.rw -  this.h / 3 + (this.h / 3 - nfom.width) / 2, this.top - 0.22 * this.h, this.h / 3, this.h, 0);
}
}
}

this.onMove = function (x, y) {
if (showall) {
this.hover = -1;
for (i in this.list) {
if ((this.left[i] < x) && (x < (this.left[i] + this.width[i])) && (this.top < y) && (y < (this.top + this.h))) this.hover = i;
}
}
else {
if (((this.tleft + this.tw) < x) && (x < (this.tleft + this.tw + this. rw)) && (this.top < y) && (y < (this.top + this.h))) this.hover = 0; else this.hover = -1;
}
}

this.onClick = function (x, y) {
if (this.hover != -1) {
if (showall) {
if (this.content == this.listlong[this.hover])
this.content = "";
else
this.content = this.listlong[this.hover];
this.contenterror = false;
this.changed = true;
this.save();
window.Repaint();
}
else {
var popupmenu = window.CreatePopupMenu();
popupmenu.AppendMenuItem(0, 1, "[none]");
for (j in this.list) {
popupmenu.AppendMenuItem(0, parseInt(j) + 2, this.listlong[j]);
}
menuret = popupmenu.TrackPopupMenu(x, y);
if (menuret != 0) {
this.content = this.listlong[menuret - 2];
this.contenterror = false;
this.changed = true;
this.save();
window.Repaint();
}
}
}
}

this.load = function () {
idx = metadata.MetaFind(this.tag);
if (idx > metadata.MetaCount) {
this.content = "";
this.contenterror = false;
}
else {
str = metadata.MetaValue(idx, 0);
this.contenterror = true;
for (i in this.list) {
if (str == this.list[i]) {
this.content = this.listlong[i];
this.contenterror = false;
}
}
if (this.contenterror) this.content = str;
if (str == "") this.contenterror = false;
}
this.changed = false;
}

this.save = function () {
if (this.changed) {
for (i in this.list) {
if (this.content == this.listlong[i]) this.content = this.list[i];
}
metadata.MetaSet (this.tag, this.content);
g_handle.UpdateFileInfo(metadata);
reload = true;
}
this.changed = false;
}
}

function InputRating(title, tag, max, x, y, tw, h) {
this.type = "ra";
this.title = title;
this.tag = tag;
this.max = max;
this.content = 0;
this.contenterror = false;
this.changed = false;
this.tleft = x;
this.left = x + tw;
this.top = y;
this.tw = tw;
this.h = 0;
this.fh = h;
this.margin = 0.3 * h;
this.colourkw = RGB(229, 229, 229);
this.colourkwh = RGB(255, 255, 200);
this.colourt = RGB(255, 255, 255);
this.hover = -1;
this.gfont = gdi.Font("Arial Unicode MS", this.fh, 0);
this.gfontbut = gdi.Font("Arial Unicode MS", this.fh / 1.3, 0);

inputobjects.push(this);

this.draw = function (gr) {
nfo = gr.MeasureString("n", this.gfont, 0, 0, 10000, 100, 0);
nfom = gr.MeasureString("−", this.gfontbut, 0, 0, 10000, 100, 0);
this.h = nfo.Height;

//title
gr.GdiDrawText(this.title, this.gfont, this.colourt, this.tleft, this.top, this.tw-this.margin, this.h, 0);

//rating
for (i = 1; i <= this.max; i++) {
if (i <= this.content) {
str = "★";
if (this.hover == i) colour = this.colourkwh; else colour = this.colourkw;
}
else {
str = "☆"
if (this.hover == i) colour = this.colourkwh; else colour = RGB(127, 127, 127);
}
if (this.contenterror) colour = RGB(255, 0, 0);
gr.GdiDrawText(str, this.gfont, colour, this.left + (i - 1) * this.h, this.top, this.h, this.h, 0);
}

//menu
if (this.hover != -1) {
gr.DrawLine(this.left, this.top, this.left + this.max * this.h, this.top, 1, this.colourkwh);
if (this.hover == 0) {
gr.DrawRect(this.left + this.max * this.h - this.h / 3, this.top, this.h / 3, this.h / 3, 1, this.colourkwh);
colour = this.colourkwh;
}
else
colour = this.colourkw;
gr.GdiDrawText("−", this.gfontbut, colour, this.left + this.max * this.h -  this.h / 3 + (this.h / 3 - nfom.width) / 2, this.top - 0.22 * this.h, this.h / 3, this.h, 0);
}
}

this.onMove = function (x, y) {
this.hover = -1;
for (i = 0; i < this.max; i++) {
if (((this.left + i * this.h) < x) && (x < (this.left + (i + 1) * this.h)) && (this.top < y) && (y < (this.top + this.h))) this.hover = i + 1;
}
if (((this.left + this.max * this.h - this.h / 3) < x) && (x < (this.left + this.max * this.h)) && (this.top < y) && (y < (this.top + this.h))) this.hover = 0;
}

this.onClick = function (x, y) {
if (this.hover >= 0) {
this.content = this.hover;
this.contenterror = false;
this.changed = true;
this.save();
window.Repaint();
}
}

this.load = function () {
idx = metadata.MetaFind(this.tag);
if (idx > metadata.MetaCount)
this.content = 0;
else {
str = metadata.MetaValue(idx, 0);
this.contenterror = true;
for (i = 0; i <= this.max; i ++) {
if (str == i) {
this.content = i;
this.contenterror = false;
}
if (this.contenterror) this.content = 0;
}
}
this.changed = false;
}

this.save = function () {
if (this.changed) {
metadata.MetaSet (this.tag, this.content);
g_handle.UpdateFileInfo(metadata);
reload = true;
}
this.changed = false;
}
}

function inputobjectsDraw(gr) {
for (i in inputobjects) {
inputobjects[i].draw(gr);
}
}

function inputobjectsLoad() {
if ((g_handle.Path != fpath) || (reload)) {
reload = false;
fpath = g_handle.Path;
for (i in inputobjects) {
inputobjects[i].load();
}
}
}

function inputobjectsSave() {
for (i in inputobjects) {
inputobjects[i].save();
}
}

function RGB(r, g, b) {
return (0xff000000 | (r << 16) | (g << 8) | (b));
}


// --- APPLICATION START
var g_handle = fb.GetFocusItem();
var metadata = g_handle.GetFileInfo();
reload = true;
fpath = ""

function on_mouse_move(x, y) {
for (i in inputobjects) {
inputobjects[i].onMove(x, y);
}
window.Repaint();
}

function on_mouse_lbtn_down(x, y) {
for (i in inputobjects) {
inputobjects[i].onClick(x,y);
}
window.Repaint();
}

function on_focus(is_focused) {
inputobjectsSave();
window.Repaint();
}

function on_item_focus_change() {
inputobjectsSave();
g_handle = fb.GetFocusItem();
metadata = g_handle.GetFileInfo();
reload = true;
window.Repaint();
}

function on_paint(gr) {
gr.FillSolidRect(0, 0, window.Width, window.Height, RGB(0,0,0));
inputobjectsLoad();
inputobjectsDraw(gr);
}

//Relates to: Inputbox
function on_key_down(vkey) {
key = vkey;
ins = "";
tb = null;

//ctrl, alt?
if (!utils.IsKeyPressed(17) & !utils.IsKeyPressed(18)){
for (i in inputobjects) {
tb = inputobjects[i];
if ((tb.type == "ib") && tb.active) break;
}
if ((tb.type == "ib") && tb.active) {

if (!tb.special) {

//0-9
if (47<key && key<58 && !utils.IsKeyPressed(16)) {
ins = String.fromCharCode(key);
}

//A-Z
if (64<key && key<91) {
if (!utils.IsKeyPressed(16)) key += 32
ins = String.fromCharCode(key);
}

//simple characters
if (!utils.IsKeyPressed(16)) {
switch (key){
case 189: ins = "-"; break;
case 187: ins = "="; break;
case 219: ins = "["; break;
case 221: ins = "]"; break;
case 186: ins = ";"; break;
case 220: ins = "\\"; break;
case 226: ins = "\\"; break;
case 188: ins = ","; break;
case 190: ins = "."; break;
case 191: ins = "/"; break;
}
}

//simple shift characters
if (utils.IsKeyPressed(16)) {
switch (key){
case 49: ins = "!"; break;
case 50: ins = "@"; break;
case 51: ins = "#"; break;
case 52: ins = "$"; break;
case 53: ins = "%"; break;
case 55: ins = "&&"; break;
case 56: ins = "*"; break;
case 57: ins = "("; break;
case 48: ins = ")"; break;
case 189: ins = "_"; break;
case 187: ins = "+"; break;
case 219: ins = "{"; break;
case 221: ins = "}"; break;
case 186: ins = ":"; break;
case 220: ins = "|"; break;
case 226: ins = "|"; break;
case 188: ins = "<"; break;
case 190: ins = ">"; break;
case 191: ins = "?"; break;
}
}

//special characters
if (!utils.IsKeyPressed(16)) {
switch (key){
case 192: tb.special = true; tb.specialchar = "`"; break;
case 222: tb.special = true; tb.specialchar = "'"; break;
}
}

//special shift characters
if (utils.IsKeyPressed(16)) {
switch (key){
case 192: tb.special = true; tb.specialchar = "~"; break;
case 54: tb.special = true; tb.specialchar = "^"; break;
case 222: tb.special = true; tb.specialchar = "\""; break;
}
}

//space
if (key == 32){
ins = String.fromCharCode(key);
}

}
else {
ins0 = tb.specialchar;

//special characters
switch (key){
case 65:
switch (tb.specialchar){
case "~": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Ã" : ins = "ã"; key = null; break;
case "`": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "À" : ins = "à"; key = null; break;
case "^": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Â" : ins = "â"; key = null; break;
case "\"": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Ä" : ins = "ä"; key = null; break;
case "'": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Á" : ins = "á"; key = null; break;
}
break;
case 67:
switch (tb.specialchar){
case "'": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Ç" : ins = "ç"; key = null; break;
}
break;
case 69:
switch (tb.specialchar){
case "`": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "È" : ins = "è"; key = null; break;
case "^": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Ê" : ins = "ê"; key = null; break;
case "\"": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Ë" : ins = "ë"; key = null; break;
case "'": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "É" : ins = "é"; key = null; break;
}
break;
case 73:
switch (tb.specialchar){
case "`": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Ì" : ins = "ì"; key = null; break;
case "^": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Î" : ins = "î"; key = null; break;
case "\"": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Ï" : ins = "ï"; key = null; break;
case "'": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "í" : ins = "í"; key = null; break;
}
break;
case 78:
switch (tb.specialchar){
case "~": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Ñ" : ins = "ñ"; key = null; break;
}
break;
case 79:
switch (tb.specialchar){
case "~": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Õ" : ins = "õ"; key = null; break;
case "`": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Ò" : ins = "ò"; key = null; break;
case "^": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Ô" : ins = "ô"; key = null; break;
case "\"": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Ö" : ins = "ö"; key = null; break;
case "'": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Ó" : ins = "ó"; key = null; break;
}
break;
case 83:
switch (tb.specialchar){
case "\"": if (!utils.IsKeyPressed(16)) {ins0 = ""; ins = "ß"; key = null}; break;
}
break;
case 85:
switch (tb.specialchar){
case "`": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Ù" : ins = "ù"; key = null; break;
case "^": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Û" : ins = "û"; key = null; break;
case "\"": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Ü" : ins = "ü"; key = null; break;
case "'": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Ú" : ins = "ú"; key = null; break;
}
break;
case 89:
switch (tb.specialchar){
case "\"": if (!utils.IsKeyPressed(16)) {ins0 = ""; ins = "ÿ"; key = null}; break;
case "'": ins0 = ""; (utils.IsKeyPressed(16)) ? ins = "Ý" : ins = "ý"; key = null; break;
}
break;
}

//0-9
if (47<key && key<58 && !utils.IsKeyPressed(16)) {
ins = String.fromCharCode(key);
}

//A-Z
if (64<key && key<91) {
if (!utils.IsKeyPressed(16)) key += 32
ins = String.fromCharCode(key);
}

//simple characters
if (!utils.IsKeyPressed(16)) {
switch (key){
case 189: ins = "-"; break;
case 187: ins = "="; break;
case 219: ins = "["; break;
case 221: ins = "]"; break;
case 186: ins = ";"; break;
case 220: ins = "\\"; break;
case 226: ins = "\\"; break;
case 188: ins = ","; break;
case 190: ins = "."; break;
case 191: ins = "/"; break;
}
}

//simple shift characters
if (utils.IsKeyPressed(16)) {
switch (key){
case 49: ins = "!"; break;
case 50: ins = "@"; break;
case 51: ins = "#"; break;
case 52: ins = "$"; break;
case 53: ins = "%"; break;
case 55: ins = "&&"; break;
case 56: ins = "*"; break;
case 57: ins = "("; break;
case 48: ins = ")"; break;
case 189: ins = "_"; break;
case 187: ins = "+"; break;
case 219: ins = "{"; break;
case 221: ins = "}"; break;
case 186: ins = ":"; break;
case 220: ins = "|"; break;
case 226: ins = "|"; break;
case 188: ins = "<"; break;
case 190: ins = ">"; break;
case 191: ins = "?"; break;
}
}

tmp = ins
ins = ins0 + tmp;
tb.special = false;
tb.specialchar = "";

}

//left
if (key == 37){
if (tb.cursor != 0) tb.cursor -= 1;
}

//right
if (key == 39){
if (tb.cursor != tb.contentedit.length) tb.cursor += 1;
}

//home
if (key == 36){
tb.cursor = 0;
}

//end
if (key == 35){
tb.cursor = tb.contentedit.length;
}

//backspace
if (key == 8){
if (tb.cursor != 0){
str2 = tb.contentedit.slice(tb.cursor);
tb.cursor -= 1;
str1 = tb.contentedit.slice (0, tb.cursor);
tb.contentedit = str1 + str2
}
}

//delete
if (key == 46){
if (tb.cursor != tb.content.length){
str2 = tb.contentedit.slice(tb.cursor + 1);
str1 = tb.contentedit.slice (0, tb.cursor);
tb.contentedit = str1 + str2
}
}

//enter
if (key == 13) {
inputobjectsSave();
}

//esc
if (key == 27) {
tb.contentedit = tb.contenteditbak;
tb.cursor = tb.contentedit.length;
}

str1 = tb.contentedit.slice(0, tb.cursor);
str2 = tb.contentedit.slice(tb.cursor);
tb.contentedit = str1 + ins + str2;
tb.cursor += ins.length;
window.Repaint();
}
}
}



var testshort = new Array ("t1", "t2", "t3", "t4", "t5");
var testlong = new Array ("test 1", "test 2", "test 3",  "test 4", "test 5");

// InputBox (Title, Tag, Multivalue, x, y, Title width, Text box width, Font size)
var ib_test1 = new InputBox("Test 1", "test1", true, 10, 10, 100, 500, 20);
var ib_test2 = new InputBox("Test 2", "test2", true, 10, 40, 100, 500, 20);
var ib_test3 = new InputBox("Test 3", "test3", true, 10, 70, 100, 500, 20);
var ib_test4 = new InputBox("Test 4", "test4", true, 10, 100, 100, 500, 20);

// Keywords (Title, Tag, List of values, List of descriptions, x, y, Title width, Max width of values, Font size)
var kw_test = new Keywords("Test 1", "test1", testshort, testlong, 10, 130, 100, 500, 20);

// CheckBox(Title, Tag, x, y, Title width, Font size)
var cb_test = new CheckBox("Test 2", "test2", 10, 160, 100, 20);

// RadioBox(Title, Tag, List of values, List of descriptions, x, y, Title width, Value width [if not show all], Font size, Show all)
var rb_test1 = new RadioBox("Test 3", "test3", testshort, testlong, 10, 190, 100, 100, 20, true);
var rb_test2 = new RadioBox("Test 3", "test3", testshort, testlong, 10, 220, 100, 100, 20, false);

// InputRating (Title, Tag, Maximum rating, x, y, Title width, Font size)
var ra_test = new InputRating("Test 4", "test4", 5, 10, 250, 100, 20) ;

WSH Panel Mod

Reply #265
Hi T.P Wang,

i'm resuming to encounter crashes with 1.1.10 beta 6 (btw less frequent than 1.1.10 beta 4)

FULL dump available here

i was just playing music, foobar window inactive, under a windows explorer window (active), annoying crash, app_mainloop, no more info, is it due to WSH according to you ?

report:

Code: [Select]
Illegal operation:
Code: C0000005h, flags: 00000000h, address: 338B55EBh
Access violation, operation: write, address: 338B55EBh

Call path:
entry=>app_mainloop

Stack (001DED00h):
001DECE0h:  FFFFFFFF 8BC2E5E6 FFFFFD34 000002E4
001DECF0h:  FFFFFD34 000002CC 00000018 00000000
001DED00h:  76114989 052B0948 000DD548 00000001
001DED10h:  001DED48 69317ACB 14746BC0 000DD548
001DED20h:  00000001 6931A9F5 009E1A70 009E1160
001DED30h:  009EE3A8 000000EF 00000007 14746B08
001DED40h:  14746BC0 000000F6 001DED64 6931A338
001DED50h:  00000000 00000000 00275F38 00000000
001DED60h:  009F18C8 001DED8C 6931A22C 00000002
001DED70h:  00A2BAB8 00000000 009E1A70 6931A12C
001DED80h:  00A2BAB8 00A2B8A0 05290000 001DEF0C
001DED90h:  6931A87A 40A7DF5E 00A2BAB8 009FDEC0
001DEDA0h:  00000000 00000000 00000000 00000000
001DEDB0h:  00000000 00000000 001DEEC4 00A2BAB8
001DEDC0h:  001DEFE8 001DEDF0 69315900 00A2BAB8
001DEDD0h:  60020003 00000000 00000000 000DE320
001DEDE0h:  00000003 00000000 00000000 3F800000
001DEDF0h:  001DEDFC 741A74DE 0E50818C 001DF2CC
001DEE00h:  001DEE14 7413AA01 74253480 BB0407DB
001DEE10h:  00000000 001DF2CC 7413B64E BB0407DB

Registers:
EAX: 052B0948, EBX: 14746BC0, ECX: 64350071, EDX: 0000008A
ESI: 14746BC0, EDI: 00000009, EBP: 001DED10, ESP: 001DED00

Unable to identify crash location!

Loaded modules:
foobar2000                      loaded at 00FA0000h - 0113A000h
ntdll                            loaded at 77350000h - 7748C000h
kernel32                        loaded at 771A0000h - 77274000h
KERNELBASE                      loaded at 75520000h - 75568000h
COMCTL32                        loaded at 743F0000h - 7458C000h
msvcrt                          loaded at 75C70000h - 75D1C000h
GDI32                            loaded at 758A0000h - 758EE000h
USER32                          loaded at 76200000h - 762C9000h
LPK                              loaded at 75C50000h - 75C5A000h
USP10                            loaded at 759F0000h - 75A8D000h
SHLWAPI                          loaded at 774B0000h - 77507000h
DSOUND                          loaded at 73A10000h - 73A82000h
ADVAPI32                        loaded at 76350000h - 763F0000h
sechost                          loaded at 75D20000h - 75D39000h
RPCRT4                          loaded at 757F0000h - 75892000h
ole32                            loaded at 763F0000h - 7654B000h
WINMM                            loaded at 73980000h - 739B2000h
POWRPROF                        loaded at 73D90000h - 73DB5000h
SETUPAPI                        loaded at 75AB0000h - 75C4D000h
CFGMGR32                        loaded at 75770000h - 75797000h
OLEAUT32                        loaded at 76110000h - 7619F000h
DEVOBJ                          loaded at 75600000h - 75612000h
SHELL32                          loaded at 76550000h - 77196000h
shared                          loaded at 10000000h - 1002B000h
imagehlp                        loaded at 77510000h - 7753A000h
UxTheme                          loaded at 74270000h - 742B0000h
dbghelp                          loaded at 6EC80000h - 6ED6C000h
COMDLG32                        loaded at 762D0000h - 7634B000h
IMM32                            loaded at 75A90000h - 75AAF000h
MSCTF                            loaded at 77280000h - 7734C000h
CRYPTBASE                        loaded at 75420000h - 7542C000h
CLBCatQ                          loaded at 75D40000h - 75DC3000h
MMDevApi                        loaded at 73F90000h - 73FC9000h
PROPSYS                          loaded at 742B0000h - 743A5000h
dwmapi                          loaded at 73F70000h - 73F83000h
foo_albumlist                    loaded at 00F10000h - 00F6B000h
foo_freedb2                      loaded at 02810000h - 02851000h
foo_dsp_std                      loaded at 02970000h - 029B9000h
foo_rgscan                      loaded at 029C0000h - 02A0E000h
foo_uie_tabs                    loaded at 00B30000h - 00B58000h
foo_uie_elplaylist              loaded at 02A10000h - 02A7F000h
gdiplus                          loaded at 740E0000h - 74270000h
foo_chronflow                    loaded at 02B20000h - 02B81000h
OPENGL32                        loaded at 65950000h - 65A18000h
GLU32                            loaded at 6CB70000h - 6CB92000h
DDRAW                            loaded at 69960000h - 69A47000h
DCIMAN32                        loaded at 69CD0000h - 69CD6000h
foo_uie_panel_splitter          loaded at 02AB0000h - 02B08000h
foo_covers                      loaded at 6C5B0000h - 6C5D7000h
foo_audioscrobbler              loaded at 00DD0000h - 00E00000h
WS2_32                          loaded at 77540000h - 77575000h
NSI                              loaded at 774A0000h - 774A6000h
foo_burninate                    loaded at 02BD0000h - 02C10000h
foo_uie_explorer                loaded at 02D80000h - 02DD3000h
WindowsCodecs                    loaded at 73E40000h - 73F39000h
apphelp                          loaded at 753D0000h - 7541B000h
EhStorShell                      loaded at 6B8B0000h - 6B8E1000h
cscui                            loaded at 6B840000h - 6B8AA000h
CSCDLL                          loaded at 6BB30000h - 6BB39000h
CSCAPI                          loaded at 6F440000h - 6F44B000h
ntshrui                          loaded at 6C540000h - 6C5AF000h
srvcli                          loaded at 750F0000h - 75109000h
slc                              loaded at 73690000h - 7369A000h
foo_playback_custom              loaded at 03610000h - 03657000h
WINSPOOL                        loaded at 6F5D0000h - 6F621000h
foo_converter                    loaded at 03830000h - 0389C000h
foo_uie_vis_channel_spectrum    loaded at 03240000h - 0327D000h
MSIMG32                          loaded at 739F0000h - 739F5000h
foo_uie_quicksearch              loaded at 039F0000h - 03A36000h
foo_dop                          loaded at 03C90000h - 03DE0000h
QUARTZ                          loaded at 650E0000h - 65257000h
foo_vis_shpeck                  loaded at 6BBE0000h - 6BC1F000h
foo_masstag                      loaded at 03B90000h - 03BE4000h
foo_uie_library_tree            loaded at 03BF0000h - 03C47000h
foo_uie_graphical_browser        loaded at 658B0000h - 65944000h
foo_ui_columns                  loaded at 043C0000h - 0452E000h
foo_unpack                      loaded at 033E0000h - 0340E000h
foo_convolve                    loaded at 03EE0000h - 03F31000h
foo_utils                        loaded at 6BFB0000h - 6BFF4000h
foo_cdda                        loaded at 039A0000h - 039E0000h
foo_exvar                        loaded at 03A50000h - 03A78000h
foo_uie_biography                loaded at 03F90000h - 03FE1000h
foo_ui_std                      loaded at 04AF0000h - 04BFE000h
foo_input_std                    loaded at 04C80000h - 04DC1000h
foo_fileops                      loaded at 04040000h - 04086000h
foo_uie_wsh_panel_mod            loaded at 642F0000h - 64382000h
foo_uie_lyrics                  loaded at 04350000h - 043AD000h
WININET                          loaded at 758F0000h - 759E2000h
Normaliz                        loaded at 75C60000h - 75C63000h
urlmon                          loaded at 75DD0000h - 75F05000h
CRYPT32                          loaded at 75650000h - 7576C000h
MSASN1                          loaded at 75510000h - 7551C000h
iertutil                        loaded at 75F10000h - 76108000h
SXS                              loaded at 75430000h - 7548F000h
jscript                          loaded at 692F0000h - 693A1000h
VERSION                          loaded at 749A0000h - 749A9000h
CRYPTSP                          loaded at 74F50000h - 74F66000h
rsaenh                          loaded at 74CF0000h - 74D2B000h
RpcRtRemote                      loaded at 75490000h - 7549E000h
scrrun                          loaded at 73390000h - 733BA000h
wshom                            loaded at 6C5E0000h - 6C601000h
MPR                              loaded at 6F030000h - 6F042000h
mscms                            loaded at 69A50000h - 69AC9000h
USERENV                          loaded at 74B00000h - 74B17000h
profapi                          loaded at 754A0000h - 754AB000h
icm32                            loaded at 6B4B0000h - 6B4E8000h
nvoglv32                        loaded at 0A580000h - 0AF7C000h
mswsock                          loaded at 74F10000h - 74F4C000h
DNSAPI                          loaded at 74DD0000h - 74E14000h
mdnsNSP                          loaded at 16080000h - 160A5000h
Iphlpapi                        loaded at 73570000h - 7358C000h
WINNSI                          loaded at 73560000h - 73567000h
WINTRUST                        loaded at 75620000h - 7564D000h
fwpuclnt                        loaded at 730B0000h - 730E8000h
rasadhlp                        loaded at 73140000h - 73146000h
wship6                          loaded at 74F00000h - 74F06000h
wshtcpip                        loaded at 74A30000h - 74A35000h
ntmarta                          loaded at 739C0000h - 739E1000h
WLDAP32                          loaded at 757A0000h - 757E5000h
shdocvw                          loaded at 6B290000h - 6B2BD000h
explorerframe                    loaded at 6B340000h - 6B4AE000h
DUser                            loaded at 74690000h - 746BF000h
DUI70                            loaded at 74020000h - 740D1000h
AUDIOSES                        loaded at 73650000h - 73686000h
windowscodecsext                loaded at 66E10000h - 66E43000h
msxml6                          loaded at 70CF0000h - 70E37000h
SspiCli                          loaded at 753A0000h - 753BA000h
RASAPI32                        loaded at 73B00000h - 73B52000h
rasman                          loaded at 73AE0000h - 73AF5000h
rtutils                          loaded at 73AD0000h - 73ADD000h
sensapi                          loaded at 73D20000h - 73D26000h
NLAapi                          loaded at 73800000h - 73810000h
winrnr                          loaded at 70510000h - 70518000h
napinsp                          loaded at 70290000h - 702A0000h
pnrpnsp                          loaded at 70230000h - 70242000h
tiptsf                          loaded at 6AEE0000h - 6AF38000h
msls31                          loaded at 6B1C0000h - 6B1E9000h
xmllite                          loaded at 73F40000h - 73F6F000h
StructuredQuery                  loaded at 6BF50000h - 6BFAC000h
Secur32                          loaded at 751B0000h - 751B8000h
actxprxy                        loaded at 70910000h - 7095F000h
ieproxy                          loaded at 6D180000h - 6D1AB000h
thumbcache                      loaded at 6C370000h - 6C386000h
PSAPI                            loaded at 77490000h - 77495000h
ieframe                          loaded at 6A220000h - 6AC9C000h
OLEACC                          loaded at 73A90000h - 73ACC000h
SearchFolder                    loaded at 6C130000h - 6C1CE000h
samcli                          loaded at 73C00000h - 73C0F000h
SAMLIB                          loaded at 743B0000h - 743C2000h
netutils                        loaded at 73C20000h - 73C29000h
NaturalLanguage6                loaded at 6C470000h - 6C536000h
NLSData000c                      loaded at 6BCC0000h - 6BF4F000h
NLSLexicons000c                  loaded at 65C60000h - 66254000h
LINKINFO                        loaded at 6CDE0000h - 6CDE9000h
NetworkExplorer                  loaded at 6C970000h - 6CB08000h
avrt                            loaded at 73D80000h - 73D87000h
peerdist                        loaded at 737A0000h - 737C5000h
AUTHZ                            loaded at 750C0000h - 750DB000h

Stack dump analysis:
Address: 76114989h (OLEAUT32+4989h), symbol: "VariantCopy" (+8Ah)
Address: 69317ACBh (jscript+27ACBh), symbol: "DllGetClassObject" (+FB74h)
Address: 6931A9F5h (jscript+2A9F5h), symbol: "DllGetClassObject" (+12A9Eh)
Address: 6931A338h (jscript+2A338h), symbol: "DllGetClassObject" (+123E1h)
Address: 6931A22Ch (jscript+2A22Ch), symbol: "DllGetClassObject" (+122D5h)
Address: 6931A12Ch (jscript+2A12Ch), symbol: "DllGetClassObject" (+121D5h)
Address: 6931A87Ah (jscript+2A87Ah), symbol: "DllGetClassObject" (+12923h)
Address: 69315900h (jscript+25900h), symbol: "DllGetClassObject" (+D9A9h)
Address: 741A74DEh (gdiplus+C74DEh), symbol: "GdipCreateSolidFill" (+804CAh)
Address: 7413AA01h (gdiplus+5AA01h), symbol: "GdipCreateSolidFill" (+139EDh)
Address: 74253480h (gdiplus+173480h), symbol: "GdipCreateSolidFill" (+12C46Ch)
Address: 7413B64Eh (gdiplus+5B64Eh), symbol: "GdipCreateSolidFill" (+1463Ah)
Address: 758A698Ch (GDI32+698Ch), symbol: "DeleteObject" (+C6h)
Address: 758A6A4Fh (GDI32+6A4Fh), symbol: "DeleteObject" (+189h)
Address: 7417A0AAh (gdiplus+9A0AAh), symbol: "GdipCreateSolidFill" (+53096h)
Address: 69305489h (jscript+15489h)
Address: 6930589Fh (jscript+1589Fh)
Address: 693056D0h (jscript+156D0h)
Address: 693868E4h (jscript+968E4h), symbol: "DllRegisterServer" (+1A223h)
Address: 6931441Eh (jscript+2441Eh), symbol: "DllGetClassObject" (+C4C7h)
Address: 69304D16h (jscript+14D16h)
Address: 76435641h (ole32+45641h), symbol: "CoSetState" (+904h)
Address: 6931437Ch (jscript+2437Ch), symbol: "DllGetClassObject" (+C425h)
Address: 76443749h (ole32+53749h), symbol: "CoRevokeInitializeSpy" (+80D0h)
Address: 76435669h (ole32+45669h), symbol: "CoSetState" (+92Ch)
Address: 6930643Bh (jscript+1643Bh)
Address: 693171CCh (jscript+271CCh), symbol: "DllGetClassObject" (+F275h)
Address: 693868E4h (jscript+968E4h), symbol: "DllRegisterServer" (+1A223h)
Address: 69303CF8h (jscript+13CF8h)
Address: 741559E2h (gdiplus+759E2h), symbol: "GdipCreateSolidFill" (+2E9CEh)
Address: 69315B4Dh (jscript+25B4Dh), symbol: "DllGetClassObject" (+DBF6h)
Address: 693868E4h (jscript+968E4h), symbol: "DllRegisterServer" (+1A223h)
Address: 693868E4h (jscript+968E4h), symbol: "DllRegisterServer" (+1A223h)
Address: 69303B65h (jscript+13B65h)
Address: 693868E4h (jscript+968E4h), symbol: "DllRegisterServer" (+1A223h)
Address: 692FF9FFh (jscript+F9FFh)
Address: 692FF94Ah (jscript+F94Ah)
Address: 69303F55h (jscript+13F55h)
Address: 6930417Bh (jscript+1417Bh)
Address: 693868E4h (jscript+968E4h), symbol: "DllRegisterServer" (+1A223h)
Address: 692FD5E6h (jscript+D5E6h)
Address: 642FBC3Bh (foo_uie_wsh_panel_mod+BC3Bh)
Address: 6435B860h (foo_uie_wsh_panel_mod+6B860h), symbol: "foobar2000_get_interface" (+43CA0h)
Address: 642FD123h (foo_uie_wsh_panel_mod+D123h)
Address: 6435E8E0h (foo_uie_wsh_panel_mod+6E8E0h), symbol: "foobar2000_get_interface" (+46D20h)
Address: 643574A8h (foo_uie_wsh_panel_mod+674A8h), symbol: "foobar2000_get_interface" (+3F8E8h)
Address: 642FC3A6h (foo_uie_wsh_panel_mod+C3A6h)
Address: 6930417Bh (jscript+1417Bh)
Address: 693868E4h (jscript+968E4h), symbol: "DllRegisterServer" (+1A223h)
Address: 692FD5E6h (jscript+D5E6h)
Address: 642FBC3Bh (foo_uie_wsh_panel_mod+BC3Bh)
Address: 6435B860h (foo_uie_wsh_panel_mod+6B860h), symbol: "foobar2000_get_interface" (+43CA0h)
Address: 642FCC2Eh (foo_uie_wsh_panel_mod+CC2Eh)
Address: 6435E910h (foo_uie_wsh_panel_mod+6E910h), symbol: "foobar2000_get_interface" (+46D50h)
Address: 032412FBh (foo_uie_vis_channel_spectrum+12FBh)
Address: 762142F0h (USER32+142F0h), symbol: "wsprintfA" (+306h)
Address: 7621630Ch (USER32+1630Ch), symbol: "GetWindowLongW" (+2Bh)
Address: 76216318h (USER32+16318h), symbol: "GetWindowLongW" (+37h)
Address: 64358E83h (foo_uie_wsh_panel_mod+68E83h), symbol: "foobar2000_get_interface" (+412C3h)
Address: 762662DDh (USER32+662DDh), symbol: "IsWow64Message" (+49h)
Address: 64340475h (foo_uie_wsh_panel_mod+50475h), symbol: "foobar2000_get_interface" (+288B5h)
Address: 7621C6C2h (USER32+1C6C2h), symbol: "gapfnScSendMessage" (+1FAh)
Address: 76216101h (USER32+16101h), symbol: "SetPropW" (+DBh)
Address: 643402E0h (foo_uie_wsh_panel_mod+502E0h), symbol: "foobar2000_get_interface" (+28720h)
Address: 7621C743h (USER32+1C743h), symbol: "gapfnScSendMessage" (+27Bh)
Address: 762662DDh (USER32+662DDh), symbol: "IsWow64Message" (+49h)
Address: 7621502Ch (USER32+1502Ch), symbol: "IsDialogMessageW" (+13Dh)
Address: 643402E0h (foo_uie_wsh_panel_mod+502E0h), symbol: "foobar2000_get_interface" (+28720h)
Address: 7620DFB3h (USER32+DFB3h), symbol: "SystemParametersInfoW" (+11Eh)
Address: 762662DDh (USER32+662DDh), symbol: "IsWow64Message" (+49h)
Address: 76215089h (USER32+15089h), symbol: "IsDialogMessageW" (+19Ah)
Address: 643402E0h (foo_uie_wsh_panel_mod+502E0h), symbol: "foobar2000_get_interface" (+28720h)
Address: 7739817Eh (ntdll+4817Eh), symbol: "KiUserCallbackDispatcher" (+2Eh)
Address: 77398130h (ntdll+48130h), symbol: "KiUserApcDispatcher" (+48h)
Address: 643402E0h (foo_uie_wsh_panel_mod+502E0h), symbol: "foobar2000_get_interface" (+28720h)
Address: 76214FE1h (USER32+14FE1h), symbol: "IsDialogMessageW" (+F2h)
Address: 76215FA2h (USER32+15FA2h), symbol: "FillRect" (+67h)
Address: 76215FB5h (USER32+15FB5h), symbol: "FillRect" (+7Ah)
Address: 7621CF98h (USER32+1CF98h), symbol: "GetMessageW" (+0h)
Address: 771EF0DDh (kernel32+4F0DDh), symbol: "SetLastError" (+0h)
Address: 762662DDh (USER32+662DDh), symbol: "IsWow64Message" (+49h)
Address: 7621CE9Dh (USER32+1CE9Dh), symbol: "DispatchMessageW" (+Fh)
Address: 643402E0h (foo_uie_wsh_panel_mod+502E0h), symbol: "foobar2000_get_interface" (+28720h)
Address: 762166F9h (USER32+166F9h), symbol: "PeekMessageW" (+0h)
Address: 00FFD66Dh (foobar2000+5D66Dh)
Address: 0100000Ch (foobar2000+6000Ch)
Address: 1000260Dh (shared+260Dh), symbol: "uPrintCrashInfo_OnEvent" (+B0h)
Address: 010D7690h (foobar2000+137690h)
Address: 00B52ABBh (foo_uie_tabs+22ABBh), symbol: "foobar2000_get_interface" (+1CA1Bh)
Address: 00FFE409h (foobar2000+5E409h)
Address: 773A3FF7h (ntdll+53FF7h), symbol: "RtlAllocateHeap" (+211h)
Address: 773A3DE6h (ntdll+53DE6h), symbol: "RtlAllocateHeap" (+0h)
Address: 010D0600h (foobar2000+130600h)
Address: 010D35D4h (foobar2000+1335D4h)
Address: 010D35D4h (foobar2000+1335D4h)
Address: 00FA0000h (foobar2000+0h)
Address: 010E1388h (foobar2000+141388h)
Address: 01103CC0h (foobar2000+163CC0h)
Address: 010A223Bh (foobar2000+10223Bh)
Address: 010A9717h (foobar2000+109717h)
Address: 010A5670h (foobar2000+105670h)
Address: 010A9717h (foobar2000+109717h)
Address: 010A7BCEh (foobar2000+107BCEh)
Address: 010A2928h (foobar2000+102928h)
Address: 1000260Dh (shared+260Dh), symbol: "uPrintCrashInfo_OnEvent" (+B0h)
Address: 010D76B4h (foobar2000+1376B4h)
Address: 010C16B2h (foobar2000+1216B2h)
Address: 10002650h (shared+2650h), symbol: "uCallStackTracker::uCallStackTracker" (+2Fh)
Address: 010D76B4h (foobar2000+1376B4h)
Address: 00FFE63Eh (foobar2000+5E63Eh)
Address: 00FA0000h (foobar2000+0h)
Address: 01103CC0h (foobar2000+163CC0h)
Address: 010C8850h (foobar2000+128850h)
Address: 00FB07A6h (foobar2000+107A6h)
Address: 010A5670h (foobar2000+105670h)
Address: 010A2786h (foobar2000+102786h)
Address: 010A279Ah (foobar2000+10279Ah)
Address: 010C8850h (foobar2000+128850h)
Address: 010C1955h (foobar2000+121955h)
Address: 010A34CCh (foobar2000+1034CCh)
Address: 00FA0000h (foobar2000+0h)
Address: 010AADD7h (foobar2000+10ADD7h)
Address: 010A5670h (foobar2000+105670h)
Address: 771F10DCh (kernel32+510DCh), symbol: "BaseThreadInitThunk" (+12h)
Address: 773B1E9Eh (ntdll+61E9Eh), symbol: "RtlProcessFlsData" (+D3h)
Address: 77202AA5h (kernel32+62AA5h), symbol: "UnhandledExceptionFilter" (+0h)
Address: 77202AA5h (kernel32+62AA5h), symbol: "UnhandledExceptionFilter" (+0h)
Address: 7736F1A5h (ntdll+1F1A5h), symbol: "DbgPrint" (+408h)
Address: 773B1E71h (ntdll+61E71h), symbol: "RtlProcessFlsData" (+A6h)
Address: 010A3537h (foobar2000+103537h)
Address: 010A3537h (foobar2000+103537h)

Environment:
App: foobar2000 v0.9.6.9
OS: Windows 6.1.7100 x86
CPU: Intel® Core™2 Duo CPU    E6850  @ 3.00GHz, features: MMX SSE SSE2 SSE3
Audio: Haut-parleurs (Périphérique High Definition Audio); Audio numérique (SPDIF) (Périphérique High Definition Audio)
UI: Columns UI 0.3.7.8

Components:
Core (2009-08-22 12:25:22)
    foobar2000 core 0.9.6.9
foo_albumlist.dll (2009-08-05 21:55:12)
    Album List 4.3.1
foo_audioscrobbler.dll (2008-03-09 20:08:02)
    Audioscrobbler 1.3.16
foo_burninate.dll (2009-06-21 23:17:14)
    Audio CD Writer 3.0
foo_cdda.dll (2009-08-05 21:54:58)
    CD Audio Decoder 2.1.4
foo_chronflow.dll (2008-04-14 00:16:00)
    Chronial's Coverflow 0.3.0
foo_converter.dll (2009-08-05 21:54:54)
    Converter 1.2.1
foo_convolve.dll (2006-08-04 21:57:26)
    Convolver 0.3
foo_covers.dll (2009-04-27 14:19:56)
    Locate Covers 0.03
foo_dop.dll (2009-07-25 23:35:04)
    iPod manager 0.6.5.0
foo_dsp_std.dll (2009-08-05 21:55:18)
    Standard DSP Array 1.0
foo_exvar.dll (2008-06-14 00:42:56)
    Extended Variables 0.3.1
foo_fileops.dll (2009-08-05 21:53:56)
    File Operations 2.1.2
foo_freedb2.dll (2009-08-05 21:54:16)
    freedb Tagger 0.6.1
foo_input_std.dll (2009-08-05 21:54:52)
    Standard Input Array 1.0
foo_masstag.dll (2009-06-21 23:04:00)
    Masstagger 1.8.2
foo_playback_custom.dll (2009-04-27 18:35:24)
    Playback Statistics Custom 1.5.1
foo_rgscan.dll (2009-08-05 21:54:44)
    ReplayGain Scanner 2.0.9
foo_ui_columns.dll (2009-06-15 00:18:06)
    Columns UI 0.3.7.8
foo_ui_std.dll (2009-08-05 21:55:16)
    Default User Interface 0.9.5
foo_uie_biography.dll (2009-09-09 06:42:08)
    Biography View 0.3.3.1
foo_uie_elplaylist.dll (2009-09-05 18:38:50)
    ELPlaylist 0.6.5.6(beta)
foo_uie_explorer.dll (2009-05-11 04:37:30)
    Explorer Tree 1.04.7c
foo_uie_graphical_browser.dll (2008-04-19 21:37:54)
    Graphical Browser rev015
foo_uie_library_tree.dll (2009-07-25 01:18:14)
    Library Tree 0.3.2.5b
foo_uie_lyrics.dll (2008-12-12 11:39:22)
    Lyric Show Panel 0.3.3.9 [Dec 12 2008 - 17:39:01]
foo_uie_panel_splitter.dll (2009-06-07 22:36:54)
    Panel Stack Splitter 0.3.8(alpha)
foo_uie_quicksearch.dll (2007-05-18 14:31:10)
    Quick Search Toolbar 2.8l
foo_uie_tabs.dll (2009-05-13 21:42:26)
    Tabbed Panel Modified 0.2.8
foo_uie_vis_channel_spectrum.dll (2008-05-18 04:02:12)
    Channel Spectrum panel 0.17.2
foo_uie_wsh_panel_mod.dll (2009-09-10 05:43:41)
    WSH Panel Mod 1.1.10 Beta 6
foo_unpack.dll (2009-08-05 21:53:42)
    RAR reader 1.2
    ZIP/GZIP reader 1.0
foo_utils.dll (2008-02-08 23:26:58)
    Playlist Tools 0.6.2 beta 6
foo_vis_shpeck.dll (2009-05-21 00:18:26)
    Shpeck - Winamp vis plugins wrapper 0.3.5

Recent events:
Opening track for playback: "Z:\MP3\P\Phoenix\Wolfgang Amadeus Phoenix (2009)\1 - Phoenix - Lisztomania.mp3"
Audioscrobbler: Submission succeeded.
Opening track for playback: "Z:\MP3\A\Abba\Abba - Visitors (1981)\ABBA - 01 - The Visitors.mp3"
Opening track for playback: "Z:\MP3\B\Black eyed peas\Black Eyed Peas - Let's Get it Started.mp3"
Opening track for playback: "Z:\MP3\L\Lifehouse\Who We Are (2007)\07 - Lifehouse - Easier to Be.mp3"
Opening track for playback: "Z:\MP3\F\Francis Cabrel\2000 - Double tour (live)\Cd2\Francis Cabrel - 03 - Ma Place Dans Le Trafic.mp3"
Opening track for playback: "Z:\MP3\A\Alain Souchon\1995 - Défoule sentimentale\09 - Rame.mp3"
Opening track for playback: "Z:\MP3\T\Teddybears\Soft Machine (2006)\03 - Teddybears - Cobrastyle (Feat. Mad Cobra).mp3"
Opening track for playback: "Z:\MP3\A\Acoustic Dub Messengers\Acoustic Dub Messengers (2003)\Acoustic Dub Messengers - (Im) Waiting With a Dog.mp3"
Reopening played file after update: "Z:\MP3\A\Acoustic Dub Messengers\Acoustic Dub Messengers (2003)\Acoustic Dub Messengers - (Im) Waiting With a Dog.mp3"

WSH Panel Mod

Reply #266
1.1.10 Beta 7 Uploaded
Added: Edge style support (won't available in pseudo transparent mode).
Fixes: pseudo transparent, and some sort of crashes...
Changes: IFbMetadb.UploadFileInfoSimple(), multivalue tags are now specified explicitly, see Interfaces.txt for more details.

NOTE: Backup your config before update, older version won't be compatible with this version.

WSH Panel Mod

Reply #267
Thanx a lot for the new beta !!! i hope it will fix all my crashes

just installed, foobar launched after and all is fine, so all my scripts looks compatible, why did you give to us this warning ? when can it be not compatible, with export/import of .fcl files ??

WSH Panel Mod

Reply #268
@Falstatff:
Upgrade is OK.
Downgrade will lose all your WSH Panel Mod configs.


WSH Panel Mod

Reply #270
New version doesn't work with my script (crash at foobar-startup)

Code: [Select]
Illegal operation:
Code: 80000003h, flags: 00000000h, address: 00EA55CEh

Call path:
entry=>user_interface::init=>play_callback_manager::register_callback=>play_callback/forward_status

Code bytes (00EA55CEh):
00EA558Eh:  CC CC 56 8B F0 57 83 C6 04 33 FF E8 02 FB FA FF
00EA559Eh:  33 C0 8B FE E8 C9 FB FA FF 5F 5E C3 CC CC CC CC
00EA55AEh:  CC CC 8A 08 88 0D 38 20 F9 00 C3 CC CC CC CC CC
00EA55BEh:  CC CC E8 FB 32 FB FF 80 3D 38 20 F9 00 00 74 01
00EA55CEh:  CC C3 8B 4C 24 08 8B 01 8B 50 0C 6A 00 FF D2 C2
00EA55DEh:  08 00 8B 49 04 8B 01 8B 10 FF E2 CC CC CC CC CC
00EA55EEh:  CC CC 8B 49 04 8B 01 8B 40 04 FF E0 CC CC CC CC
00EA55FEh:  CC CC 8B 49 04 8B 01 8B 40 08 FF E0 CC CC CC CC

Stack (002DD944h):
002DD924h:  00000000 00000000 00000000 00000000
002DD934h:  00000000 00000000 00000000 00000000
002DD944h:  00E90874 002DD9EC 000004B1 00000000
002DD954h:  002DD9EC 002DD948 002DD564 002DDA04
002DD964h:  00F44A00 00F76F90 00000000 002DD99C
002DD974h:  75DFFD72 000B077C 000004B1 E976E5FE
002DD984h:  3704AEC1 000004B1 DCBAABCD 00000000
002DD994h:  002DD9EC 000004B1 002DDA14 75DFFE4A
002DD9A4h:  00E90800 000B077C 000004B1 E976E5FE
002DD9B4h:  3704AEC1 80E8C78B 002DDAA8 002DDAA0
002DD9C4h:  0102FF58 00000024 00000001 00000000
002DD9D4h:  00000000 00000030 FFFFFFFF FFFFFFFF
002DD9E4h:  75DFFDF3 00000000 00000000 00000001
002DD9F4h:  00000000 00000000 002DD9B8 F5251B5F
002DDA04h:  002DDA68 75E4522D F51AE3F7 00000000
002DDA14h:  002DDA78 75E0018D 00000000 00E90800
002DDA24h:  000B077C 000004B1 E976E5FE 3704AEC1
002DDA34h:  0102FF6C 00000001 80E8C7E7 00000000
002DDA44h:  0102F6C0 00000000 002DDA78 75E0054D
002DDA54h:  E976E5FE 00000000 002DDA84 002DDA3C

Registers:
EAX: 00000001, EBX: 00000000, ECX: 00F8D638, EDX: 00E556E0
ESI: 000004B1, EDI: 002DD9EC, EBP: 002DD970, ESP: 002DD944

Crash location:
Module: foobar2000
Offset: 755CEh

Loaded modules:
foobar2000                      loaded at 00E30000h - 00FCA000h
ntdll                            loaded at 77560000h - 77687000h
kernel32                        loaded at 776D0000h - 777AC000h
COMCTL32                        loaded at 74940000h - 74ADE000h
msvcrt                          loaded at 76DF0000h - 76E9A000h
ADVAPI32                        loaded at 76A40000h - 76B06000h
RPCRT4                          loaded at 75C10000h - 75CD3000h
GDI32                            loaded at 76F80000h - 76FCB000h
USER32                          loaded at 75DE0000h - 75E7D000h
SHLWAPI                          loaded at 76EA0000h - 76EF9000h
DSOUND                          loaded at 6FB10000h - 6FB80000h
ole32                            loaded at 76CA0000h - 76DE5000h
WINMM                            loaded at 74030000h - 74062000h
OLEAUT32                        loaded at 76990000h - 76A1D000h
OLEACC                          loaded at 73FF0000h - 74029000h
POWRPROF                        loaded at 74F40000h - 74F5A000h
SHELL32                          loaded at 75E80000h - 76990000h
shared                          loaded at 10000000h - 1002B000h
imagehlp                        loaded at 77690000h - 776B9000h
UxTheme                          loaded at 74C40000h - 74C7F000h
dbghelp                          loaded at 72820000h - 728FC000h
COMDLG32                        loaded at 76F00000h - 76F73000h
IMM32                            loaded at 76A20000h - 76A3E000h
MSCTF                            loaded at 76FD0000h - 77098000h
LPK                              loaded at 776C0000h - 776C9000h
USP10                            loaded at 76BD0000h - 76C4D000h
CLBCatQ                          loaded at 76B10000h - 76B94000h
MMDevApi                        loaded at 74C10000h - 74C38000h
SETUPAPI                        loaded at 773D0000h - 7755A000h
WINTRUST                        loaded at 74EB0000h - 74EDD000h
CRYPT32                          loaded at 754B0000h - 755A2000h
MSASN1                          loaded at 75670000h - 75682000h
USERENV                          loaded at 75AC0000h - 75ADE000h
Secur32                          loaded at 75AA0000h - 75AB4000h
foo_playcount                    loaded at 00420000h - 00450000h
foo_input_la                    loaded at 00D30000h - 00D55000h
la-core                          loaded at 01CD0000h - 01D43000h
WINSPOOL                        loaded at 726E0000h - 72722000h
foo_covers                      loaded at 65CA0000h - 65CC8000h
foo_input_std                    loaded at 03600000h - 03741000h
foo_musicbrainz                  loaded at 659F0000h - 65A4C000h
WINHTTP                          loaded at 734E0000h - 7353F000h
foo_uie_albumart                loaded at 02150000h - 0218D000h
gdiplus                          loaded at 743F0000h - 7459B000h
foo_dsp_soundtouch              loaded at 01D50000h - 01D76000h
foo_cdda                        loaded at 021B0000h - 021F0000h
foo_channel_mixer                loaded at 021F0000h - 0222A000h
foo_input_alac                  loaded at 00E10000h - 00E30000h
foo_freedb2                      loaded at 02280000h - 022C1000h
foo_filedate                    loaded at 022D0000h - 022F2000h
foo_utils                        loaded at 659A0000h - 659E4000h
foo_dsp_bs2b                    loaded at 02300000h - 02327000h
foo_seek_box                    loaded at 65A80000h - 65AAB000h
foo_albumlist                    loaded at 03590000h - 035EB000h
foo_burninate                    loaded at 02380000h - 023C0000h
foo_playlists_sort              loaded at 74360000h - 74370000h
MSVCR90                          loaded at 738C0000h - 73963000h
foo_input_shorten                loaded at 03530000h - 0355D000h
foo_facets                      loaded at 03B40000h - 03BC1000h
MSIMG32                          loaded at 716C0000h - 716C5000h
foo_ui_std                      loaded at 03F10000h - 0401E000h
foo_converter                    loaded at 03BD0000h - 03C3C000h
foo_dbsearch                    loaded at 03C60000h - 03CD0000h
foo_input_tta                    loaded at 03E10000h - 03E3B000h
foo_rg_trn                      loaded at 03980000h - 0399B000h
foo_masstag                      loaded at 04020000h - 04074000h
foo_texttools                    loaded at 65890000h - 658C3000h
foo_out_wasapi                  loaded at 03E90000h - 03EB6000h
foo_uie_albumlist                loaded at 040A0000h - 040E3000h
foo_discogs                      loaded at 04210000h - 04276000h
WININET                          loaded at 75CE0000h - 75DC6000h
Normaliz                        loaded at 777B0000h - 777B3000h
urlmon                          loaded at 770A0000h - 771D2000h
iertutil                        loaded at 771E0000h - 773C8000h
foo_input_tak                    loaded at 64FA0000h - 64FE3000h
tak_deco_lib                    loaded at 03CD0000h - 03CEE000h
foo_abx                          loaded at 042A0000h - 042D2000h
foo_textdisplay                  loaded at 6C9B0000h - 6C9EF000h
foo_fileops                      loaded at 04550000h - 04596000h
foo_benchmark                    loaded at 03ED0000h - 03EFD000h
foo_ui_columns                  loaded at 04B10000h - 04C80000h
foo_input_dts                    loaded at 04600000h - 0466A000h
foo_input_ofr                    loaded at 045A0000h - 045DD000h
OptimFROG                        loaded at 047E0000h - 04812000h
foo_lyricsgrabber                loaded at 64DA0000h - 64E05000h
WS2_32                          loaded at 76BA0000h - 76BCD000h
NSI                              loaded at 75DD0000h - 75DD6000h
foo_verifier                    loaded at 04D80000h - 04DB9000h
foo_bitcompare                  loaded at 04AD0000h - 04AF8000h
foo_infospect                    loaded at 04DC0000h - 04DF7000h
foo_input_monkey                loaded at 04E50000h - 04E98000h
foo_preview                      loaded at 04EB0000h - 04ED2000h
foo_unpack                      loaded at 04EE0000h - 04F0E000h
foo_uie_wsh_panel_mod            loaded at 647F0000h - 64882000h
foo_uie_panel_splitter          loaded at 051C0000h - 05218000h
foo_dsp_std                      loaded at 05250000h - 05299000h
foo_quicktag                    loaded at 04F50000h - 04F84000h
foo_pqview                      loaded at 052A0000h - 052CD000h
foo_rgscan                      loaded at 052D0000h - 0531E000h
foo_uie_quicksearch              loaded at 05340000h - 05386000h
foo_biometric                    loaded at 05390000h - 053C7000h
FooID                            loaded at 053D0000h - 053EA000h
foo_uie_console                  loaded at 053F0000h - 0540A000h
foo_ac3                          loaded at 05450000h - 05480000h
foo_playlist_playback_attribute  loaded at 05490000h - 054BE000h
SXS                              loaded at 75980000h - 759DF000h
jscript                          loaded at 6E5B0000h - 6E664000h
VERSION                          loaded at 75320000h - 75328000h
rsaenh                          loaded at 74E40000h - 74E7B000h

Stack dump analysis:
Address: 00E90874h (foobar2000+60874h)
Address: 00F44A00h (foobar2000+114A00h)
Address: 00F76F90h (foobar2000+146F90h)
Address: 75DFFD72h (USER32+1FD72h), symbol: "GetWindowLongW" (+4B3h)
Address: 75DFFE4Ah (USER32+1FE4Ah), symbol: "GetWindowLongW" (+58Bh)
Address: 00E90800h (foobar2000+60800h)
Address: 75DFFDF3h (USER32+1FDF3h), symbol: "GetWindowLongW" (+534h)
Address: 75E4522Dh (USER32+6522Dh), symbol: "DrawFrame" (+ABAh)
Address: 75E0018Dh (USER32+2018Dh), symbol: "GetMessageW" (+296h)
Address: 00E90800h (foobar2000+60800h)
Address: 75E0054Dh (USER32+2054Dh), symbol: "PeekMessageW" (+F3h)
Address: 75E4522Dh (USER32+6522Dh), symbol: "DrawFrame" (+ABAh)
Address: 75E0022Bh (USER32+2022Bh), symbol: "DispatchMessageW" (+Fh)
Address: 00E90800h (foobar2000+60800h)
Address: 75E13BDBh (USER32+33BDBh), symbol: "DrawFocusRect" (+185h)
Address: 75E12DC0h (USER32+32DC0h), symbol: "SoundSentry" (+20Fh)
Address: 75E3CD48h (USER32+5CD48h), symbol: "SoftModalMessageBox" (+69Dh)
Address: 75DE0000h (USER32+0h)
Address: 75E3C230h (USER32+5C230h), symbol: "MB_GetString" (+EC3h)
Address: 75E3D2CAh (USER32+5D2CAh), symbol: "SoftModalMessageBox" (+C1Fh)
Address: 775C8964h (ntdll+68964h), symbol: "RtlConsoleMultiByteToUnicodeN" (+370h)
Address: 75E3D31Ch (USER32+5D31Ch), symbol: "SoftModalMessageBox" (+C71h)
Address: 75DFBE58h (USER32+1BE58h), symbol: "GetClipboardFormatNameA" (+1906h)
Address: 75DE0000h (USER32+0h)
Address: 75DFB22Ch (USER32+1B22Ch), symbol: "GetClipboardFormatNameA" (+CDAh)
Address: 775C68FDh (ntdll+668FDh), symbol: "RtlFreeHeap" (+28Dh)
Address: 75DE00E8h (USER32+E8h)
Address: 775C6968h (ntdll+66968h), symbol: "RtlRestoreLastWin32Error" (+38h)
Address: 75DE0000h (USER32+0h)
Address: 775A593Ah (ntdll+4593Ah), symbol: "LdrGetProcedureAddressEx" (+182h)
Address: 775C817Ah (ntdll+6817Ah), symbol: "RtlFreeUnicodeString" (+74h)
Address: 775A5910h (ntdll+45910h), symbol: "LdrGetProcedureAddressEx" (+158h)
Address: 75E3D3FCh (USER32+5D3FCh), symbol: "MessageBoxTimeoutW" (+7Fh)
Address: 75E3D4A6h (USER32+5D4A6h), symbol: "MessageBoxTimeoutA" (+A1h)
Address: 75DE0000h (USER32+0h)
Address: 75E3D654h (USER32+5D654h), symbol: "MessageBoxExA" (+1Bh)
Address: 053788B8h (foo_uie_quicksearch+388B8h), symbol: "foobar2000_get_interface" (+35F48h)
Address: 05369D60h (foo_uie_quicksearch+29D60h), symbol: "foobar2000_get_interface" (+273F0h)
Address: 75E3D6C6h (USER32+5D6C6h), symbol: "MessageBoxA" (+45h)
Address: 053788B8h (foo_uie_quicksearch+388B8h), symbol: "foobar2000_get_interface" (+35F48h)
Address: 05369D60h (foo_uie_quicksearch+29D60h), symbol: "foobar2000_get_interface" (+273F0h)
Address: 0535B329h (foo_uie_quicksearch+1B329h), symbol: "foobar2000_get_interface" (+189B9h)
Address: 053788B8h (foo_uie_quicksearch+388B8h), symbol: "foobar2000_get_interface" (+35F48h)
Address: 05369D60h (foo_uie_quicksearch+29D60h), symbol: "foobar2000_get_interface" (+273F0h)
Address: 053788B8h (foo_uie_quicksearch+388B8h), symbol: "foobar2000_get_interface" (+35F48h)
Address: 05356CA3h (foo_uie_quicksearch+16CA3h), symbol: "foobar2000_get_interface" (+14333h)
Address: 053788B8h (foo_uie_quicksearch+388B8h), symbol: "foobar2000_get_interface" (+35F48h)
Address: 05369D60h (foo_uie_quicksearch+29D60h), symbol: "foobar2000_get_interface" (+273F0h)
Address: 7779FFFCh (kernel32+CFFFCh), symbol: "WakeConditionVariable" (+6020h)
Address: 05356A5Ch (foo_uie_quicksearch+16A5Ch), symbol: "foobar2000_get_interface" (+140ECh)
Address: 7779FFFCh (kernel32+CFFFCh), symbol: "WakeConditionVariable" (+6020h)
Address: 6E5D10E5h (jscript+210E5h), symbol: "DllGetClassObject" (+A0A0h)
Address: 6E5D2805h (jscript+22805h), symbol: "DllGetClassObject" (+B7C0h)
Address: 6E5D2814h (jscript+22814h), symbol: "DllGetClassObject" (+B7CFh)
Address: 6E5CE9EBh (jscript+1E9EBh), symbol: "DllGetClassObject" (+79A6h)
Address: 6E6481CCh (jscript+981CCh), symbol: "DllRegisterServer" (+20053h)
Address: 6E5D26C5h (jscript+226C5h), symbol: "DllGetClassObject" (+B680h)
Address: 6E5D139Ch (jscript+2139Ch), symbol: "DllGetClassObject" (+A357h)
Address: 6E5D41FCh (jscript+241FCh), symbol: "DllGetClassObject" (+D1B7h)
Address: 6E5D22C1h (jscript+222C1h), symbol: "DllGetClassObject" (+B27Ch)
Address: 6E5D134Ch (jscript+2134Ch), symbol: "DllGetClassObject" (+A307h)
Address: 6E5D2B6Dh (jscript+22B6Dh), symbol: "DllGetClassObject" (+BB28h)
Address: 6E5D4035h (jscript+24035h), symbol: "DllGetClassObject" (+CFF0h)
Address: 6E5CEA8Bh (jscript+1EA8Bh), symbol: "DllGetClassObject" (+7A46h)
Address: 6E5CD881h (jscript+1D881h), symbol: "DllGetClassObject" (+683Ch)
Address: 6E5D2549h (jscript+22549h), symbol: "DllGetClassObject" (+B504h)
Address: 6E5D0D78h (jscript+20D78h), symbol: "DllGetClassObject" (+9D33h)
Address: 775C4FF0h (ntdll+64FF0h), symbol: "ZwQueryVirtualMemory" (+Ch)
Address: 77716D69h (kernel32+46D69h), symbol: "VirtualQueryEx" (+1Dh)
Address: 05358230h (foo_uie_quicksearch+18230h), symbol: "foobar2000_get_interface" (+158C0h)
Address: 77716D92h (kernel32+46D92h), symbol: "VirtualQuery" (+15h)
Address: 775C4FF0h (ntdll+64FF0h), symbol: "ZwQueryVirtualMemory" (+Ch)
Address: 05356F8Bh (foo_uie_quicksearch+16F8Bh), symbol: "foobar2000_get_interface" (+1461Bh)
Address: 7779FFFCh (kernel32+CFFFCh), symbol: "WakeConditionVariable" (+6020h)
Address: 05358077h (foo_uie_quicksearch+18077h), symbol: "foobar2000_get_interface" (+15707h)
Address: 7779FFFCh (kernel32+CFFFCh), symbol: "WakeConditionVariable" (+6020h)
Address: 05356770h (foo_uie_quicksearch+16770h), symbol: "foobar2000_get_interface" (+13E00h)
Address: 05358269h (foo_uie_quicksearch+18269h), symbol: "foobar2000_get_interface" (+158F9h)
Address: 05358230h (foo_uie_quicksearch+18230h), symbol: "foobar2000_get_interface" (+158C0h)
Address: 7776FEBEh (kernel32+9FEBEh), symbol: "UnhandledExceptionFilter" (+135h)
Address: 00F45895h (foobar2000+115895h)
Address: 76F86F58h (GDI32+6F58h), symbol: "CreateBitmap" (+106h)
Address: 7770FD89h (kernel32+3FD89h), symbol: "SetFilePointer" (+16Ch)
Address: 775D7FC1h (ntdll+77FC1h), symbol: "EtwSendNotification" (+9AA9h)
Address: 77569BDCh (ntdll+9BDCh), symbol: "WinSqmStartSession" (+45Dh)
Address: 775B4AB8h (ntdll+54AB8h), symbol: "RtlConvertUlongToLargeInteger" (+9E52h)
Address: 77564067h (ntdll+4067h), symbol: "RtlGetLengthWithoutTrailingPathSeperators" (+417h)
Address: 775B4AC8h (ntdll+54AC8h), symbol: "RtlConvertUlongToLargeInteger" (+9E62h)
Address: 775C5F79h (ntdll+65F79h), symbol: "RtlRaiseStatus" (+B4h)
Address: 775C5F8Dh (ntdll+65F8Dh), symbol: "RtlRaiseStatus" (+C8h)
Address: 775C5F4Bh (ntdll+65F4Bh), symbol: "RtlRaiseStatus" (+86h)
Address: 775699FAh (ntdll+99FAh), symbol: "WinSqmStartSession" (+27Bh)
Address: 77599812h (ntdll+39812h), symbol: "RtlMultiAppendUnicodeStringBuffer" (+3DBh)
Address: 775699FAh (ntdll+99FAh), symbol: "WinSqmStartSession" (+27Bh)
Address: 775C5DD7h (ntdll+65DD7h), symbol: "KiUserExceptionDispatcher" (+Fh)
Address: 7770FBAEh (kernel32+3FBAEh), symbol: "RaiseException" (+58h)
Address: 64865FB8h (foo_uie_wsh_panel_mod+75FB8h), symbol: "foobar2000_get_interface" (+4D2F8h)
Address: 769D453Ch (OLEAUT32+4453Ch), symbol: "VarUI4FromR8" (+Bh)
Address: 7770FBAEh (kernel32+3FBAEh), symbol: "RaiseException" (+58h)
Address: 769D453Ch (OLEAUT32+4453Ch), symbol: "VarUI4FromR8" (+Bh)
Address: 7770FBAEh (kernel32+3FBAEh), symbol: "RaiseException" (+58h)
Address: 64865FB8h (foo_uie_wsh_panel_mod+75FB8h), symbol: "foobar2000_get_interface" (+4D2F8h)
Address: 6E5D1811h (jscript+21811h), symbol: "DllGetClassObject" (+A7CCh)
Address: 64846455h (foo_uie_wsh_panel_mod+56455h), symbol: "foobar2000_get_interface" (+2D795h)
Address: 64865FB8h (foo_uie_wsh_panel_mod+75FB8h), symbol: "foobar2000_get_interface" (+4D2F8h)
Address: 64841250h (foo_uie_wsh_panel_mod+51250h), symbol: "foobar2000_get_interface" (+28590h)
Address: 64865FB8h (foo_uie_wsh_panel_mod+75FB8h), symbol: "foobar2000_get_interface" (+4D2F8h)
Address: 6485B8E8h (foo_uie_wsh_panel_mod+6B8E8h), symbol: "foobar2000_get_interface" (+42C28h)
Address: 648411D1h (foo_uie_wsh_panel_mod+511D1h), symbol: "foobar2000_get_interface" (+28511h)
Address: 647FD606h (foo_uie_wsh_panel_mod+D606h)
Address: 647FEFE1h (foo_uie_wsh_panel_mod+EFE1h)
Address: 6485E9B8h (foo_uie_wsh_panel_mod+6E9B8h), symbol: "foobar2000_get_interface" (+45CF8h)
Address: 00EAC0ACh (foobar2000+7C0ACh)
Address: 00EADA00h (foobar2000+7DA00h)
Address: 00F92039h (foobar2000+162039h)
Address: 00F46F69h (foobar2000+116F69h)
Address: 00EAD1DAh (foobar2000+7D1DAh)
Address: 00F473B9h (foobar2000+1173B9h)
Address: 647FDB64h (foo_uie_wsh_panel_mod+DB64h)
Address: 75E00245h (USER32+20245h), symbol: "DispatchMessageW" (+29h)
Address: 75E49B20h (USER32+69B20h), symbol: "DrawFrame" (+53ADh)
Address: 75E00454h (USER32+20454h), symbol: "DefWindowProcW" (+A0h)
Address: 75E0041Fh (USER32+2041Fh), symbol: "DefWindowProcW" (+6Bh)
Address: 75E4522Dh (USER32+6522Dh), symbol: "DrawFrame" (+ABAh)
Address: 75E0041Fh (USER32+2041Fh), symbol: "DefWindowProcW" (+6Bh)
Address: 00F8E814h (foobar2000+15E814h)
Address: 75E0067Bh (USER32+2067Bh), symbol: "IsWindow" (+0h)
Address: 75DFF860h (USER32+1F860h), symbol: "GetClipboardFormatNameA" (+530Eh)
Address: 75DFF8EAh (USER32+1F8EAh), symbol: "GetWindowLongW" (+2Bh)
Address: 75DFF8F6h (USER32+1F8F6h), symbol: "GetWindowLongW" (+37h)
Address: 648590DEh (foo_uie_wsh_panel_mod+690DEh), symbol: "foobar2000_get_interface" (+4041Eh)
Address: 64818466h (foo_uie_wsh_panel_mod+28466h)
Address: 75DFF860h (USER32+1F860h), symbol: "GetClipboardFormatNameA" (+530Eh)
Address: 75DFFD72h (USER32+1FD72h), symbol: "GetWindowLongW" (+4B3h)
Address: 75DF84DEh (USER32+184DEh), symbol: "EnumDisplayMonitors" (+92h)
Address: 648182D0h (foo_uie_wsh_panel_mod+282D0h)

Environment:
App: foobar2000 v0.9.6.9
OS: Windows 6.0.6002 Service Pack 2 x86
CPU: Intel® Pentium® D CPU 2.80GHz, features: MMX SSE SSE2 SSE3
Audio: Lautsprecher (VIA High Definition Audio); SPDIF-Schnittstelle (VIA High Definition Audio)
UI: Columns UI 0.3.8.0

Components:
Core (2009-08-22 12:25:22)
    foobar2000 core 0.9.6.9
foo_abx.dll (2009-06-07 14:25:26)
    ABX Comparator 1.3.4
foo_ac3.dll (2009-05-09 17:27:36)
    AC3 decoder 0.9.3
foo_albumlist.dll (2009-08-22 12:23:44)
    Album List 4.3.1
foo_benchmark.dll (2008-12-31 19:23:04)
    Decoding Speed Test 1.1
foo_biometric.dll (2009-03-14 21:42:35)
    Fingerprint tools 0.3
foo_bitcompare.dll (2008-12-05 16:08:02)
    Binary Comparator 1.2
foo_burninate.dll (2009-06-24 20:14:28)
    Audio CD Writer 3.0.1
foo_cdda.dll (2009-08-22 12:23:34)
    CD Audio Decoder 2.1.4
foo_channel_mixer.dll (2008-03-12 11:37:47)
    Channel Mixer 0.9.6.5
foo_converter.dll (2009-08-22 12:23:26)
    Converter 1.2.1
foo_covers.dll (2009-08-23 02:26:11)
    Locate Covers 0.04
foo_dbsearch.dll (2007-01-25 22:58:48)
    Database Search 1.4
foo_discogs.dll (2009-08-22 11:58:21)
    Discogs Tagger 1.20
foo_dsp_bs2b.dll (2009-06-08 12:30:06)
    bs2b 3.1.0
foo_dsp_soundtouch.dll (2008-02-16 08:05:52)
    SoundTouch DSP 0.1 (SSE)
foo_dsp_std.dll (2009-08-22 12:23:48)
    Standard DSP Array 1.0
foo_facets.dll (2008-03-20 22:18:38)
    Facets 2008-02-25
foo_filedate.dll (2007-09-19 13:07:14)
    File date 1.0.4
foo_fileops.dll (2009-08-22 12:22:36)
    File Operations 2.1.2
foo_freedb2.dll (2009-08-22 12:22:52)
    freedb Tagger 0.6.1
foo_infospect.dll (2008-02-01 21:02:58)
    Infospect 1.0.3
foo_input_alac.dll (2009-03-22 15:15:46)
    ALAC Decoder 1.0.3
foo_input_dts.dll (2009-05-02 13:58:30)
    DTS decoder 0.2.4
foo_input_la.dll (2009-04-18 20:00:13)
    Lossless Audio(La) decoder 0.01
foo_input_monkey.dll (2009-05-01 14:40:52)
    Monkey's Audio Decoder 2.1.4
foo_input_ofr.dll (2008-11-29 14:48:04)
    OptimFROG Lossless/DualStream Decoder 1.21b
foo_input_shorten.dll (2007-08-21 12:56:16)
    Shorten decoder 0.4.2.1
foo_input_std.dll (2009-08-22 12:23:28)
    Standard Input Array 1.0
foo_input_tak.dll (2009-06-15 22:44:54)
    TAK Decoder 0.4.3
foo_input_tta.dll (2008-11-29 14:55:14)
    TTA Audio Decoder (unofficial) 2.4.2
foo_lyricsgrabber.dll (2009-02-07 08:12:47)
    Lyrics Grabber 0.3.0.7 Alpha
foo_masstag.dll (2009-06-30 10:37:28)
    Masstagger 1.8.3
foo_musicbrainz.dll (2009-05-01 12:47:11)
    MusicBrainz Tagger 0.2
foo_out_wasapi.dll (2009-05-19 22:45:18)
    WASAPI output support 2.1
foo_playcount.dll (2009-04-29 20:09:32)
    Playback Statistics 2.1.9
foo_playlist_playback_attributes.dll (2009-08-01 15:20:06)
    Playlist Playback Attributes 0.1.0 [Aug  1 2009 - 15:15:00]
foo_playlists_sort.dll (2009-06-08 05:03:29)
    Playlist Sorter 0.1.9
foo_pqview.dll (2008-03-11 19:02:54)
    Playback Queue Viewer 0.2
foo_preview.dll (2008-12-22 22:41:11)
    Preview 1.4
foo_quicktag.dll (2008-05-01 19:39:02)
    Quick Tagger 1.0.1
foo_rg_trn.dll (2007-10-27 23:13:20)
    ReplayGain override 0.1.2
foo_rgscan.dll (2009-08-22 12:23:20)
    ReplayGain Scanner 2.0.9
foo_seek_box.dll (2009-03-30 00:28:18)
    Seek box v0.0.1
foo_textdisplay.dll (2008-07-08 19:45:26)
    Text Display UI Element 1.0 RC 3
foo_texttools.dll (2009-01-31 15:23:38)
    Text Tools 1.0.3
foo_ui_columns.dll (2009-08-30 17:21:36)
    Columns UI 0.3.8.0
foo_ui_std.dll (2009-08-22 12:23:54)
    Default User Interface 0.9.5
foo_uie_albumart.dll (2007-12-16 00:22:24)
    Album Art Panel 0.2.7.1
foo_uie_albumlist.dll (2009-06-14 00:49:19)
    Album list panel 0.3.5
foo_uie_console.dll (2009-08-29 18:06:24)
    Console panel 0.4
foo_uie_panel_splitter.dll (2009-06-07 22:36:54)
    Panel Stack Splitter 0.3.8(alpha)
foo_uie_quicksearch.dll (2007-05-18 14:31:10)
    Quick Search Toolbar 2.8l
foo_uie_wsh_panel_mod.dll (2009-09-13 14:05:41)
    WSH Panel Mod 1.1.10 Beta 7
foo_unpack.dll (2009-08-22 12:22:20)
    RAR reader 1.2
    ZIP/GZIP reader 1.0
foo_utils.dll (2008-02-08 23:26:58)
    Playlist Tools 0.6.2 beta 6
foo_verifier.dll (2009-06-21 23:03:56)
    File Integrity Verifier 1.0.5

Recent events:
Album list panel: initialised in 0.688 s
Album list panel: initialised in 0.634 s
Album list panel: initialised in 1.831 s
Album list panel: initialised in 0.652 s
Album list panel: initialised in 0.812 s
Album list panel: initialised in 0.719 s
Album list panel: initialised in 0.784 s
Album list panel: initialised in 0.772 s
WSH Panel Mod (HWND: 0x2107a0): initliased in 0.0000846 s
Error: WSH Panel Mod (HWND: 0x2107a0): Laufzeitfehler in Microsoft JScript:
Überlauf
Ln: 279, Col: 3

line 279:
Code: [Select]
window.RepaintRect(this.left-86, this.top, this.w+86, this.h);

WSH Panel Mod

Reply #271
Hmm, it looks very stable now, very good work T.P !!! (keep testing ...)

WSH Panel Mod

Reply #272
question: would it be possible to create a button that runs AlbumArtDownloader with artist and album parameters (exactly like foo_run does)? I'm asking because running the AlbumArtDownloader is the only thing I use with foo_run, and I don't want to use it if I don't need to.

thanks for any help

 

WSH Panel Mod

Reply #273
1.1.10 Beta 8 Uploaded
Fix crash when there's errors in script.

WSH Panel Mod

Reply #274
@Harum:
You can use either "Shell.Application" or "WScript.Shell" ActiveX object to do this job.

And Why don't you use UpdateFileInfoSimple() instead of UpdateFileInfo(), it's more effective.