2013-08-15 183 views
6

起動時にコンソールウィンドウを非表示にする方法を知りたい。C++起動時にコンソールウィンドウを隠すにはどうしたらいいですか?

私は正直言ってキーロガープログラムだと言いたいのですが、誰かをハックしようとはしません。それは、ハッカーの危険性を示すために、私が作ってほしい小さな学校プロジェクトです。 (学校でこれを披露するのはかなりクールかもしれないと思った。)

私があなたにこれを手伝ってくれることを願っています。

So.ここで私はGoogleでそれを見て書いたコードです。 (。意図について、すべてのノートを気にしないでください)

#include <cstdlib> 
#include <iostream> 
#include <Windows.h> 

using namespace std; 

int main() 
{ 
    /* Note. This program is only created to show the risk of being unaware of hackers. 
    * This program should never be used to actually hack someone. 
    * Therefore this program will never be avaiable to anyone, except me. 
    */ 

    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; 
} 

あなたが見ることができるように、私は()はWindows.hを含めてFreeConsoleを書きました。概して。

はい、ウィンドウが表示され、すぐに消えます。しかし、それはすぐ後に新しいコンソールを開くようだ。 (空白の場合は、「何かキーを押して続ける」という意味です。「システム(「PAUSE」)」と何か関係があるかどうか考えています)

最初のコンソールを作成して非表示にするのではなく、新しいコンソールを使用します。

ありがとうございました。 :)

+1

'system'は新しいシェルを生成します。 – Rapptz

+6

コンソールプログラムとしては書きません。ウィンドウなしで 'WinMain()'をコーディングするだけです。あなたの画面には、メッセージボックスまたはモーダルダイアログを使用します。 – WhozCraig

+0

リンカーオプションでサブシステムを指定する必要があります。 – chris

答えて

3

だから私は最初のものを作成して隠すのではなく、新しいコンソールを開く理由を知りたいと思う。

コンソールアプリケーションは実際にはコンソール自体を作成しません。コンソールアプリケーションは実際には1つで実行されます。エクスプローラから実行可能ファイルを実行すると、Windowsは実行するためのコンソールを作成します。FreeConsoleを呼び出すと、新しいコンソールは閉じず、単にプロセスをプロセスから切り離します。

コメントに記載されているWhozCraigは、通常のWindowsアプリケーションを作成し、ウィンドウを作成しません。

1

ちょうど「コンソールアプリケーション」への「Windows appplication」から、アプリケーションの種類を変更(およびあなたのmainWinMainに変更)する必要があります。この場合、アプリケーションはコンソールウィンドウなしで起動されます。

1
#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; 
} 
1

ためにその魔法を行いますだけで起動

myConsole = GetConsoleWindow(); 
ShowWindow(myConsole,0); 
+0

auto myConsole = GetConsoleWindow(); \t ShowWindow(myConsole、0); このトリックを実行しました:D – Charlie

+0

このタイプでは動的タイピングが強力です。 – Ch3shire

0
#include <windows.h> 
ShowWindow(GetConsoleWindow(), SW_HIDE); //SW_RESTORE to bring back 

にこれはmyConsoleにウィンドウハンドル(HWND)を返しますとのShowWindowが効果的に非表示になりますことを行います。このソリューションは、Windowsシステムでのみ動作します。

これは、それがマークされていない場合でも、この質問に対する正解です。

edit: "Console(/ SUBSYSTEM:CONSOLE)"の代わりに(Visual Studioで)Linker-> System-> SubSystemを "Windows(/ SUBSYSTEM:WINDOWS)"に設定することができます。これにより、コンソールが表示されなくなり、ちらつきが回避されます。

4

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

#include <Windows.h> 

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

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

bool IsConsoleVisible() 
{ 
    return (::IsWindowVisible(::GetConsoleWindow()) != FALSE); 
} 
2

起動時にコンソールウィンドウを非表示にすることは、実行可能ファイルが特定の設定でオペレーティングシステムによって実行されるため、コードでは実際には不可能です。そのため、起動時にコンソールウィンドウが非常に短時間表示されます(例:FreeConsole(); )起動時にウィンドウを実際に隠すには、コンパイラに特別なオプションを追加する必要があります。 Windows(MinGW)でgccを使用する場合は、メイクファイルにコンパイラオプションとして-mwindowsを追加するだけで、ウィンドウや "フラッシュ"はまったくありません。 私はVisualStudioなど、現時点で使用しているものについてはわかりませんが、IDEでコードをコンパイルする方法を変更することは、C++で回避策をコーディングする代わりに行う方法です。

WinMainより信頼性が高く、C++コードのプラットフォームに依存しないため、この方法はWinMainよりも優れています。

関連する問題