我正在使用js-ctypes创建一个Firefox插件,并使用user32.dll函数来设置配置文件的所有窗口的图标。
我计划在Mac OS和Linux上执行此操作,但首先尝试淘汰Windows。
所以我设置了这样的图标:GitHub - Gist :: Noitidart / _ff-addon-snippet-ChangeWindowIcon.js - Rev2
该代码已简化。我用这个代码来应用于所有窗口:
Cu.import('resource://gre/modules/ctypes.jsm');
var user32 = ctypes.open('user32.dll');
var SendMessage = user32.declare('SendMessageW', ctypes.winapi_abi, ctypes.uintptr_t,
ctypes.int32_t,
ctypes.unsigned_int,
ctypes.int32_t,
ctypes.voidptr_t
);
var LoadImage = user32.declare('LoadImageA', ctypes.winapi_abi, ctypes.voidptr_t,
ctypes.int,
ctypes.char.ptr,
ctypes.unsigned_int,
ctypes.int,
ctypes.int,
ctypes.unsigned_int
);
var IMAGE_BITMAP = 0;
var IMAGE_ICON = 1;
var LR_LOADFROMFILE = 16;
// RUNNING STUFF BELOW - ABVOE WAS JUST DEFINING STUFF
var DOMWindows = Services.wm.getEnumerator(null);
while (DOMWindows.hasMoreElements()) {
var aDOMWindow = DOMWindows.getNext();
var basewindow = aDOMWindow.QueryInterface(Ci.nsIInterfaceRequestor)
.getInterface(Ci.nsIWebNavigation)
.QueryInterface(Ci.nsIDocShellTreeItem)
.treeOwner
.QueryInterface(Ci.nsIInterfaceRequestor)
.nsIBaseWindow;
var nativeHandle = basewindow.nativeHandle;
var targetWindow_handle = parseInt(nativeHandle);
var hIconBig = LoadImage(targetWindow_handle, 'C:\\Documents and Settings\\SONY VAIO\\My Documents\\Downloads\\puzzle.ico', IMAGE_ICON, 256, 256, LR_LOADFROMFILE); //MUST BE A FILEPATH TO A ICO!!!
var hIconSmall = LoadImage(targetWindow_handle, 'C:\\Documents and Settings\\SONY VAIO\\My Documents\\Downloads\\puzzle.ico', IMAGE_ICON, 16, 16, LR_LOADFROMFILE); //MUST BE A FILEPATH TO A ICO!!!
var successSmall = SendMessage(targetWindow_handle, 0x0080 /** WM_SETICON **/ , 0 /** ICON_SMALL **/ , hIconSmall); //if it was success it will return 0? im not sure. on first time running it, and it was succesful it returns 0 for some reason
var successBig = SendMessage(targetWindow_handle, 0x0080 /** WM_SETICON **/ , 1 /** ICON_BIG **/ , hIconBig); //if it was success it will return 0? im not sure. on first time running it, and it was succesful it returns 0 for some reason
}
user32.close();
问题如下:
Alt
+ Tab
时图标为正常图标如果将窗口集中到一个组中(由于任务栏溢出)并且所有图标都已更改,则集总组图标仍然不是更改的图标。如图中所示:
答案 0 :(得分:1)
你真的不应该在一个问题中提出这么多问题 ......
按Alt + Tab时,图标为正常图标
您正在尝试加载和设置256x256图标。 XP不支持这样的图标。你应该添加一些错误检查;)
IIRC你应该为大一个设置32x32图标。或者更准确地说是SM_CXICON
and/or SM_CXSMICON
如果将窗口集中到一个组中(由于任务栏溢出)并且所有图标都已更改,则集总组图标仍然不是更改的图标。如图中所示:
我觉得你对这个不太好运。 XP将采用.exe
IIRC中的主要资源图标。
Win 7上的问题
修改的
实际上我对XP分组的东西可能是错的。不久前,最后在win32上乱用图标。 GCLP_HICON
/GCLP_HICONSM
可能工作。