VCでコンソールプログラムウィンドウの実装コードを隠す

3061 ワード

次に、win 32 consoleアプリケーションのconsoleウィンドウを非表示にする方法について説明します.この方法は、コンパイラのリンクスイッチを設定ことによって実現されるので、コンパイラのリンクスイッチオプション(つまりlinkerオプション)を見てみましょう.まず、linkerの/subsystemオプションを見てみましょう.このオプションの構文形式は次のとおりです.
/subsystem:{console|efi_application|efi_boot_service_driver|efi_rom|efi_runtime_driver|native|posix|windows|windowsce}[,major[.minor]]
このリンクオプションは、オペレーティングシステムが実行可能ファイルconsole:win 32文字モードアプリケーションを実行する方法を示します.このタイプのアプリケーションは、実行時にdosウィンドウのようなコンソールウィンドウを生成します.アプリケーションのメイン関数がmain()またはwmain()の場合、デフォルトではコンソールアプリケーションがコンソールアプリケーションです.
extensible firmware interface
cpuの具体的なアーキテクチャに関連するパラメータのオプションは、一般的ではありません.ここでは詳しく説明しません.
これに興味がある場合はintelのホームページにアクセスして関連コンテンツnativeを表示することができます.デバイスドライブオプション、/driver:wdmオプションが設定されている場合、このリンクオプション(native)はデフォルトオプションposix:windows nt種でposixサブシステム上で実行されるアプリケーションwindows:このタイプのアプリケーションはconsoleウィンドウを生成せず、このタイプのアプリケーションのウィンドウはユーザー自身が作成し、簡単に言えば標準的なwin 32アプリケーションであり、そのエントリアドレスはwinmain()関数またはwwinmain()関数のアドレスです.アプリケーション種で定義したメイン関数がwinmainまたはwwinmainの場合、デフォルトではアプリケーションは1つです.
win32 application !windowsce:
Windows ceで実行されるアプリケーション
major and minor (optional):
メインバージョン番号とセカンダリバージョン番号、このオプションはオプションで、0~65535の間の10進数整数は、win 32 consoleアプリケーションを構築する場合、linkerの/subsystemオプションはconsoleであり、vc開発環境のproject->setting->link->project optionで見ることができます.次に、アプリケーションがどのように実行されているかを見てみましょう.vcで作成されたプログラムは、実行時にcc実行ライブラリのサポートが必要であることを知っています.c/cプログラムを実行すると、リンクはまずアプリケーションの起動関数を探します.たとえば、consoleプログラムを構築すると、コンパイラのリンクスイッチは次のような形式になります./subssystem:console/entry:maincrtstarttup(ansi)/subsystem:console/entry:wmaincrtstarttuup(unicode)win 32アプリケーションを構築すると、コンパイラのリンクスイッチは、/subsystem:windows/entry:winmain(ansi)/sbusystem:windows/entry:wwinmain(uincode)の上の2つの形式で、上記のsubsystemとentryをプロジェクト->setting->link->project optionですべて設定する必要はありません./subsystem:consoleのみを設定すると、デフォルトのentryスイッチはデフォルトで/entry:maincrtstarttupと逆になります.アプリケーションでmain関数を定義した場合、デフォルトでは/subsystem:consoleは/substemと/entryスイッチが一致します.つまり、consoleはmaincrtstarttupまたはwmaincrtstarttupwindowsはwinmainまたはwwinmainに対応しますが、手動で変更することで一致しません.例えば、私たちはこのように変更することができます.
 
  
#pragma comment( linker, /subsystem:windows /entry:maincrtstartup ) //
int main(int argc, char* argv[])
{
messagebox(null, hello, notice, mb_ok);
return 0;
}

デフォルトではリンクが/subsystemの下でwindowsオプションであることを見ると、自動的にwinmainまたはwwinmainを探しますが、エントリアドレスを強制的に指定します.これにより、プログラムを実行するときにデフォルトのconsoleウィンドウが非表示になります.上はコードに#pragmaコマンドを使用して設定したもので、もう1つは開発環境に直接
Project->setting->link->project optionで手作業で変更!
こんなにたくさん书いて、自分ですべて少し乱れていると感じて、仕方がなくて、以前どんな文章を书いたことがなくて、だから言叶遣いがあまり良くないかもしれなくて、みんなに许してもらいたいです.
1:consoleプログラムができたら、変更できなくてもいいです.APIプログラムを書いて、ウィンドウを描かないで、それからCreateProcessで書いたconsoleプログラムを呼び出して、属性をSW_に設定しますHIDEでいいです.2:コンソールで書くことはできません.WINMAINを入り口にすればいいです.窓を描かないと、他の人には見えません.あなたのプロセスをタスクバーに隠す方法を考えてください.3:consoleプログラムであれば、API関数GetStdHandle()でコンソールプログラムのウィンドウハンドルを取得し、隠しウィンドウ4://この隠しコンソール#pragma comment(linker、「/subsystem:」windows/「/entry:」mainCRTStartup」)コンソールプログラムを書くには、これを使ってコンソールプログラムにコンソールウィンドウを隠します.