Last active
August 29, 2015 14:02
-
-
Save yajd/e49b49b4d5c3887889b9 to your computer and use it in GitHub Desktop.
_ff-addon-snippet-GetTaskmanWindowCTypes - Using js-ctypes to access the taskbar of WinXP. May be useful in Win7 as well.
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
Components.utils.import("resource://gre/modules/ctypes.jsm"); | |
var kernel = ctypes.open("kernel32.dll"); | |
var HMODULE = ctypes.uint32_t; | |
var HWND = ctypes.uint32_t; | |
var LPCTSTR = ctypes.jschar.ptr; | |
var LPCSTR = ctypes.char.ptr; | |
var LoadLibrary = kernel.declare("LoadLibraryW", ctypes.winapi_abi, HMODULE, LPCTSTR); | |
var GetProcAddress = kernel.declare("GetProcAddress", ctypes.winapi_abi, ctypes.void_t.ptr, HMODULE, LPCSTR); | |
var hUser = LoadLibrary("user32"); | |
/* http://msdn.microsoft.com/en-us/library/windows/desktop/ms633500%28v=vs.85%29.aspx | |
*/ | |
var FindWindowExW = GetProcAddress(hUser, "FindWindowExW"); | |
var FindWindowExType = ctypes.FunctionType(ctypes.winapi_abi, ctypes.int32_t, [HWND, HWND, LPCTSTR, LPCTSTR]); | |
FindWindowExW = ctypes.cast(FindWindowExW, FindWindowExType.ptr); | |
//funcPtr0(0, "Test1", "Test2", 0); | |
var GetTaskmanWindow = GetProcAddress(hUser, "GetTaskmanWindow"); | |
var GetTaskmanWindowType = ctypes.FunctionType(ctypes.winapi_abi, ctypes.int32_t, []); | |
GetTaskmanWindow = ctypes.cast(GetTaskmanWindow, GetTaskmanWindowType.ptr); | |
var hHwnd = GetTaskmanWindow(); | |
var hToolbar = FindWindowExW(hHwnd, 0, 'ToolbarWindow32', null); | |
alert(hToolbar) | |
var SendMessage = GetProcAddress(hUser, "SendMessage"); | |
var SendMessageType = ctypes.FunctionType(ctypes.winapi_abi, ctypes.uintptr_t, [ctypes.int32_t, ctypes.unsigned_int, ctypes.int32_t, ctypes.voidptr_t]); | |
SendMessage = ctypes.cast(SendMessage, SendMessageType.ptr); | |
var Count = SendMessage(hToolbar, 0x418 /** TB_BUTTONCOUNT **/, 0, ctypes.voidptr_t(0)); | |
Services.wm.getMostRecentWindow(null).alert(Count); | |
/* | |
var funcPtr = GetProcAddress(hUser, "GetTaskmanWindow"); | |
// Now we have a pointer to a function, let's cast it to the right type | |
var GetTaskmanWindowType = ctypes.FunctionType(ctypes.winapi_abi, ctypes.int32_t, [HWND, LPCTSTR, LPCTSTR, ctypes.uint32_t]); | |
funcPtr = ctypes.cast(funcPtr, GetTaskmanWindowType.ptr); | |
funcPtr(0, "Test1", "Test2", 0); | |
*/ | |
var funcPtr = GetProcAddress(hUser, "MessageBoxW"); | |
// Now we have a pointer to a function, let's cast it to the right type | |
var MessageBoxType = ctypes.FunctionType(ctypes.winapi_abi, ctypes.int32_t, [HWND, LPCTSTR, LPCTSTR, ctypes.uint32_t]); | |
funcPtr = ctypes.cast(funcPtr, MessageBoxType.ptr); | |
funcPtr(0, "Test1", "Test2", 0); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
combining nmaiers ask.m.o method and my cleaned up of
funcPtr#
version here