C ++简单的钩子和隐藏命令提示符

时间:2012-09-30 15:50:00

标签: c++ winapi hook

我是C ++的新手,刚刚学习了钩子,所以我有一个C ++程序,它在KeyEvent发生时运行一个函数:

LRESULT WINAPI KeyEvent(int nCode, WPARAM wParam, LPARAM lParam)
{  
  //Do C++ stuff
}

到目前为止,这是我唯一的钩子。

但是我想隐藏执行代码时弹出的命令提示符。

我被告知我可以使用此片段隐藏它:

HWND Stealth;
AllocConsole();
Stealth = FindWindowA("ConsoleWindowClass", NULL);
ShowWindow(Stealth,0);  

但是,如果我将它放在钩子中,它将不会隐藏提示,直到按下一个键(不理想),如果我将它放在钩子上方(靠近程序顶部)我会收到错误...

所以我的问题是,是否还有其他类型的钩子,我可以在程序运行后将片段放入隐藏命令提示符中? - 或者是否有其他方式像我的代码片段隐藏我可以使用的命令提示?

非常感谢。

2 个答案:

答案 0 :(得分:2)

更改项目设置以构建“GUI”应用程序(这会更改一些链接器选项),并提供WinMain入口点而不是main。那样就没有控制台窗口了。

答案 1 :(得分:0)

您始终可以使用WM_CREATE消息来执行您想要的操作。在里面打电话:

if(MSG == WM_CREATE)
  ShowWindow( GetConsoleWindow(), SW_HIDE );

这可能适合您,如果您再次需要控制台,只需将SW_HIDE更改为SW_SHOW。

通常你会为消息类型使用switch语句。