kimarioと申します。
実行中の、あるアプリケーションの任意座標位置のRGB値を取得し、その結果を
メッセージボックスにて表示させたいと考えております。
しかし下記のプログラムを実行すると、どの座標位置でもすべて(-1)で返ってき
てしまいます。
getDCの戻り値が(0)ではないことを確認しているので、デバイスコンテキストの
ハンドルは取得できているものと思われます。
API初心者です。よろしくお願いいたします。
補足)
アプリケーションのウィンドウタイトルが「XXYYZZ」
色を特定したい座標を(60, 60)としています。
############################################################################
public partial class Form1 : Form
{
[DllImport("user32.dll")]
static extern IntPtr GetDC(IntPtr hWnd);
[DllImport( "user32.dll" )]
static extern int ReleaseDC( IntPtr hWnd, IntPtr hDC );
[DllImport( "gdi32.dll" )]
static extern int GetPixel( IntPtr hDC, int x, int y );
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
foreach (Process p in Process.GetProcesses())
{
if (p.MainWindowHandle != IntPtr.Zero)
{
if (p.MainWindowTitle == "XXYYZZ")
{
IntPtr dc = GetDC(p.MainWindowHandle);
MessageBox.Show(GetPixel(dc, 60, 60).ToString());
}
}
}
}
}
No.2ベストアンサー
- 回答日時:
すいません、
どうやら私の方が先入観で書いてしまっていたようです。
MSDN によると――
>現在のクリッピング領域の外側の座標が指定されたときは、
CLR_INVALID が返ります。
CLR_INVALID は wingdi.h をみるに 0xFFFFFFFF = -1 なので、
おそらく上記のエラーが報告されているのだと思われます。
描画範囲の外側を指定していないかどうか、
誤ったクリッピング領域の設定を行っていないかどうか、
などをチェックしてみてはいかがでしょうか。
……ドキュメントくらい確認しておくべきでした。
norachlo様
本日無事結果を得ることができました。
getDCでは相変わらず(-1)の結果しか返って来ませんでしたが
getWindowDCで試したところ無事期待値が返ってきました。
先日、getWindowDCを用いてテストしたが駄目だったと報告しましたが、
おそらく座標上に何らかのウィンドウが重なっていたためと思われます。
検証方法が雑だったためであり反省しております。
>描画範囲の外側を指定していないかどうか
が解決のヒントとなりました。
ありがとうございました。
No.1
- 回答日時:
こんばんは。
(60, 60)の座標は何色でしょうか。もし白なら
(r,g,b,a) = (FF,FF,FF,FF) = 0xffffffff = -1
で正常なのだと思います(バイトの並び順は BGRA だったかもしれませんが……)。
この回答への補足
norachlo様 こんにちは
なるほど、固定観念からか(-1)は異常値であると思い込んでいました。
お恥ずかしい限りです。
(60, 60)の色は白ではありません、また別座標(当然白以外)を指定し
ても常に(-1)が返ってくるのです。
その後もgetDCをgetWindowDCでやってみたりと試行錯誤してみまし
たが未だ結果が得られていません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# Windows Formアプリからコンソールを呼び出して文字を出力させたい 8 2023/05/09 10:53
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- Java java 引数 戻り値のあるメソッド 3 2023/02/12 06:23
- Java Java 配列<選挙> 4 2023/07/31 15:07
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel VBAで他アプリケーション...
-
外付ディスプレイで AutoHotkey...
-
VBA HTML要素または文字の座標...
-
UWSファイルの編集?
-
JPGの画像ファイルの結合
-
C#で、画像の、指定した座標の...
-
エクセルVBAで画像を貼り付ける...
-
バナーにリンクを埋め込む方法
-
LineTo,MoveToについて
-
マウスイベントが動かない
-
マウス自動クリックソフトについて
-
VBでクリックイベントを発生さ...
-
AUTO CAD2007で長方形(四角)を...
-
UWSCでPEEKCOLORを使い指定ウィ...
-
OpenGLを使ったプログラムについて
-
VB、VBSでのキーマクロ
-
クリックした点を中止に拡大・縮小
-
「ご処理進めて頂きますようお...
-
エクセルで、日付を入力すると...
-
CloseとDisposeの違い
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBAで画像を貼り付ける...
-
Excel VBAで他アプリケーション...
-
C#で、画像の、指定した座標の...
-
VBでクリックイベントを発生さ...
-
バナーにリンクを埋め込む方法
-
UWSC画像認識で座標の位置がず...
-
マウスイベントが動かない
-
uwscについて、同一の画像(仮...
-
外付ディスプレイで AutoHotkey...
-
VBAで ScreenToClient を使いたい
-
UWSCで特定の文字をクリックす...
-
VBA HTML要素または文字の座標...
-
マウスストーカーのようにカー...
-
UWSファイルの編集?
-
NoxPlayerとUWSCのadbの座標に...
-
C言語でグラフ作成??
-
特定座標のRGB値取得について
-
UWSCのCHKIMG関数について
-
Visual Studio .NET 2003:右揃...
-
JPGの画像ファイルの結合
おすすめ情報