1

スクリーンショットを作成するコードがありますが、プログラムが生成するものは次のとおりです。

制御プログラムが画面の一部をブロックしているスクリーンショット http://imageshack.us/a/img27/7387/71240043.png

プログラムのコンソールがポップアップして邪魔になります。これは、ダブルクリックした瞬間にプログラムがスクリーンショットを撮るため、一瞬のポップアップです。

非表示にする方法について情報を検索したところ、次の推奨事項を含むフォーラムが見つかりました。

ターゲット オプションで、アプリケーションの種類を「コンソール」から「GUI アプリケーション」に変更します (プロジェクト プロパティ -> [ビルド ターゲット] タブ)。

しかし、それを GUI アプリケーションに設定しても、一瞬のコンソールはなくなりませんでした。

コンソールを非表示にするコードを探してみたところ、例が見つかりました:

HWND hWnd = GetConsoleWindow();
ShowWindow( hWnd, SW_HIDE );

ただし、コンソールを非表示にするコードを記述しても、コンソールがポップアップし、スクリーンショットが表示された瞬間にブロックされます。

その瞬間にコンソールが表示されないようにするにはどうすればよいですか? ショットを妨げない限り、コンソールが単純に最小化されていても問題ありません。

4

3 に答える 3

3

mainエントリポイントのフォームも変更する必要があるため、タイプを切り替えるだけでは十分ではないと思いますWinMain。ウィンドウレス アプリケーションを作成する方法のこの例を見てください ( http://social.msdn.microsoft.com/Forums/en/vcgeneral/thread/82f506c4-ac1f-48c1-a5dc-51bfe99cf850 )。新しいアプリケーションを作成することをお勧めします。 Win32 プロジェクトを作成し、所有しているコードをコピーします。

于 2012-10-30T16:24:55.643 に答える
1

ハッキーですが...ウィンドウを非表示にした後、それが画面上で有効になるのに十分な時間遅延することができます。ここでは、C ++ 11(#include <thread>this_threadおよび#include <chrono>ミリ秒)を使用しているため、この正確なコードを使用して遅延させるには、VS2012を使用する必要があります。

HWND console = GetConsoleWindow();
if (!console)
    ; // handle error
BOOL was_visible = ShowWindow(console, SW_HIDE);

// delay for a fraction of a second...
std::this_thread::sleep_for(std::chrono::milliseconds(100));

// ... take screen shot

if (was_visible)
    ShowWindow(console, SW_SHOW);
于 2012-10-30T18:11:06.263 に答える
1

ルドルフの提案を使用して、私は調査を行い、質問に具体的に答えることができます。

に変更int main()int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)ます。(訂正) これは、設定がグラフィカルな場合にのみ機能します。

int mainまた、のargc/argvオプションにアクセスできないという問題に対処するには、 にある外部変数である と を__argc使用します。__argvstdlib.h

http://support.microsoft.com/kb/126571も参照してください。

于 2012-10-30T17:17:44.720 に答える