【问题标题】:C++ simple hooks and hiding command promptC++ 简单钩子和隐藏命令提示符
【发布时间】:2012-09-30 15:50:00
【问题描述】:

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

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

这是我目前唯一的钩子。

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

我被告知我可以使用这个 sn-p 来隐藏它:

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

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

所以我的问题是,有没有其他类型的钩子可以在程序运行后放置 sn-p 以隐藏命令提示符? - 或者有没有像我的 sn-p 这样的其他方式来隐藏我可以使用的命令提示符?

非常感谢。

【问题讨论】:

  • Hooks 不是 C++ 的东西(语言标准没有提到它们)而是 WINAPI 的东西。如果您使用 Qt 编码(这将使您的代码可移植到 Windows、Linux、MacOSX...),您将不会使用钩子(但 Qt 信号和槽机制)。
  • 如果您不需要控制台,为什么不创建程序Win32 并且不创建任何窗口?
  • 我该怎么做?

标签: c++ winapi hook


【解决方案1】:

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

【讨论】:

  • 这不是让软件变成图形用户界面吗?
  • 会有一些变化,比如你不再有stdin/stdout/stderr(因为没有控制台了),如果你通过运行它,它不会打开控制台窗口图形用户界面外壳。除此之外,除非您创建 GUI,否则您的程序不会是“GUI”程序。
  • 你知道如何在 Dev C++ 中更改项目设置吗?
【解决方案2】:

你总是可以使用 WM_CREATE 消息来做你想做的事。在里面调用:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-13
    • 1970-01-01
    • 2015-09-13
    • 1970-01-01
    • 2022-11-23
    • 2015-12-11
    • 1970-01-01
    相关资源
    最近更新 更多