在键盘钩子中对lParam进行Marshal.PtrToStructure类型转换时发生“内存保护”错误。

问题描述

键盘信息类:[StructLayout(LayoutKind.Sequential)]publicstructKeyBoardHookStruct{publicintvkCode;publicintscanCode;publicintflags;publicinttime;publicintdwExtraInfo;}在键盘钩子函数privateintKeyboardHookProc(intnCode,Int32wParam,IntPtrlParam)中进行KeyBoardHookStructinput=(KeyBoardHookStruct)Marshal.PtrToStructure(lParam,typeof(KeyBoardHookStruct));时出现“尝试读取或写入受保护的内存。这通常指示其他内存已损坏。”错误。奇怪的是,在try块中出现错误时,它不是转到catch块中抛出异常,而是直接跳到Main()函数的Application.Run()那里。另,安装钩子是成功的。为什么会出现这种情况,怎么解决?请高手解答!

解决方案

解决方案二:
自己顶一下
解决方案三:
自己顶一下
解决方案四:
或者说,在全局钩子中,如何获取键盘按下的是哪个键值?hKeyboardHook=SetWindowsHookEx(13,KeyboardHookProc,Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0]),0);在KeyboardHookProc(intnCode,Int32wParam,IntPtrlParam)过程,如何取得按下的键值?

时间: 2024-10-31 14:28:36

在键盘钩子中对lParam进行Marshal.PtrToStructure类型转换时发生“内存保护”错误。的相关文章

图片-Myeclipse中SVN插件导入项目时发生内部错误!

问题描述 Myeclipse中SVN插件导入项目时发生内部错误! 项目上没有连接状态. 用SVN插件import项目时,报unable to defalut SVN client. 右键项目的TEAM不能正常显示该有的内容. 急急急!!!!!!!!!!!!!!!!!!!!!! 求大神!!!!!!!!!!!!!!!!!!!!!! 同事用的是和我一样的SVN插件 都放在了MyEclipse 10dropinssite-1.8.5同一个目录下,他的没问题,我的就不行. 菜单选项我也选了~ WHY? 解

键盘钩子lParam问题

问题描述 if(lParam&0x80000000)判断让键盘只处理一次事件,网上资料好像可行,为什么我提示错误运算符"&"无法应用于"System.IntPtr"和"uint"类型的操作数. 解决方案 解决方案二:if((lParam.ToInt64()&0x80000000)==0x80000000)解决方案三://钩子事件内部调用,调用_clientMethod方法转发到客户端应用.privatestaticintO

利用底层键盘钩子拦载任意按键(回调版)

前段时间我曾经写过一篇<利用底层键盘钩子屏蔽任意按键>,并放到了我的blog上.这 篇文章的题目中把"屏蔽"改成了"拦截",显然要比以前的版本强 一些了.对于以前写的那个DLL,有一个不够理想的地方,就是仅仅能实现屏蔽.如果想在屏 蔽之前加入一些"小动作",就只能修改DLL,在LowLevelKeyboardProc函数中添 加代码,实现新的功能.但这样显然不够灵活,这样的DLL也不具备一般性了.所以我自然而 然地想到了回调,Wind

利用键盘钩子开发按键发音程序

本文配套源码 一.前言 一日,看见我妈正在用电脑练习打字,频频低头看键盘,我想:要是键盘能发音的话,不就可以方便她养成"盲打"的好习惯吗?光想不做可不行,开始行动(您可千万别急着去 拿工具箱啊^_^)... 按键能发音,其关键就是让程序能够知道当前键盘上是哪个键被按下,并播 放相应的声音,自己的程序当然不在话下,那么其它程序当前按下哪个键如何得知呢?利用键盘钩子便可 以很好地解决. 下载本文的全部源代码 大小:552K 二.挂钩(HOOK)的基本原理 WINDOWS调用挂接的回调函数时

vb.net 全局键盘钩子?

问题描述 这段键盘钩子,在窗口里怎么调用啊?ImportsSystem.Reflection,System.Threading,System.ComponentModel,System.Runtime.InteropServices'''<summary>本类可以在.NET环境下使用系统键盘与鼠标钩子</summary>PublicClassSystemHook定义结构API声明导入常量声明事件委托处理PrivatehMouseHookAsIntegerPrivatehKeyboa

C#键盘钩子问题

问题描述 最近用网上写的C#键盘钩子获取USB扫描枪条码的一段代码遇到比较头疼的问题,扫描的条码值不对扫描条码"KK25F1840W/019203001156",用此代码结果是"kkk255F18400w/019203001156"代码如下:(求高手解答)BarCodeHook类:usingSystem.Runtime.InteropServices;usingSystem.Reflection;namespaceWindowsApplication2{public

windows api学习笔记-键盘钩子

DLL项目的头文件 #ifdef KEYHOOKLIB_EXPORT //此宏将在CPP文件中定义 #define KEYHOOKLIB_API __declspec(dllexport) #else #define KEYHOOKLIB_API __declspec(dllimport) #endif #define HM_KEY WM_USER+101 BOOL KEYHOOKLIB_API WINAPI SetKeyHook(BOOL bInstall,DWORD dwThreadId =

鼠标点击坐标-在鼠标钩子中,如何实时获得鼠标的屏幕坐标?

问题描述 在鼠标钩子中,如何实时获得鼠标的屏幕坐标? 在鼠标钩子的WM_LBUTTONDOWN消息中,我想获得鼠标点击瞬间的坐标.注意,是鼠标点击瞬间. 我现在知道有两种方法 1.GET_X_LPARAM(lparam)和GET_Y_LPARAM(lparam). 这种方法获取的是相对于钩子的鼠标坐标,但是钩子不像窗体,没有自己的坐标吧.我获取到的坐标要么很大,要么是负数...然后我尝试用钩子句柄来转换,ClientToScreen((HWND)hMouseHook, &pt).得到的pt值也不

vc++6 0-全局键盘钩子函数的回调函数有时无效

问题描述 全局键盘钩子函数的回调函数有时无效 DLL代码: myHooke.c #include "myHooke.h" #include <windows.h> #include <winuser.h> #include <stdlib.h> #include <stdio.h> int ndown = 0; HHOOK hhkHook = NULL; //定义钩子句柄 HINSTANCE hInstance = NULL; //程序实