C++ 如何在启动时隐藏控制台窗口
C++ How do I hide a console window on startup?
我想知道如何在控制台窗口启动时隐藏它。
这是针对键盘记录程序的,但我无意入侵某人。这是为了一个小小的学校项目,我想展示黑客的危险。
这是我到目前为止的代码:
#include <cstdlib>
#include <iostream>
#include <Windows.h>
using namespace std;
int main()
{
cout << "Note. This program is only created to show the risk of being unaware of hackers." << endl;
cout << "This program should never be used to actually hack someone." << endl;
cout << "Therefore this program will never be avaiable to anyone, except me." << endl;
FreeConsole();
system("PAUSE");
return 0;
}
我看到窗口出现并在启动时立即消失。之后它似乎会立即打开一个新的控制台,它只是空白的。(空白的意思是"按任意键继续.."我想知道它是否与system("PAUSE")
有关(
所以我想知道为什么它会打开一个新的控制台,而不仅仅是创建和隐藏第一个控制台。
谢谢,:)
要按需隐藏/显示控制台窗口,您可以使用以下函数:可以使用 ShowWindow 隐藏/显示控制台。GetConsoleWindow 检索控制台使用的窗口句柄。IsWindowVisible 可用于检查窗口(在本例中为控制台(是否可见。
#include <Windows.h>
void HideConsole()
{
::ShowWindow(::GetConsoleWindow(), SW_HIDE);
}
void ShowConsole()
{
::ShowWindow(::GetConsoleWindow(), SW_SHOW);
}
bool IsConsoleVisible()
{
return ::IsWindowVisible(::GetConsoleWindow()) != FALSE;
}
代码中实际上不可能在启动时隐藏控制台窗口,因为可执行文件由具有特定设置的操作系统运行。这就是为什么控制台窗口在启动时显示很短的时间的原因,例如使用FreeConsole();
要在启动时真正隐藏窗口,您必须为编译器添加一个特殊选项。如果你在Windows(MinGW(上使用gcc,你可以在makefile中添加-mwindows
作为编译器选项,绝对不会有窗口或"flash"。我不知道VisualStudio或您目前使用的任何内容,但是更改IDE编译代码的方式是要走的路,而不是C++编码解决方法。
在我看来,这种方法比使用WinMain
更好,因为它工作可靠,并且您不会依赖C++ Code平台。
#include <windows.h>
ShowWindow(GetConsoleWindow(), SW_HIDE); //SW_RESTORE to bring back
这会将窗口句柄 (HWND( 返回到ShowWindow()
进而隐藏它。此解决方案仅适用于 Windows 系统。
这是问题的正确答案,即使它没有标记为它。
编辑:一个可能的解决方案/黑客可能是(在Visual Studio中(Linker->System->SubSystem设置为"Windows (/SUBSYSTEM:WINDOWS("而不是"Console (/SUBSYSTEM:CONSOLE("。然而,这可能不是最佳的。
#include <windows.h>
#include <iostream.h>
void Stealth()
{
HWND Stealth;
AllocConsole();
Stealth = FindWindowA("ConsoleWindowClass", NULL);
ShowWindow(Stealth,0);
}
int main()
{
cout<<"this sentence is visiblen";
Stealth(); //to hide console window
cout<<"this sentence is not visiblen";
system("PAUSE"); //here you can call any process silently like system("start chrome.exe") , so google chrome will open and will surprise user..
return EXIT_SUCCESS;
}
控制台所以我想知道为什么它会打开一个新的控制台,而不仅仅是创建和隐藏第一个控制台。
应用程序实际上并不创建控制台本身,它只是在一个控制台中运行。如果从资源管理器运行可执行文件,Windows 会创建一个控制台供其运行。当您调用 FreeConsole
时,它不会关闭新控制台,只是将您的进程与它分离。
正如WhozCraig在评论中指出的那样,创建一个常规的Windows应用程序,而不是创建一个窗口。
您正在编写控制台程序,因为入口点main()
。对于基于图形的 Windows 应用程序,入口点应为 WinMain
http://msdn.microsoft.com/en-us/library/windows/desktop/ms633559(v=vs.85(.aspx
这很简单。 FreeConsole(( api 将为您创造魔力
BOOL WINAPI FreeConsole(VOID);
只需将应用程序的类型从"控制台应用程序"更改为"Windows appllication"(并将main
更改为WinMain
(。在这种情况下,应用程序将在没有控制台窗口的情况下启动。
只需在启动时执行此操作
myConsole = GetConsoleWindow();
ShowWindow(myConsole,0);
8年后哈哈
但
为您的项目提供简单的解决方案只是简单地使用 .vbs
Dim WShell
Set WShell = CreateObject("WScript.Shell")
WShell.Run "xr.exe", 0
Set WShell = Nothing
那将运行启动XR.exe隐藏然而,Windows Defender认为这是一种病毒。
- 在C++中隐藏键盘记录器的控制台窗口
- 如何在 c++ 程序运行时隐藏控制台?
- 如何在调用系统()时隐藏控制台窗口
- ShowCursor(FALSE) 不会在控制台应用程序上隐藏光标
- 如何在使用C++打开隐藏的 COM 对象时隐藏控制台窗口
- 具有隐藏控制台窗口的Allocconsole()
- C++ Windows CreateChildProcess - 隐藏/不显示子进程的控制台窗口
- 对 SDL 隐藏控制台窗口
- Visual C 隐藏控制台窗口
- 如何在QxtApplication中隐藏控制台窗口
- Qt 隐藏控制台窗口停止写入日志文件
- 通过 c++ 运行命令时隐藏控制台窗口
- 当gui程序向cli程序发送命令时,隐藏控制台窗口
- C++ 如何在启动时隐藏控制台窗口
- QProcess::startDetached(),但隐藏控制台窗口
- 在远程进程中隐藏控制台窗口
- 如何在Mac OS中隐藏控制台窗口(gcc编译器)
- 从任务栏隐藏控制台c++程序
- 在程序运行时隐藏控制台的独立于平台的方法
- Qt GUI应用程序与控制台输出-隐藏控制台正常启动上的Windows