Xpでようこそ画面中のカメラキャプチャー

[戻る]
O−33Q 2006/06/06(火) 15:48:23
初めまして。O−33Qと申します。

Xp(SP2)で自宅サーバーを設けてカメラで定期的にキャプチャーしているのですが、
管理者ユーザーでログオンしている最中はキャプチャー出来るのですが、
「ようこそ画面」になっているときにキャプチャー画像がでません。
(裏ではキャプチャープログラムは稼働しています。)
定時刻にキャプチャー画像をファイリングしたり、ネットで外部から閲覧したりしてい
ます。
以前Win2000をサーバーにしていた時は問題なかったのですが。

キャプチャープログラムはVC6での自作で、主なところは下記の通りです。
--------------------------------------------------------------
HWND hWndCap = capCreateCaptureWindow(・・・);
  ↓
HDC hDCCap = ::GetDC(hWndCap);
HDC hDCMem = ::CreateCompatibleDC(hDCCap);
  ↓
int nPalCount = ::GetDeviceCaps(hDCCap, SIZEPALETTE);
  ↓
BITMAPFILEHEADER bmpFileHeader;
BITMAPINFO* pBmpInfo = (BITMAPINFO*)::GlobalAlloc(GMEM_FIXED, sizeof
(BITMAPINFOHEADER) + sizeof(RGBQUAD) * nPalCount);
//各変数はきちんと定義している
  ↓
HBITMAP hBMP = ::CreateDIBitmap(hDCCap, &pBmpInfo->bmiHeader, CBM_INIT, NULL, 
pBmpInfo, DIB_RGB_COLORS);
HBITMAP hBMPOld = (HBITMAP)::SelectObject(hDCMem, hBMP);
HPALETTE hPal = ::CreatePalette(pPal);
HPALETTE hPalOld = (HPALETTE)::SelectPalette(hDCMem, hPal, FALSE);
::RealizePalette(hDCMem);

//cx, cyはクライアントサイズ
::BitBlt(hDCMem, 0, 0, cx, cy, hDCCap, 0, 0, SRCCOPY);
::SelectObject(hDCMem, hBMPOld);

::GetDIBits(
    hDCMem,
    hBMP,
    0,
    cy,
    pBits,
    pBmpInfo,
    DIB_RGB_COLORS
    );
    
//以下解放処理
//ファイルにセーブする
--------------------------------------------------------------
「ようこそ画面」の時は、セーブした画像が真っ黒になります。
何か対策、または出来ない理由を教えて頂けると幸いです。
長々と済みません。

よすむら 2006/06/06(火) 18:03:39
参考にならなければごめんなさい。
サービスで実装というのはどうでしょうか(API使用可否は別として)。
http://idsoft.skr.jp/software/otorinasai.html

シャノン 2006/06/06(火) 19:29:51
> HWND hWndCap = capCreateCaptureWindow(・・・);

この関数が返すハンドルは何のウィンドウのハンドルですか?
また、ようこそ画面が出ているとき、この戻り値はどうなっていますか?

シャノン 2006/06/06(火) 19:38:48
失礼、vfw の関数でしたか。自作関数かと思ってた。
ようこそ画面時の戻り値がどうなっているか調べてみてください。

O−33Q 2006/06/07(水) 00:02:44
>よすむらさん
ありがとうございます。
自作のソフトにはソケットのルーチンも入れてありまして、ネットから呼ばれたCGI
(Perl製)との間で通信をしています。
(キャプチャーしたBMPデータをCGIでJPGに変換してWEBに返している)
この機能も個人的に重要なのでフリーソフトの使用は遠慮したいと思います。
ただ「ようこそ画面」のキャプチャーを行うことが出来る事実を知って、
不可能ではないことが分かりました。

>シャノンさん
ありがとうございます。
capCreateCaptureWindow の戻り値を利用して GetDC を行ってます。
この GetDC で作られたハンドルは「ようこそ画面」でも有効ですので、
capCreateCaptureWindow の戻り値も NULL ではないと思います。
GetDeviceCaps や GetClientRect も正常に動作しています。
(ファイルセーブされたBMPデータのヘッダーはきちんと値が入っている)
個人的には BitBlt が怪しいと睨んでいるのですが、ネットで探し切れていません。

よすむら 2006/06/07(水) 08:10:01
>この機能も個人的に重要なのでフリーソフトの使用は遠慮したいと思います。

私の言葉足らずでお伝えできなかったようですみません。
キャプチャPGそのものをWindowsのServiceとして実装したらいかがでしょうかと申し上
げたつもりでした。

O−33Q 2006/06/07(水) 23:21:00
> よすむらさん
いえいえ、こちらこそ読解力がなくて済みません。
力量不足で、「サービスで実行する」が分からなかったものですから。
教えて頂きありがとうございます。

ITO 2006/06/10(土) 20:25:35
>この機能も個人的に重要なのでフリーソフトの使用は遠慮したいと思います。
失際に使用しなくても仮に使ってみる価値はあると思いますが.......
実際に動いてるソフトを見ることによって自作のソフトの構想がまとまることもありま
す。

O−33Q 2006/06/13(火) 19:00:38
[[解決]]
> ITOさん
返事が遅くなりました。ありがとうございます。
私の求める内容は、表面上の動きを見て理解できるものとは思えません。
構想ではなくて、具体的な方法、または理由が知りたかったのです。
自作のプログラムを諦めて他のソフトで代用するのは、まだ諦めるに早い気持ちです。
とりあえず時間を掛けて答えを求めてみます。

このレスにお返事頂いた方、ありがとうございました。

古いスレッドには追加発言できません。