
【コンテキスト】に関する知恵袋
【質問】
非ログイン状態で画面をキャプチャする方法はありますか?C++Builder6で開発しているのですが、ログインしていない状態(例えばWindowsVPSやお名前.comのWindowsデスクトップ等)で画面のキャプチャができないか模索しています。リモートで接続している状態では下記のいずれの方法でも問題ないのですが、切断している状態の時は失敗します。ホストのOSはXP、WindowsServer2008ともに同じ現象です。キャプチャのトリガはホスト側でメールを監視し、メールを受信したらキャプチャする様にしています。方法1は「無効なクリップボードフォーマットです。」とOSから怒られ、2~4は真っ白で何も描画されません。コンテキストの知恵袋が教えてくることは、ログインしていないと言うことはWindowの描画も行われないから無理だと言うことなんでしょうか?よろしくお願いします。無料のブログのススメをいうと、無料のブログのススメです。また、※Image1はTImageコンポーネントです。■方法1(クリップボードを使う)keybd_event(VK_SNAPSHOT, 0, 0, 0); // フルスクリーン //クリップボードにコピーされるのを待つSleep(500);Application->ProcessMessages();//Clipboardの画像をImage1へImage1->Picture->Assign(Clipboard());■方法2(Canvas->CopyRectを使う)HDC dc = GetWindowDC(0);//HDC を取得Graphics::TCanvas *canvas = new Graphics::TCanvas;//Cavas 作成canvas->Handle = dc;//Canvas に取得した HDC を代入TRect rect = Rect(0, 0, Screen->Width, Screen->Height);Image1->Canvas->CopyRect(rect, canvas, rect);//Cavas を破棄 delete canvas;//デバイスコンテキストを開放するReleaseDC(0, dc);■方法3(BitBltを使う)//HDCを取得HDC dc = ::GetWindowDC(0);// 画面のイメージをメモリにコピーBitBlt(Image1->Canvas->Handle, 0, 0, Screen->Width, Screen->Height, dc, 0, 0, SRCCOPY);// HDCを開放ReleaseDC(hWnd,dc);■方法4(PrintWindowを使う)// 関数の型を宣言します。typedef BOOL (WINAPI *PPRINTWINDOW)(HWND, HDC, UINT);PPRINTWINDOW pPrintWindow;// user32.dllをロードします。コンテキストの知恵袋について説明すると、HMODULE hDLL = ::LoadLibrary("user32");// 関数の実体を読み込みます。pPrintWindow = (PPRINTWINDOW)::GetProcAddress(hDLL,"PrintWindow");// 読み込みに成功したら、関数を実行します。if(pPrintWindow) pPrintWindow(0, Image1->Canvas->Handle, 0);::FreeLibrary(hDLL);
【解答】
画面キャプチャの機構では、できないと思います。。