我可以从Visual Studio立即窗口调用Win32 API吗?

Ric*_*dle 11 c c++ debugging winapi visual-studio

我正在调试一个C++ Win32应用程序,我想从该进程的上下文中调用一个任意的Win32 API,就好像该程序运行了这行代码:

DestroyWindow(0x00021c0e);
Run Code Online (Sandbox Code Playgroud)

但是进入立即窗口会进入:

CXX0017: Error: symbol "DestroyWindow" not found
Run Code Online (Sandbox Code Playgroud)

编辑:使用函数的全名{,,user32.dll}_NtUserDestroyWindow@4,我可以使用立即窗口来了解我的意思,并显示函数的地址:

{,,user32.dll}_NtUserDestroyWindow@4
0x76600454 _NtUserDestroyWindow@4
Run Code Online (Sandbox Code Playgroud)

但当我试图调用它时,会发生这种情况:

{,,user32.dll}_NtUserDestroyWindow@4(0x00021c0e);
CXX0004: Error: syntax error
Run Code Online (Sandbox Code Playgroud)

甚至可以像这样从立即窗口调用C函数,还是我咆哮错误的树?

Ada*_*eld 5

一旦你有了函数地址(正如你在更新的问题中所做的那样),你可以尝试将它转换为函数指针并调用它:

(*(BOOL (*)(HWND))0x76600454)((HWND)0x00021c0e)
Run Code Online (Sandbox Code Playgroud)

第一部分将地址转换为BOOL (*)(HWND),指向一个带HWND参数并返回的函数的指针BOOL.然后,取消引用并调用函数指针.确保参数正确,否则会发生不好的事情.在64位系统上,HWND可能是64位,因此您可能无法通过将参数作为传递来逃脱int.

编辑:查看完整故事的评论.