c# win ce 键盘钩子

w63516227 2010-03-12 03:15:48
我想禁用掉手持终端的一些按键。。。。该怎么弄啊。。
网上查了一下资料,没用我想要的,全是在XP这类系统下的键盘钩子。。
或者是c++ 在wince 的键盘钩子
各位大神帮个忙、。。
给我一个用c#写的在win ce 5.0的运行的键盘钩子。。
...全文
483 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
flyerwing 2010-03-15
  • 打赏
  • 举报
回复

HHOOK g_hKeyHook=NULL;
HWND g_hWnd=NULL;
LRESULT CALLBACK KeyboardProc(
int code, // hook code
WPARAM wParam, // virtual-key code
LPARAM lParam // keystroke-message information
)
{
if(VK_SPACE==wParam || VK_RETURN==wParam)//如果是空格键直接返回停止信息继续传递,否则继续传递
return 1;
else
return CallNextHookEx(g_hKeyboard,code,wParam,lParam);
return 1;
} /*传递回调方法名称*/
g_hKeyHook=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,NULL,GetCurrentThreadId());//写在初始化里
UnhookWindowsHookEx(g_hKeyHook);//用完钩子记得移除。

偶刚才编译过的,给界面上拉个文本框,屏蔽了文本框的空格输入,MFC基于对话框的项目
cecilia2006 2010-03-15
  • 打赏
  • 举报
回复
给我邮件封信 我发你个类 cecilia-2007@163.com
w63516227 2010-03-15
  • 打赏
  • 举报
回复
我也知道啊。。。。可是没办法,有这种需求。。。我想过一个办法,用c++写一个钩子,然后生成DLL,但是我不会c++。。。纠结
only_lonely 2010-03-12
  • 打赏
  • 举报
回复
C#不适合做这种事情,吃力不讨好~
w63516227 2010-03-12
  • 打赏
  • 举报
回复
搞死了。。
我十分感谢lvdian520 ,也十分感谢给我提供帮助的,但我实在是搞不来。。
这样吧。帮我写一个完整的钩子,具体功能是禁止使用手持终端的ALPHA键各位大神
小弟在此跪谢了
点点的遁地 2010-03-12
  • 打赏
  • 举报
回复
支持!·~~~~~~~~~~
calltaotao 2010-03-12
  • 打赏
  • 举报
回复
=.= BackspaceKeyboardHook是我自己写的类,回调函数签名是:
        /// <summary>
/// 当前应用程序键盘钩子的回调函数
/// </summary>
/// <returns></returns>
/// <param name="nCode">当前状态</param>
/// <param name="wParam">消息信息</param>
/// <param name="lParam">消息信息</param>
private IntPtr LocalKeyboardProc(int nCode, IntPtr wParam, IntPtr lParam)

你要自己写回调
flyerwing 2010-03-12
  • 打赏
  • 举报
回复

/// Return Type: LRESULT->LONG_PTR->int
///code: int
///wParam: WPARAM->UINT_PTR->unsigned int
///lParam: LPARAM->LONG_PTR->int
[System.Runtime.InteropServices.UnmanagedFunctionPointerAttribute(System.Runtime.InteropServices.CallingConvention.StdCall)]
public delegate int HOOKPROC(int code, System.IntPtr wParam, System.IntPtr lParam);

[System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)]
public struct HHOOK__ {

/// int
public int unused;
}

[System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)]
public struct HINSTANCE__ {

/// int
public int unused;
}

public partial class NativeMethods {

/// Return Type: HHOOK->HHOOK__*
///idHook: int
///lpfn: HOOKPROC
///hmod: HINSTANCE->HINSTANCE__*
///dwThreadId: DWORD->unsigned int
[System.Runtime.InteropServices.DllImportAttribute("user32.dll", EntryPoint="SetWindowsHookExW")]
public static extern System.IntPtr SetWindowsHookExW(int idHook, HOOKPROC lpfn, [System.Runtime.InteropServices.InAttribute()] System.IntPtr hmod, uint dwThreadId) ;

}

函数原型是:SetWindowsHookExW(int idHook, HOOKPROC lpfn, HINSTANCE hmod, DWORD dwThreadId)
点点的遁地 2010-03-12
  • 打赏
  • 举报
回复
我有代码 加我QQ 214921019
w63516227 2010-03-12
  • 打赏
  • 举报
回复
BackspaceKeyboardHook
说是找不到类型或命名空间
calltaotao 2010-03-12
  • 打赏
  • 举报
回复
装PlatformBuilder for Microsoft Windows Ce help 这个帮助是最全最权威的.
还有WinCe的系统Api几乎都分装在coredll.dll中
        /// <summary>
/// 创建一个钩子
/// </summary>
/// <param name="idHook">钩子的类型,表示对系统的哪个对象进行Hook</param>
/// <param name="lpfn">回调函数的地址</param>
/// <param name="hMod">实例句柄</param>
/// <param name="dwThreadId">当前线程ID</param>
/// <returns>钩子的ID,脱钩时需要用到,OOP的方式相当与返回一个对象</returns>
[DllImport("coredll.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern IntPtr SetWindowsHookEx(int idHook, BackspaceKeyboardHook.HookProc lpfn, IntPtr hMod, uint dwThreadId);


flyerwing 2010-03-12
  • 打赏
  • 举报
回复
操作系统中的DLL
可以通过FRAEMWORK交互的
具体学习下平台调用部分WEBCAST上有了!
w63516227 2010-03-12
  • 打赏
  • 举报
回复
以上代码什么意思? 是吧.lib转换成.DLL么??
flyerwing 2010-03-12
  • 打赏
  • 举报
回复
有DLL文件,你可以PINVOKE一下就OK的了!
例如:
[DllImport("core.dll")]
public static extern UInt32 CreateNetwork(IntPtr hWnd, string connectPointName, DEVICE_CONNECTION_TYPE connType, string username, string pwd, string apn, string telno, string proxy, UInt32 port);

[DllImport("core.dll")]
public static extern UInt32 Ets(IntPtr hWnd, string connectPointName, string appName);
flyerwing 2010-03-12
  • 打赏
  • 举报
回复
有DLL文件,你可以PINVOKE一下就OK的了!
例如:
[DllImport("core.dll")]
public static extern UInt32 CreateNetwork(IntPtr hWnd, string connectPointName, DEVICE_CONNECTION_TYPE connType, string username, string pwd, string apn, string telno, string proxy, UInt32 port);

[DllImport("core.dll")]
public static extern UInt32 Ets(IntPtr hWnd, string connectPointName, string appName);
w63516227 2010-03-12
  • 打赏
  • 举报
回复
不可以啊。。
win ce 手册里全是lib 的库。。C#不能用啊

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧