24

起動時にコンソール ウィンドウを非表示にする方法を知りたいです。

これはキーロガー プログラム用です、誰かをハッキングするつもりはありません。これは、ハッカーの危険性を示すために作りたい小さな学校のプロジェクトです。

これまでの私のコードは次のとおりです。

#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"))

したがって、最初のコンソールを作成して非表示にするだけでなく、新しいコンソールを開く理由を知りたいです。

ありがとう。:)

4

10 に答える 10

34

オンデマンドでコンソール ウィンドウを文字通り非表示/表示するには、次の関数を使用できます。 ShowWindowを使用して、コンソールを非表示/表示することができます。GetConsoleWindowは、コンソールが使用するウィンドウ ハンドルを取得します。 IsWindowVisibleを使用して、ウィンドウ (この場合はコンソール) が表示されているかどうかを確認できます。

#include <Windows.h>

void HideConsole()
{
    ::ShowWindow(::GetConsoleWindow(), SW_HIDE);
}

void ShowConsole()
{
    ::ShowWindow(::GetConsoleWindow(), SW_SHOW);
}

bool IsConsoleVisible()
{
    return ::IsWindowVisible(::GetConsoleWindow()) != FALSE;
}
于 2016-11-04T19:54:52.057 に答える
10
#include <windows.h>
ShowWindow(GetConsoleWindow(), SW_HIDE); //SW_RESTORE to bring back

ShowWindow()これは、それを非表示にするウィンドウ ハンドル (HWND) を返します。このソリューションは、Windows システム専用です。

これは、マークされていなくても、質問に対する正しい答えです。

編集: 考えられる解決策/ハックは、(Visual Studio で) Linker->System->SubSystem を「コンソール (/SUBSYSTEM:CONSOLE)」ではなく「Windows (/SUBSYSTEM:WINDOWS)」に設定することです。ただし、これはおそらく最適ではありません。

于 2016-11-01T13:27:08.073 に答える
6
#include <windows.h>
#include <iostream.h>

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

int main()
{
  cout<<"this sentence is visible\n";
  Stealth(); //to hide console window
  cout<<"this sentence is not visible\n";
  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;
}
于 2015-02-16T16:28:36.270 に答える
4

簡単です。 FreeConsole() api がその魔法を実行します

BOOL WINAPI FreeConsole(VOID);
于 2015-11-22T17:59:53.073 に答える
4

エントリ ポイントが であるため、コンソール プログラムを作成していmain()ます。グラフィカル ベースの Windows アプリケーションの場合、エントリ ポイントはWinMain http://msdn.microsoft.com/en-us/library/windows/desktop/ms633559(v=vs.85).aspxである必要があります。

于 2013-08-15T20:26:16.547 に答える
3

アプリケーションのタイプを「コンソール アプリケーション」から「Windows アプリケーション」に変更するだけです (そして、を に変更mainしますWinMain)。この場合、アプリケーションはコンソール ウィンドウなしで起動されます。

于 2013-08-15T20:48:35.230 に答える
0

8年後(笑)

しかし

プロジェクトの簡単な解決策は、単に .vbs を使用することです

Dim WShell
Set WShell = CreateObject("WScript.Shell")
WShell.Run "xr.exe", 0
Set WShell = Nothing

実行すると xr.exe が非表示で起動されますが、Windows Defender はウイルスと見なします

于 2021-08-24T03:12:46.587 に答える