FindWindowExA函数怎样用ffi调用?

function findWindowExample() { var { FindWindowExA } = ffi.LoadLibrary("user32", { FindWindowExA: { returnType: "uint32", // 返回值类型:HWND对应32位无符号整数 parameters: [ "uint32", // 参数1:hWndParent (HWND) "uint32", // 参数2:hWndChildAfter (HWND) "string", // 参数3:lpszClass (ANSI字符串) "string" // 参数4:lpszWindow (ANSI字符串) ] } }); var notepadHwnd = FindWindowExA(0, 0, null, null); } 参考了ai,但执行方法错误
安徽省
浏览 153
收藏
5
分享
5 +1
19
+1
全部评论 19
 
wils
wils

创作者俱乐部成员

要不还是用W方法吧,A方法写出来更麻烦... function u16ptr(s) { const t = ffi.Buffer("u16string") const b = new t() b.write(s) const v = new Uint32Array(b) return FFI.BigIntToPointer(v[0]) } function findWindowExample() { const { FindWindowExW } = ffi.LoadLibrary("user32", { FindWindowExW: { returnType: "uint32", parameters: [ "uint32", "uint32", "pointer", "pointer" ] } }) console.log(FindWindowExW(0, 0, null, u16ptr("WPS 宏编辑器"))) }
· 海南省
回复
 
wils
wils

创作者俱乐部成员

我也觉得这是bug,顺便问问官方,到底应该怎么写 暂时写成这样可以 "pointer" // 参数4:lpszWindow (ANSI字符串) ] } }); var notepadHwnd = FindWindowExA(0, 0, "Notepad", null); 也就是说参数为pointer才能传递null,写起来很麻烦,要么给接口定义几个别名,分别接收pointer和sting,要么手动传string的引用。。。
· 海南省
回复
恰同学少年
string 根本不是 char*
· 黑龙江省
回复