当前位置:编程学习 > C#/ASP.NET >>

c#键盘钩子程序

c#写了个键盘钩子程序现在运行很正常,现在要将其移植到win98系统上。不知道怎么办请帮我想想怎么解决。谢谢! --------------------编程问答-------------------- 98都不支持framework,换语言吧 --------------------编程问答-------------------- 我不用使用钩子就可以使用c#写的程序呀 --------------------编程问答-------------------- ???你说的什么意思啊?

运行C#程序得在支持NET平台的机器上,98,不支持framework,换成C++
引用 2 楼  的回复:
我不用使用钩子就可以使用c#写的程序呀
--------------------编程问答-------------------- 楼上大牛都说了98不支持
现在大多都xp和win7 肿么你还用98服了 --------------------编程问答--------------------
引用 1 楼  的回复:
98都不支持framework,换语言吧


支持…… --------------------编程问答-------------------- 2.0是支持98的,至于钩子,你是用的SetWindowsHookEx吧?

Windows 95/98/Me: SetWindowsHookEx is supported by the Microsoft Layer for Unicode (MSLU). However, it does not make conversions. To see Unicode messages, notifications, and so forth, you must subclass the window. To use this version of the API, you must add certain files to your application, as outlined in Installing and Releasing Hook Procedures.

这是msdn的描述 --------------------编程问答-------------------- 看看这篇吧

可能是ansi和unicode的问题
另外这俩钩子98不支持
WH_KEYBOARD_LL
WH_KEYBOARD_LL
--------------------编程问答-------------------- WH_KEYBOARD_LL
WH_MOUSE_LL
--------------------编程问答-------------------- 楼主能否共享一下钩子的代码? --------------------编程问答-------------------- 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;
using System.IO;
namespace YJZF
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private HOOK.GlobalHook hook;

        private void notifyIcon1_Click(object sender, EventArgs e)
        {
            this.Visible = true;
            this.WindowState = FormWindowState.Normal;
            this.notifyIcon1.Visible = false;
        }
        private void MyKeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
        {
            //this.label1.Text = e.KeyCode.ToString();
            if (e.KeyCode.ToString() =="H")
            {
                Form2 ff = new Form2();
                ff.Show();
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            hook = new HOOK.GlobalHook();
            hook.KeyDown += new KeyEventHandler(this.MyKeyDown);
            //hook.OnMouseActivity += new MouseEventHandler(this.MyMouseClick);
            hook.Start();
        }
        //private void MyMouseClick(object sender, System.Windows.Forms.MouseEventArgs e)
        //{
        //    if (e.Button == System.Windows.Forms.MouseButtons.Left)
        //    //this.label1.Text = "坐标:X= " + e.X + " Y=" + e.Y;
        //    { }
        //}

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            //全局钩子
            if (hook != null) hook.Stop();
        }

        private void Form1_SizeChanged(object sender, EventArgs e)
        {
            if (this.WindowState == FormWindowState.Minimized)
            {
                this.Hide();
                this.notifyIcon1.Visible = true;
            } 
        }

        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            //全局钩子
            if (hook != null) hook.Stop();
        }
    }
}
--------------------编程问答-------------------- using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace 键盘钩子屏蔽热键
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private IntPtr pKeyboardHook = IntPtr.Zero;//键盘钩子句柄
        public delegate int HookProc(int nCode, Int32 wParam, IntPtr lParam);// 钩子委托声明
        //键盘钩子委托实例不能省略变量
        private HookProc KeyboardHookProcedure;
        //底层键盘钩子
        public const int idHook = 13;
        //安装钩子
        [DllImport("user32.dll", CallingConvention = CallingConvention.StdCall)]
        public static extern IntPtr SetWindowsHookEx(int idHook, HookProc lpfn,
            IntPtr pInstance, int threadId);
        //卸载钩子
        [DllImport("user32.dll", CallingConvention = CallingConvention.StdCall)]
        public static extern bool UnhookWindowsHookEx(IntPtr pHookHandle);
        //键盘钩子处理函数
        private int KeyboardHookProc(int nCode, Int32 wParam, IntPtr lParam)
        {
            KeyMSG m = (KeyMSG)Marshal.PtrToStructure(lParam, typeof(KeyMSG));
            if (pKeyboardHook != IntPtr.Zero)
            {
                switch (((Keys)m.vkCode))
                {
                    case Keys.LWin:
                    case Keys.RWin:
                    case Keys.Delete:
                    case Keys.Alt:
                    case Keys.Escape:
                    case Keys.F4:
                    case Keys.Control:
                    case Keys.Tab:
                        return 1;
                }
            }
            return 0;
        }
        //安装钩子
        public bool InsertHook()
        {
            IntPtr pIn = (IntPtr)4194304;
            if (this.pKeyboardHook == IntPtr.Zero)
            {
                this.KeyboardHookProcedure = new HookProc(KeyboardHookProc);
                this.pKeyboardHook = SetWindowsHookEx(idHook, KeyboardHookProcedure, pIn, 0);
                if (this.pKeyboardHook == IntPtr.Zero)
                {
                    this.UnInsertHook();
                    return false;
                }
            }
            return true;
        }
        //卸载钩子
        public bool UnInsertHook()
        {
            bool result = true;
            if (this.pKeyboardHook != IntPtr.Zero)
            {
                result = (UnhookWindowsHookEx(this.pKeyboardHook) && result);
                this.pKeyboardHook = IntPtr.Zero;
            }
            return result;
        }
        [StructLayout(LayoutKind.Sequential)]
        public struct KeyMSG
        {
            public int vkCode;
            public int scanCode;
            public int flags;
            public int time;
            public int dwExtraInfo;
        }

        private void checkBox1_CheckedChanged(object sender, EventArgs e)
        {
            if (checkBox1.Checked)
            {
                InsertHook();
            }
            else
            {
                UnInsertHook();
            }
        }
    }
} --------------------编程问答-------------------- 明天我试试看 --------------------编程问答-------------------- 怎么获取返回值呢?
--------------------编程问答-------------------- KeyboardHookProc这个的返回值
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,