Autohotkey DLL 调用 CreateCaret returns 0(函数失败)但 A_LastError 也是 0(函数成功)
Autohotkey DLLcall to CreateCaret returns 0 (The function failed) but A_LastError is also 0 (The function succeeded)
我正在尝试使用简单的 AHK DLLCall 调用 user32 api 函数 CreateCaret。我想让它给记事本一个粗文本插入符。
caretWidth := 10
NULL := 0
Ptr := A_PtrSize ? "Ptr" : "UInt" ; If A_PtrSize is not defined, use UInt instead.
WinHwnd := WinExist("A")
result := Dllcall("CreateCaret", Ptr, WinHwnd, Ptr, NULL, "Int", caretWidth, "Int", 0)
msgbox % "LE " A_lasterror ; Gives LE 0
msgbox % result ; Gives 0
这应该等同于以下 C++ 调用:
CreateCaret(0x37072c, NULL, 10, 0);
故意搞砸函数名会使结果空白,所以我相信函数被正确调用了。我只是不知道为什么会失败
使用类似的代码 GetCursorBlinkRate
returns 一个合理的数字。
我也试过 caretWidth := 0
关于 GetLastError
的类似问题是 c++ 调用,AHK 应该确保及时调用 GetLastError
以确保正确设置 A_lasterror。为什么明明函数失败却没有显示错误代码?
您无法更改外部进程的插入符号。
例如,如果您尝试这样做,如果您拥有该流程,您会发现它工作得很好:
#Persistent
Gui, +hwndHWND
Gui, Add, Edit
Gui, Show
DllCall("CreateCaret", Ptr, HWND, Ptr, 0, Int, 50, Int, 50)
DllCall("ShowCaret", Ptr, HWND)
ESC::
GuiClose:
ExitApp
我正在尝试使用简单的 AHK DLLCall 调用 user32 api 函数 CreateCaret。我想让它给记事本一个粗文本插入符。
caretWidth := 10
NULL := 0
Ptr := A_PtrSize ? "Ptr" : "UInt" ; If A_PtrSize is not defined, use UInt instead.
WinHwnd := WinExist("A")
result := Dllcall("CreateCaret", Ptr, WinHwnd, Ptr, NULL, "Int", caretWidth, "Int", 0)
msgbox % "LE " A_lasterror ; Gives LE 0
msgbox % result ; Gives 0
这应该等同于以下 C++ 调用:
CreateCaret(0x37072c, NULL, 10, 0);
故意搞砸函数名会使结果空白,所以我相信函数被正确调用了。我只是不知道为什么会失败
使用类似的代码 GetCursorBlinkRate
returns 一个合理的数字。
我也试过 caretWidth := 0
关于 GetLastError
的类似问题是 c++ 调用,AHK 应该确保及时调用 GetLastError
以确保正确设置 A_lasterror。为什么明明函数失败却没有显示错误代码?
您无法更改外部进程的插入符号。
例如,如果您尝试这样做,如果您拥有该流程,您会发现它工作得很好:
#Persistent
Gui, +hwndHWND
Gui, Add, Edit
Gui, Show
DllCall("CreateCaret", Ptr, HWND, Ptr, 0, Int, 50, Int, 50)
DllCall("ShowCaret", Ptr, HWND)
ESC::
GuiClose:
ExitApp