在好例子网,分享、交流、成长!
您当前所在位置:首页C# 开发实例C#语言基础 → 利用c#写的jpg拼图软件,可以随意剪切和拼接(钩子源码)

利用c#写的jpg拼图软件,可以随意剪切和拼接(钩子源码)

C#语言基础

下载此实例
  • 开发语言:C#
  • 实例大小:0.03M
  • 下载次数:112
  • 浏览次数:1137
  • 发布时间:2013-12-22
  • 实例类别:C#语言基础
  • 发 布 人:maben556
  • 文件格式:.rar
  • 所需积分:0
 相关标签: 钩子 拼图 C#

实例介绍

利用c#写的jpg拼图软件,可以随意剪切和拼接




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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
using System.Runtime.InteropServices;
 
namespace AutoDrawRect
{
    public class MouseHook
    {
        //好吧这个没有用到
        private bool isSet;
        public bool IsSet {
            get { return isSet; }
        }
        //这个也没有用到
        private int handleOfHook;
        public int HandleOfHook {
            get { return handleOfHook; }
        }
        //这个还是没有用到、、、淡定!
        private bool isStopMsg;
        public bool IsStopMsg {
            get { return isStopMsg; }
            set { isStopMsg = value; }
        }
        //自己定义了一个事件 放到Hook里面去
        public delegate void MEventhandler(object sender, MouseInfoEventArys e);
        public event MEventhandler HooKMouseEvent;
 
        [DllImport("user32.dll")]//设置钩子  第二个参数为回调函数指针
        public static extern int SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hmod, int dwThreadid);
        [DllImport("user32.dll")]//传递到下一个钩子
        public static extern int CallNextHookEx(int hHook, int nCode, IntPtr wParam, IntPtr lParam);
        [DllImport("user32.dll")]//卸载钩子
        public static extern bool UnhookWindowsHookEx(int hHook);
        [DllImport("kernel32.dll")]//获取模块句柄 
        public static extern IntPtr GetModuleHandle(string lpModuleName);
         
        public const int WH_MOUSE_LL = 14;//全局鼠标Hook 7是局部的 13全局键盘 2局部键盘
        public delegate int HookProc(int nCode, IntPtr wParam, IntPtr lParam);//话说c#里面委托就是函数指针?、
 
        private const int WM_LBUTTONDOWN = 0x201;   //在Hook里面判断是否左键点下
        private const int WM_RBUTTONUP = 0x205;     //在Hook里面判断是否右键抬起
 
        public struct POINT {//鼠标位置的结构体
            public int x;
            public int y;
        }
        public struct MouseLLInfo {//全局鼠标Hook的结构体
            public POINT pt;    //其实这里可以用Point只是这个新建的类里面没有应用System.Windows.Forms(应该是这个)
            public int mouseData;
            public int flags;
            public int time;
            public int dwExtraInfo;
        }
 
        GCHandle gc;//好吧 话说就是应为这个东西害得我研究了两天 没有这个的话 程序运行一会儿就提示崩溃了
        //因为垃圾回收期把我的回调函数当垃圾收了 所以运行程序的时候 一会儿就提示我 一个垃圾的回调导致程序崩溃
        //在非托管调用托管的时候 必须保持托管代码的或活动性 大概就这个意思 反正就是被收废品的收了、害的我用.net3.5用其他方式设置Hook
 
        public int MouseHookProcedure(int nCode, IntPtr wParam, IntPtr lParam) {//这个就是回调函数了
            if (nCode >= 0 && HooKMouseEvent != null) {//先判断是否事件被绑定(感觉有点多余的判断 丫的我不在上面绑定 我写Hook干嘛)
                //话说是把内存的什么什么转换成结构体
                MouseLLInfo mouseInfo = (MouseLLInfo)Marshal.PtrToStructure(lParam, typeof(MouseLLInfo));
                Btn btn = Btn.None;         //自己定义的一个枚举 里面只有三个值
                if (wParam == (IntPtr)WM_LBUTTONDOWN) {         //如果左键被点下
                    btn = Btn.LeftDowm;
                } else if (wParam == (IntPtr)WM_RBUTTONUP) {    //如果右键被抬起
                    btn = Btn.RightUp;
                }
                //好吧 我就不知道当时我怎么想的 在Hook里面获取的坐标 有负数的现象 所以在那边 我没用这个坐标
                MouseInfoEventArys e = new MouseInfoEventArys(btn, mouseInfo.pt.x, mouseInfo.pt.y);
                HooKMouseEvent(this, e);//触发绑定到这个上面的事件
            }
            return CallNextHookEx(handleOfHook, nCode, wParam, lParam);//继续下一个钩子
        }
         
        public bool SetMouseHook() {    //设置Hook
            if (isSet) {//如果已经设置了 就不要设置啦、、、
                return false;
            }
            HookProc MouseCallBack = new HookProc(MouseHookProcedure);
            handleOfHook = SetWindowsHookEx(WH_MOUSE_LL, MouseCallBack,
                GetModuleHandle(Process.GetCurrentProcess().MainModule.ModuleName), 0);
            if (handleOfHook != 0) {//如果设置成功、、
                gc = GCHandle.Alloc(MouseCallBack);//这个就是那个什么什么、、然后我的回调就不会被收废品的拣去了
                isSet = true;
                return true;
            }
            return false;
        }
        public bool UnLoadMouseHook() {
            if (!isSet) {//如果装都没有装那么久不要卸载啦、、
                return false;
            }
            if (UnhookWindowsHookEx(handleOfHook)) {
                gc.Free();//将回调释放掉、、
                isSet = false;
                return true;
            }
            return false;
        }
 
    }
 
    public enum Btn//我只感觉到这三个有用、(应该是两个 左键点下 右键抬起)
    {
        LeftDowm, RightUp, None
    }
    public class MouseInfoEventArys {//话说定义事件的时候都是这么写的 所以我也弄一个内出来保存事件参数
        private int x;//坐标 多余的后来才发现 鼠标慢慢贴近屏幕边缘的时候 3 2 1 0 -1 、、丫的 负数都出来了
        public int X {
            get { return x; }
        }
 
        private int y;//坐标
        public int Y {
            get { return y; }
        }
 
        private Btn mBtn;
        public Btn MBtn {
            get { return mBtn; }//鼠标的情况
        }
        public MouseInfoEventArys(Btn btn,int x,int y) {//构造器
            mBtn = btn;
            this.x = x;
            this.y = y;
        }
 
    }
}


标签: 钩子 拼图 C#

实例下载地址

利用c#写的jpg拼图软件,可以随意剪切和拼接(钩子源码)

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

第 1 楼 威名 发表于: 2019-12-17 11:08 07
如何添加进织梦网站呢

支持(0) 盖楼(回复)

发表评论

(您的评论需要经过审核才能显示)

查看所有1条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警