- 591 名前:デフォルトの名無しさん [2008/05/31(土) 17:29:19 ]
- 今、とあるゲームの画面の各部をキャプチャして画面を認識し、指定した部分をクリックしたり文字を送ったりするプログラムを作っています。
VisualC#のデバッグモードで動かしていると、画面上の指定部分をキャプチャする関数の中で使っている、Graphics.GetHdc()の部分で、 「ArgumentExceptionはハンドルされませんでした。 使用されたパラメータが有効ではありません」 のメッセージがでて止まってしまいます。10回に1回くらいの頻度かな。 ローカル画面で変数の値をチェックしても、キャプチャ範囲に異常な値は無く(bmpのサイズなど正常)、何でこうなるのか心当たりがありましたら指摘してもらないでしょうか。 #複数の呼び出し元から、この関数が同時に呼び出されているときにこんなことおこるのかな・・・? ちなみに、キャプチャやってる関数を下に貼り付けてみます。 ----------- public Bitmap CapturePartFromA(int[] capval) { //capval[] はキャプチャ範囲を収めた配列。ここでは[3]と[4]のみ利用 Bitmap bmp; //座標系を変換する関数の戻り値保存用 int[] xxx = new int[4] { 0, 0, 0, 0 }; IntPtr hWnd = FindWindow("A Game", null); RECT winRect2 = new RECT(); GetWindowRect(hWnd, ref winRect2); //座標を変換する関数(クライアントの原点←→デスクトップの原点) xxx = ConvertCoordinates(capval); bmp = new Bitmap(capval[3], capval[4]); Graphics g = Graphics.FromImage(bmp); IntPtr hDC = g.GetHdc(); //←ここで 例外頻発 IntPtr winDC = GetDC(hWnd); BitBlt(hDC, 0, 0, bmp.Width, bmp.Height, winDC, xxx[0], xxx[1], SRCCOPY); g.ReleaseHdc(hDC); g.Dispose(); ReleaseDC(hWnd, winDC); return bmp; }
|

|