C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

C# カーソル位置と画面位置がずれる

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■90604 / inTopicNo.1)  C# カーソル位置と画面位置がずれる
  
□投稿者/ ヤマト (1回)-(2019/03/24(Sun) 01:18:44)

分類:[C#] 

スクリーンの特定の位置の色を取得して、特定の色の場合にクリックする処理をしたいのですが、
同じX・Yを指定しても、画面の色取得の位置とカーソル位置がずれてしまいます。
ずれを解消することは可能でしょうか。

ざっくり以下流れで作っています。
@カーソルを移動
ACopyFromScreenで画面を画像として取得
B画像の0,0の位置の色を取得
CBの色が指定した色ならカーソル位置でクリックする

CopyFromScreenのTestX TestYが数値のとおりの位置になっていて、
カーソルの位置がずれているように思います。

コードは以下で作っています。
(色取得については省略してます)

using System.Drawing;
using System.Runtime.InteropServices;

namespace Test_画面色取得
{
    class Test
    {
        // マウス操作
        [DllImport("USER32.dll", CallingConvention = CallingConvention.StdCall)]
        private static extern void SetCursorPos(int X, int Y);

        public void myTest()
        {
            Bitmap TestBmp = new Bitmap(500, 300);
            Graphics TestGrph = Graphics.FromImage(TestBmp);

            int TestX = 100;
            int TestY = 100;

            //TestX、TestYは共通だが、以下のカーソル位置とスクリーンから取得する画像の位置が違う
            SetCursorPos(TestX, TestY);
            TestGrph.CopyFromScreen(new Point(TestX, TestY), new Point(0, 0), new Size(500, 300));


            //TestBmp.Save(@"C:\■TestBmpSave■\" + TestX + "_" + TestY + ".bmp");//Cドライブにbmp保存                       
        }
    }
}


引用返信 編集キー/
■90605 / inTopicNo.2)  Re[1]: C# カーソル位置と画面位置がずれる
□投稿者/ 魔界の仮面弁士 (2131回)-(2019/03/24(Sun) 16:47:46)
No90604 (ヤマト さん) に返信
> スクリーンの特定の位置の色を取得して、特定の色の場合にクリックする処理をしたいのですが、
> 同じX・Yを指定しても、画面の色取得の位置とカーソル位置がずれてしまいます。

『高 DPI』な環境で実行されていませんか?


> ずれを解消することは可能でしょうか。

実行 OS と .NET Framework バージョンの組み合わせてよって、必要な処置が異なります。


(1) 画面設定で、表示スケールを 100% (96dpi) にした状態で実行してみる。
 →根本解決にはならないが、これでズレが解消されるなら、高 DPI 設定が原因であると確定する。

(2) コンパイルした exe を右クリックし、プロパティの互換性タブで 高DPI設定を調整しておく。
 →互換設定は OS によっても異なるので注意。

(3) 上記設定は変えず、アプリケーションマニフェストで <dpiAware>true/PM</dpiAware> を指定する。
 環境によっては、アプリケーション設定での EnableWindowsFormsHighDpiAutoResizing の設定も必要。

https://qiita.com/felis_silv/items/efee4b1a397b0b95100a
https://docs.microsoft.com/ja-jp/dotnet/framework/winforms/high-dpi-support-in-windows-forms
引用返信 編集キー/
■90609 / inTopicNo.3)  Re[2]: C# カーソル位置と画面位置がずれる
□投稿者/ ヤマト (2回)-(2019/03/24(Sun) 19:03:03)
高DPIでの実行が影響していました。

結果として、マニュフェストの設定を行うことで、カーソル位置も画面取得位置と同じとなりました。
こちらのブログの設定を行いました。
https://www.tetsuyanbo.net/tetsuyanblog/45990

ありがとうございました!
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ