ここから本文です
ベランダ菜園とWindows用アプリ作成とExcel用アプリ(アドイン)作成

書庫全体表示


イメージ 1
画面上のどこでもマウスカーソル下の色を取得
クリックでもその色を取得

自身のウィンドウ内のカーソルの位置や色の取得ならWPFにも用意されているんだけど、自身のウィンドウ外、画面上のどこでもって場合にはWPFだけではできないようで、Windows APIやWindows.Formsの関数を使ってできた

できたっていっても9割方解説サイトのコピペになった


デザイン画面
イメージ 2
色の確認とマウスカーソル位置の表示用に
StackPanelの中にTextBlockを3つ用意



using System;
using System.Windows;
using System.Windows.Media;

using System.Windows.Threading;//タイマー用

//System.DrawingとSystem.Windows.Formsを参照に追加する必要がある

//System.Drawingは画面全体をキャプチャするために
//System.Windows.Formsはマウスカーソルの画面上での座標の取得のため
//一定時間ごとにマウスカーソル位置を取得、その座標の1ピクセルをキャプチャして、その色を取得


namespace _20190302_アプリの外でもカーソル下の色取得
{
/// <summary>
/// MainWindow.xaml の相互作用ロジック
/// </summary>
public partial class MainWindow : Window
{
//クリックされているか判定用
[System.Runtime.InteropServices.DllImport("user32.dll")] private static extern short GetKeyState(int nVirtkey);

public MainWindow()
{
InitializeComponent();

//タイトルバーにアプリの名前(アセンブリ名)表示
var info = System.Diagnostics.FileVersionInfo.GetVersionInfo(System.Reflection.Assembly.GetExecutingAssembly().Location);
Title = info.ProductName;

//タイマーの設定、一定時間ごとにマウスカーソルの状態を見る
var timer = new DispatcherTimer(DispatcherPriority.Normal);
//timer.Interval = new TimeSpan(100000);//ナノ秒
timer.Interval = new TimeSpan(0, 0, 0, 0, 10);//10ミリ秒毎(0.01秒毎)
timer.Start();
timer.Tick += Timer_Tick;
}


//タイマーのTickイベント時
private void Timer_Tick(object sender, EventArgs e)
{
System.Drawing.Point p = System.Windows.Forms.Cursor.Position;//マウスカーソル位置取得
Color c = GetPixelColor(p.X, p.Y);//マウスカーソル位置の色取得
var b = new SolidColorBrush(c);
MyTextBlockColor.Background = b;
MyTextBlockColor.Text = c.ToString();
MyTextBlockCursorLocation.Text = $"マウスの位置 = {System.Windows.Forms.Cursor.Position}";

if (IsClickDown())
{
MyTextBlockGetColor.Background = b;
}
}

//クリック判定
private bool IsClickDown()
{
//マウス左ボタン(0x01)の状態、押されていたらマイナス値(-127)、なかったら0
return GetKeyState(0x01) < 0;
}

//画面上の指定座標の1ピクセルの色を返す
private Color GetPixelColor(int x, int y)
{
//1x1サイズのBitmap作成
using (System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(
1, 1, System.Drawing.Imaging.PixelFormat.Format32bppArgb))
{
using (var bmpGraphics = System.Drawing.Graphics.FromImage(bitmap))
{
//画面全体をキャプチャして指定座標の1ピクセルだけBitmapにコピー
bmpGraphics.CopyFromScreen(x, y, 0, 0, new System.Drawing.Size(1, 1));
//ピクセルの色取得
System.Drawing.Color color = bitmap.GetPixel(0, 0);
//WPF用にSystem.Windows.Media.Colorに変換して返す
return Color.FromArgb(color.A, color.R, color.G, color.B);
}
}
}

}
}



イメージ 3

参照に追加する
イメージ 4
参照に
System.Windows.FormsとSystem.Drawingを追加するのは

System.Drawing.GraphicsクラスのCopyFromScreenで画面全体から指定座標の1ピクセルをキャプチャして、1ピクセルのSystem.Drawing.Bitmapを作成してBitmapのGetPixelで色を取得

指定座標のマウスカーソル位置取得で
System.Windows.Forms.Cursor.Position

この2つのためで、WPFでもアプリ上でのキャプチャやカーソル位置取得はあるんだけどねえ、アプリの外になるとないみたいで探したけど見つからなかった

マウスの左ボタンが押されたかどうかの判定もWindows APIを利用している

なんだかWPF以外の機能ばかりになってしまった

ギットハブ


参照したところ
C# - 【C#】画面上のクリックされた地点のRGB値を取得したい|teratail
https://teratail.com/questions/25722

画面のキャプチャ

タイマにより一定時間間隔で処理を行うには?(WPFタイマ編):.NET TIPS - @IT
https://www.atmarkit.co.jp/ait/articles/1812/12/news014.html

WPFでスクリーンショットの取得 - SourceChord
http://sourcechord.hatenablog.com/entry/20131013/1381691785




関連記事
2016/3/3
WPFとVB.NETで表示した画像をクリックした場所の色を取得はややこしい ( ソフトウェア ) - 午後わてんのブログ - Yahoo!ブログ
https://blogs.yahoo.co.jp/gogowaten/13952774.html
ちょうど3年前かあ

2016/3/4
WPFとVB.NETで表示した画像をクリックした場所の色を取得はややこしい(後編) ( ソフトウェア ) - 午後わてんのブログ - Yahoo!ブログ
https://blogs.yahoo.co.jp/gogowaten/13955791.html




  • 顔アイコン

    アプリケーション制作の勉強になります。

    なんか、Yahoo!知恵ノートに続いて、Yahoo!ブログが終焉みたいで、今までの遺産をどうしようか途方にくれています・・・

    [ PSP ]

    2019/3/4(月) 午後 11:12

  • 顔アイコン

    > PSPさん
    Yahoo!ブログ終了でたくさんの記事、情報が失われますよねえ、とても残念です
    どこかに移転して画像のリンクは大丈夫だとしても、記事に貼り付けたblogs.yahoo.co.jpのリンクの変更は手作業になるはず、と思っているけどどうなるんでしょうねえ、そういうのが楽なとこがあればいいなあ

    [ わてん@午後 ]

    2019/3/5(火) 午前 11:12

  • 顔アイコン

    知恵ノートで掲載していた、RGB←→HSV・HSL変換式の記事を、Yahoo!ブログへ移転して安心していたら、今度はYahoo!ブログ閉鎖とはひどすぎです・・・。

    FC2ブログだと、引越しツールで簡単に移転できました。
    移転先→ https://colormodel.blog.fc2.com/

    https://colormodel.blog.fc2.com/blog-entry-569.html
    記事はちゃんと引っ越されているけど、分類(書庫)がメチャクチャになっていて、再整理する気が起きません。
    プロフィールとか各種設定は、改めて設定しないとダメみたいです。

    [ PSP ]

    2019/3/6(水) 午前 0:15

  • 顔アイコン

    > PSPさん
    もう移転されたんですね、速い
    のんびり屋(めんどくさいことは後回し)の僕は秋ぐらいにしようかなあと思っています。

    分類(書庫)が引き継がれないのは辛いですねえ
    今見てきたんですけど、横幅が広いからプログラムのコードは見やすいのはいいですね。
    さらに1記事での文字数制限も画像数制限もないとあって、かなり魅力を感じました。

    [ わてん@午後 ]

    2019/3/6(水) 午後 0:41

  • 顔アイコン

    分類(書庫)は順番がメチャクチャになってましたが、FC2の管理機能で並び替える事ができました。

    問題は、ブログ内の別記事をリンクしている部分が、自動ではリンク先変更されないことですね・・・
    (FC2内の記事ではなく、Yahoo!内の記事をリンクしたままです)

    引越しツール自体は、Yahoo!ブログからの引越しがサポートされているので簡単でした。

    FC2は編集機能はYahoo!よりも上ですが、Yahoo!ライクな外観にしようとするとかなり設定が大変なようなので、諦めました・・・

    [ PSP ]

    2019/3/10(日) 午後 11:27

  • 顔アイコン

    > PSPさん
    分類(書庫)は並び替えの機能でなんとかなったんですねえ
    ブログ内の別記事へのリンクは完全に手動での変更になってしまうと、これはFC2に限らずどこのブログでも同じかなあ
    直すときは元のYahoo!ブログの記事に飛んで日付を確認して、FC2でその日付の記事に飛んでアドレスをコピペする感じでしょうか、想像するだけで疲れました_(:3」∠)_

    [ わてん@午後 ]

    2019/3/11(月) 午前 9:59

わてん@午後
わてん@午後
男性 / 非公開
人気度
Yahoo!ブログヘルプ - ブログ人気度について

スマートフォンで見る

モバイル版Yahoo!ブログにアクセス!

スマートフォン版Yahoo!ブログにアクセス!

1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

最新のコメント最新のコメント

すべて表示

Yahoo!からのお知らせ

検索 検索

よしもとブログランキング

もっと見る
本文はここまでですこのページの先頭へ

[PR]お得情報

ふるさと納税サイト『さとふる』
実質2000円で特産品がお手元に
11/30までキャンペーン実施中!
数量限定!イオンおまとめ企画
「無料お試しクーポン」か
「値引きクーポン」が必ず当たる!
お肉、魚介、お米、おせちまで
おすすめ特産品がランキングで選べる
ふるさと納税サイト『さとふる』

その他のキャンペーン

みんなの更新記事