Last active
August 29, 2015 14:02
-
-
Save Noitidart/33b6d28ebf4ff5ebdff6 to your computer and use it in GitHub Desktop.
_ff-addon-snippet-ChangeWindowIcon - Uses js-ctypes to change the icon of a window. (Windows Only)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Cu.import('resource://gre/modules/ctypes.jsm'); | |
var user32 = ctypes.open('user32.dll'); | |
/* http://msdn.microsoft.com/en-us/library/windows/desktop/ms644950%28v=vs.85%29.aspx | |
* LRESULT WINAPI SendMessage( | |
* __in HWND hWnd, | |
* __in UINT Msg, | |
* __in WPARAM wParam, | |
* __in LPARAM lParam | |
* ); | |
*/ | |
var SendMessage = user32.declare('SendMessageW', ctypes.winapi_abi, ctypes.uintptr_t, | |
ctypes.voidptr_t, | |
ctypes.unsigned_int, | |
ctypes.int32_t, | |
ctypes.voidptr_t | |
); | |
/* http://msdn.microsoft.com/en-us/library/windows/desktop/ms648045%28v=vs.85%29.aspx | |
* HANDLE WINAPI LoadImage( | |
* __in_opt_ HINSTANCE hinst, | |
* __in_ LPCTSTR lpszName, | |
* __in_ UINT uType, | |
* __in_ int cxDesired, | |
* __in_ int cyDesired, | |
* __in_ UINT fuLoad | |
* ); | |
*/ | |
var LoadImage = user32.declare('LoadImageA', ctypes.winapi_abi, ctypes.voidptr_t, | |
ctypes.voidptr_t, | |
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 = ctypes.voidptr_t(ctypes.UInt64(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(); |
Committed Rev3
Committed Rev4
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Hey man it was definitely the problem where when I set the title of the window, then ran
FindWindow
right after that, it was not finding the window because it takes a little bit after the setting of title for it to register on OS. I updated in Rev2 to usenativeHandle
so that's fixed now. :)