VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 723|回复: 4

程序有问题,帮看看

[复制链接]

1

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-3-6 11:30:01 | 显示全部楼层 |阅读模式
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

using System.Runtime.InteropServices;
using System.Reflection;

namespace a4
{
    public partial class Form1 : Form
    {
        private const int WM_MOUSEMOVE = 0x200;         //鼠标移动

        private const int WM_LBUTTONDOWN = 0x201;       //鼠标左键按下
        private const int WM_RBUTTONDOWN = 0x204;       //鼠标右键按下
        private const int WM_MBUTTONDOWN = 0x207;       //鼠标滚轴按下

        private const int WM_LBUTTONUP = 0x202;         //鼠标左键抬起
        private const int WM_RBUTTONUP = 0x205;         //鼠标右键抬起
        private const int WM_MBUTTONUP = 0x208;         //鼠标滚轴抬起

        private const int WM_LBUTTONDBLCLK = 0x203;     //鼠标左键双击
        private const int WM_RBUTTONDBLCLK = 0x206;     //鼠标右键双击
        private const int WM_MBUTTONDBLCLK = 0x209;     //鼠标滚轴双击

        [StructLayout(LayoutKind.Sequential)]       //声明一个封送类型
        public class MouseHookStruct
        {
            public Point pt;
            public int hwnd;
            public int wHitTestCode;
            public int dwExtraInfo;
        }

        int hHook=0;
        private delegate int mouse_key_delegate(
                                      int nCode,int wParam,IntPtr lParam);

        [DllImport("kernel32.dll" , CharSet = CharSet.Auto , CallingConvention = CallingConvention.StdCall, SetLastError = true , EntryPoint = "GetCurrentThreadId")]
        private static extern int GetCurrentThreadId();

        [DllImport("user32.dll",  CharSet = CharSet.Auto , CallingConvention = CallingConvention.StdCall, SetLastError = true , EntryPoint = "SetWindowsHookExA")]
        private static extern int SetWindowsHookEx(int hHook, mouse_key_delegate mkDelegate, IntPtr wParam, int lParam);

        [DllImport("user32.dll" , CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall, SetLastError = true , EntryPoint = "UnhookWindowsHookEx")]
        private static extern bool UnhookWindowsHookEx(int hHook);

        [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall, SetLastError = true , EntryPoint = "CallNextHookEx")]
        private static extern int CallNextHookEx(int hHook, int nCode, int wParam, IntPtr lParam);


        public Form1()
        {
            InitializeComponent();
        }

        public Form1(int hHook)
        {
            this.hHook = hHook;
            this.InitializeComponent();
        }

        private int Mouse_Key_Proc(int nCode, int wParam, IntPtr lParam)
        {
            MouseHookStruct MyMouseHookStruct = (MouseHookStruct)Marshal.PtrToStructure(lParam, typeof(MouseHookStruct));

            if (nCode > 0 && wParam == WM_LBUTTONDOWN)
            {
                this.toolStripStatusLabel1.Text = " X= " + MyMouseHookStruct.pt.X + ", Y= " + MyMouseHookStruct.pt.Y;
                return 1;
            }

            return CallNextHookEx(hHook, nCode, wParam, lParam);
        }

        private bool Start()
        {
            //hHook = SetWindowsHookEx(hHook, new mouse_key_delegate(Mouse_Key_Proc), IntPtr.Zero, GetCurrentThreadId());//hHook=2好用

            hHook = SetWindowsHookEx(hHook, new mouse_key_delegate(Mouse_Key_Proc), Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0]), 0);//这句为什么不好用
            MessageBox.Show("hHook= " + hHook);

            if (hHook != 0)
                return true;
            return false;
        }

        private bool Stop()
        {
            if (hHook == 0)
            {
                UnhookWindowsHookEx(hHook);
                return true;
            }
            return false;
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            hHook = 14;
            Start();
        }
    }
}


请帮我看看全局钩子为什么不好用??????????
回复

使用道具 举报

2

主题

29

帖子

16.00

积分

新手上路

Rank: 1

积分
16.00
发表于 2020-5-21 21:15:01 | 显示全部楼层
看来你还没有理解全局钩子的定义,全局钩子要作成dll的,这样才能进程注入
回复

使用道具 举报

1

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
 楼主| 发表于 2020-5-22 12:45:01 | 显示全部楼层
savage698
非要做成DLL吗?
回复

使用道具 举报

0

主题

9

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
发表于 2020-6-15 18:30:01 | 显示全部楼层
是的,dll
回复

使用道具 举报

0

主题

15

帖子

9.00

积分

新手上路

Rank: 1

积分
9.00
发表于 2020-6-18 17:45:01 | 显示全部楼层
有点看不懂  抱歉  菜死了....
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表