Firefox addon Windows上的枚举属性不可读
我编写了一些代码来枚举当前窗口的属性。您可以将其复制并粘贴到scratchpad并运行它。它正在枚举,但不是可读的字符串 此外,它还列举了当前firefox窗口的4个属性,这听起来是正确的还是不是所有属性 代码:Firefox addon Windows上的枚举属性不可读,firefox-addon,jsctypes,Firefox Addon,Jsctypes,我编写了一些代码来枚举当前窗口的属性。您可以将其复制并粘贴到scratchpad并运行它。它正在枚举,但不是可读的字符串 此外,它还列举了当前firefox窗口的4个属性,这听起来是正确的还是不是所有属性 代码: 通过使其var LPCTSTR=ctypes.jschar.ptr进行修复而不是ctypes.char.ptr 并执行console.log('lpctstr:',lpctstr.readString())thereadString而不是contents Cu.import('reso
通过使其
var LPCTSTR=ctypes.jschar.ptr进行修复代码>而不是ctypes.char.ptr
并执行console.log('lpctstr:',lpctstr.readString())
thereadString
而不是contents
Cu.import('resource://gre/modules/ctypes.jsm');
var lib = {
user32: ctypes.open('user32.dll')
}
var HANDLE = ctypes.size_t;
var HWND = ctypes.int32_t;
var BOOL = ctypes.bool;
var LPARAM = ctypes.size_t;
var LPCTSTR = ctypes.char.ptr;
var CallBackABI;
var WinABI;
if (ctypes.size_t.size == 8) {
CallBackABI = ctypes.default_abi;
WinABI = ctypes.default_abi;
} else {
CallBackABI = ctypes.stdcall_abi;
WinABI = ctypes.winapi_abi;
}
var PropEnumProc = ctypes.FunctionType(CallBackABI, BOOL, [HWND, LPCTSTR, HANDLE]);
var EnumProps = lib.user32.declare('EnumPropsW', WinABI, ctypes.int, HWND, PropEnumProc.ptr);
// code to run it
function doEnumProps(tHwnd) {
var i = 0;
var SearchPD = function(hwnd, lpctstr, hnd) {
console.log('i:', i)
i++;
//console.log('hwnd:', hwnd)
console.log('lpctstr:', lpctstr.contents)
console.log('hnd:', hnd.toString())
return true; //let enum continue till nothing to enum
}
SearchPD_ptr = PropEnumProc.ptr(SearchPD);
var wnd = LPARAM(0);
console.time('EnumProps');
//EnumProps(ctypes.cast(wnd.address(), LPARAM), SearchPD_ptr);
EnumProps(tHwnd, SearchPD_ptr);
console.timeEnd('EnumProps');
}
var tWin = window; //Services.wm.getMostRecentWindow(null); // tWin means target_window
var tBaseWin = tWin.QueryInterface(Ci.nsIInterfaceRequestor)
.getInterface(Ci.nsIWebNavigation)
.QueryInterface(Ci.nsIDocShellTreeItem)
.treeOwner.QueryInterface(Ci.nsIInterfaceRequestor)
.getInterface(Ci.nsIBaseWindow);
var cHwnd = ctypes.int32_t(ctypes.UInt64(tBaseWin.nativeHandle));
console.time('doEnumProps');
var pids = doEnumProps(cHwnd);
console.timeEnd('doEnumProps');
for (var l in lib) {
lib[l].close();
}