首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在C++中隐藏键盘记录器的控制台窗口

在C++中隐藏键盘记录器的控制台窗口
EN

Stack Overflow用户
提问于 2018-09-16 16:53:00
回答 1查看 700关注 0票数 -4

谁能解释下面的代码,这是用来隐藏的控制台窗口,而在c++中做键盘记录器项目

代码语言:javascript
复制
void hide();
int main()
{
    hide();
    MSG Msg; 

    //IO::MKDir(IO::GetOurPath(true));

    //InstallHook();

    while (GetMessage(&Msg, NULL, 0, 0)) 
    {
        TranslateMessage(&Msg);
        DispatchMessage(&Msg);
    }

    //MailTimer.Stop();
    return 0;
}

void hide()
{
    HWND stealth; 
    AllocConsole();
    stealth = FindWindowA("ConsoleWindowClass", NULL);
    ShowWindow(stealth, 0);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-16 18:10:04

让我们把它分成更小的部分:

代码语言:javascript
复制
void hide();
int main()
{
    hide();
    MSG Msg; 

    //IO::MKDir(IO::GetOurPath(true));

    //InstallHook();

   while (GetMessage(&Msg, NULL, 0, 0))
   {
       TranslateMessage(&Msg);
       DispatchMessage(&Msg);
   }

上面的循环是所谓的。由于windows GUI程序是事件驱动的,因此可以使用such a loop is the pattern为windows进程处理传入的windows消息。由于您的程序将接收WM_QUIT消息,因此GetMessage()将返回FALSE,并且循环将退出。TranslateMessage()只是将虚拟按键消息转换为字符消息,以便在需要时进一步向下处理。DispatchMessage()的作用是确保发送到特定窗口的消息能够找到到达该窗口的WindowProc callback的途径。

代码语言:javascript
复制
    //MailTimer.Stop();
    return 0;
}

void hide()
{
    HWND stealth; 
    AllocConsole();

上面的最后一行是allocating a new console for the process.。如果您的进程已经有了一个控制台,则此调用将失败,返回零表示。

代码语言:javascript
复制
    stealth = FindWindowA("ConsoleWindowClass", NULL);

FindWindowA()所做的是向具有指定类名和窗口名的窗口返回一个窗口句柄(HWND)。在这里,它是在省略名称(第二个参数)并仅指定类的情况下使用的,对于这个类,在控制台窗口的情况下只能存在一个窗口,其类是"ConsoleWindowClass"

代码语言:javascript
复制
    ShowWindow(stealth, 0);
}

All this line does隐藏了由传递的句柄标识的窗口,这是我们的控制台窗口,我们在代码片段中已经知道了这一点。本例中的第二个参数0SW_HIDE的枚举器值,因此在该行之后将隐藏控制台窗口。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52352526

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档