【WPF】取色器-Color Extractor

news/2024/9/25 15:23:34/

【WPF】取色器

  • 实现
    • Hook
    • Screen Color
    • layout
    • .CS
  • 预览
  • 下载

取色器是一个非常实用的小工具,网上也很多可供下载使用。为什么已有却还是想要自己去实现一个呢?一方面是因为工具虽小但毕竟涉及到操作系统 API 的使用。另一方面想要在技术上精进一些。

实现

实现思路测试通过 Hook 鼠标左键单击,获取到鼠标位于屏幕坐标位置,再获取当前位置所渲染的颜色。

Hook

订阅鼠标左键点击事件,将鼠标坐标获取到当前程序。

using System.Runtime.InteropServices;
using System.Windows;namespace ColorExtractor
{public partial class GlobalMouseHook{private const int WH_MOUSE_LL = 14;private const int WM_LBUTTONDOWN = 0x0201;private const int WM_LBUTTONUP = 0x0202;public event EventHandler<Point> MouseReleased;private LowLevelMouseProc _proc;private IntPtr _hookID = IntPtr.Zero;public GlobalMouseHook(){_proc = HookCallback;}public void SetHook(){_hookID = SetWindowsHookEx(WH_MOUSE_LL, _proc, IntPtr.Zero, 0);}public void ReleaseHook(){UnhookWindowsHookEx(_hookID);}private IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam){if (nCode >= 0){if (wParam == (IntPtr)WM_LBUTTONUP){MSLLHOOKSTRUCT hookStruct = Marshal.PtrToStructure<MSLLHOOKSTRUCT>(lParam);MouseReleased?.Invoke(this, new Point(hookStruct.pt.x, hookStruct.pt.y));}}return CallNextHookEx(_hookID, nCode, wParam, lParam);}private delegate IntPtr LowLevelMouseProc(int nCode, IntPtr wParam, IntPtr lParam);[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]private static extern IntPtr SetWindowsHookEx(int idHook, LowLevelMouseProc lpfn, IntPtr hMod, uint dwThreadId);[DllImport("user32.dll", CharSet = CharSet

http://www.ppmy.cn/news/1427343.html

相关文章

TypeScript中的模块是什么?

TypeScript中的模块是什么&#xff1f; 1. 模块的基本概念1.1 使用模块 2. 默认导出 vs 命名导出2.1 默认导出2.2 命名导出 3. 模块的作用域4. 模块的声明与引用 在现代软件开发中&#xff0c;模块化是构建大型、可维护应用程序的关键概念。TypeScript&#xff0c;作为JavaScri…

Matlab|【复现】主动配电网故障定位方法研究

目录 1 主要内容 算例模型 期望故障电流状态函数 评价函数&#xff08;膨胀率函数&#xff09; 算例验证方法 详实的文档说明 2 部分程序 3 程序结果 4 下载链接 1 主要内容 该程序方法复现了《基于改进多元宇宙算法的主动配电网故障定位方法研究》_郑聪&#xff0c;建…

【GitBlit】Windows搭建Git服务器详细教程

前言 如果公司或个人想在 Windows 环境下搭建私有的 Git 服务器&#xff0c;那么这个开源的 GitBlit 是一个不错的选择。 Gitblit 是一个开源纯 Java 的用于管理、查看和服务 Git 存储库。它是一个小型的托管集中式存储库工具。支持 SSH、HTTP 和 GIT 协议&#xff0c;开箱即…

【Redis】Hash数据类型

文章目录 常用命令hset & hgethexists & hdelhkeys & hvals & hgetallhlen & hmgethsetnxhincrby & hincrbyfloat 内部编码 Hash 相比于 string 而言可以节省很多个 key &#xff0c;一个 key 里面又可以包含了多个 key-value 常用命令 hset & hg…

设计模式:状态模式示例

状态模式可以应用于多种场景&#xff0c;下面是一些示例及其代码实现&#xff1a; 1. 交通信号灯 交通信号灯&#xff08;红灯、绿灯、黄灯&#xff09;根据当前状态切换到下一个状态。 // 状态接口 interface TrafficLightState {void change(TrafficLight trafficLight); …

20240417,友元 FRIEND

本来要学习的吃瓜吃了一下午 目录 3.1 全局函数做友元 3.2 友元类 3.3 成员函数做友元 三&#xff0c;友元 3.1 全局函数做友元 #include<iostream> using namespace std; class Building {friend void goodGay(Building* building);//好朋友&#xff0c;可以访问…

将本地项目推送至gitlab仓库

1. gitlab上新建一个空白项目 gitlab上点击new project按钮&#xff0c;新建一个项目 新建空白项目 项目名称与本地新建项目名称相同&#xff0c;其余根据具体需要选择 2. 初始化本地仓库并commit项目 进入本地项目根目录下&#xff0c;右击 git bash here打开命令窗口 初始化…

C语言第六章之内存分布,内存管理

内存分布 C代码编译过程 预处理 宏定义展开、头文件展开、条件编译&#xff0c;这里并不会检查语法 编译 检查语法&#xff0c;将预处理后文件编译生成汇编文件 汇编 将汇编文件生成目标文件(二进制文件) 链接 将目标文件链接为可执行程序 进程的内存分布 程序运行起来(…