Firefox addon Windows上的枚举属性不可读

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

我编写了一些代码来枚举当前窗口的属性。您可以将其复制并粘贴到scratchpad并运行它。它正在枚举,但不是可读的字符串

此外,它还列举了当前firefox窗口的4个属性,这听起来是正确的还是不是所有属性

代码:


通过使其
var LPCTSTR=ctypes.jschar.ptr进行修复而不是
ctypes.char.ptr

并执行
console.log('lpctstr:',lpctstr.readString())
the
readString
而不是
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();
}