各路神仙,能不能给个钩子例子给小弟!

junsanrao 2008-04-30 09:12:14
要实现的功能
拿Notpad打比方
1、先运行所给例子
2、打开一个Notpad
3、该例子可以捕捉(钩住)当前光标
4、你在程序里面输入什么,什么就在Notpad中输出
感觉有点像输入法
先谢谢各路神仙进来指点
...全文
334 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
junsanrao 2008-05-15
  • 打赏
  • 举报
回复
同一个?哎,又失误
junsanrao 2008-05-15
  • 打赏
  • 举报
回复
十分抱歉,15楼没给到分,但谢谢你哦
junsanrao 2008-05-15
  • 打赏
  • 举报
回复
谢谢,大家这样的支持13楼说的很对,我去研究下,再次感谢
net0003 2008-05-15
  • 打赏
  • 举报
回复
学习
sww5219999 2008-05-15
  • 打赏
  • 举报
回复
用文件流写入不行吗?但估计不能同步
ziseliuxingzh 2008-05-15
  • 打赏
  • 举报
回复
WH_KEYBOARD_LL 是低级的,可以做全局钩子...10楼的OK
wzuomin 2008-05-15
  • 打赏
  • 举报
回复
pfworld 2008-05-15
  • 打赏
  • 举报
回复
http://www.codeproject.com/KB/cs/globalhook/globalhook_src.zip

这个应该是你要找例子!
zzultc 2008-05-14
  • 打赏
  • 举报
回复
lpfn
[in] Pointer to the hook procedure. If the dwThreadId parameter is zero or specifies the identifier of a thread created by a different process, the lpfn parameter must point to a hook procedure in a dynamic-link library (DLL). Otherwise, lpfn can point to a hook procedure in the code associated with the current process.

以上是msdn中关于SetWindowsHookEx的函数中对lpfn的解释!!里边使用的是“must”!
zzultc 2008-05-14
  • 打赏
  • 举报
回复
如果真的需要做全局钩子,必须使用C/C++或者其他非托管语言做一个dll包装一下那些api函数!
zzultc 2008-05-14
  • 打赏
  • 举报
回复
10楼的根本不行!
貌似安装了全局钩子(对这点深感怀疑,C#根本不能做全局钩子)!
但是别忘了楼主的需求,需要在目标窗口把本进程的字符串写到目标窗口里!!

楼主要实现的功能
拿Notpad打比方
1、先运行所给例子
2、打开一个Notpad
3、该例子可以捕捉(钩住)当前光标
4、你在程序里面输入什么,什么就在Notpad中输出
感觉有点像输入法

为什么不调用textout API函数呢?
先得到目标窗口的hwnd,在得到窗口dc,然后可以直接写到上面啊?!

voice007 2008-05-14
  • 打赏
  • 举报
回复
mark!
junsanrao 2008-05-14
  • 打赏
  • 举报
回复
还有吗?快来啊
yagebu1983 2008-04-30
  • 打赏
  • 举报
回复
顶了!!
我也想知道!!
yunfeng007 2008-04-30
  • 打赏
  • 举报
回复
Global System Hooks in .NET
http://www.codeproject.com/KB/system/globalsystemhook.aspx
------------------------------------------------------------
Processing Global Mouse and Keyboard Hooks in C#
http://www.codeproject.com/csharp/globalhook.asp
zhnzzy 2008-04-30
  • 打赏
  • 举报
回复
up
Deken_Muse 2008-04-30
  • 打赏
  • 举报
回复
我能进不
51Crack 2008-04-30
  • 打赏
  • 举报
回复
路过,想做键盘记录?!
监控谁?!
ericzhangbo1982111 2008-04-30
  • 打赏
  • 举报
回复
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.Diagnostics;
using System.IO;

namespace WindowsApplication1
{
/// <summary>
/// Description of MainForm.
/// </summary>
public partial class Form4 : Form
{

//委托
public delegate int HookProc(int nCode, int wParam, IntPtr lParam);
static int hHook = 0;
public const int WH_KEYBOARD_LL = 13;
//LowLevel键盘截获,如果是WH_KEYBOARD=2,并不能对系统键盘截取,Acrobat Reader会在你截取之前获得键盘。
HookProc KeyBoardHookProcedure;
//键盘Hook结构函数
[StructLayout(LayoutKind.Sequential)]
public class KeyBoardHookStruct
{
public int vkCode;
public int scanCode;
public int flags;
public int time;
public int dwExtraInfo;
}
#region DllImport
//设置钩子
[DllImport("user32.dll")]
public static extern int SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hInstance, int threadId);
[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
//抽掉钩子
public static extern bool UnhookWindowsHookEx(int idHook);
[DllImport("user32.dll")]
//调用下一个钩子
public static extern int CallNextHookEx(int idHook, int nCode, int wParam, IntPtr lParam);

[DllImport("kernel32.dll")]
public static extern int GetCurrentThreadId();

[DllImport("kernel32.dll")]
public static extern IntPtr GetModuleHandle(string name);

#endregion
#region 自定义事件
public void Hook_Start()
{
// 安装键盘钩子
if (hHook == 0)
{
KeyBoardHookProcedure = new HookProc(KeyBoardHookProc);

//hHook = SetWindowsHookEx(2,
// KeyBoardHookProcedure,
// GetModuleHandle(Process.GetCurrentProcess().MainModule.ModuleName), GetCurrentThreadId());

hHook = SetWindowsHookEx(WH_KEYBOARD_LL,
KeyBoardHookProcedure,
GetModuleHandle(Process.GetCurrentProcess().MainModule.ModuleName), 0);

//如果设置钩子失败.
if (hHook == 0)
{
Hook_Clear();
//throw new Exception("设置Hook失败!");
}
}
}

//取消钩子事件
public void Hook_Clear()
{
bool retKeyboard = true;
if (hHook != 0)
{
retKeyboard = UnhookWindowsHookEx(hHook);
hHook = 0;
}
//如果去掉钩子失败.
if (!retKeyboard) throw new Exception("UnhookWindowsHookEx failed.");
}

//这里可以添加自己想要的信息处理
public static int KeyBoardHookProc(int nCode, int wParam, IntPtr lParam)
{
if (nCode >= 0)
{
KeyBoardHookStruct kbh = (KeyBoardHookStruct)Marshal.PtrToStructure(lParam, typeof(KeyBoardHookStruct));
//if (kbh.vkCode == (int)Keys.S && (int)Control.ModifierKeys == (int)Keys.Control) // 截获F8
//{
// MessageBox.Show("快捷键已拦截!不能保存!");
// return 1;

//}
//if (kbh.vkCode == (int)Keys.Delete
// && (int)Control.ModifierKeys == (int)Keys.Control + (int)Keys.Alt) //截获Ctrl+Alt+Y
//{

// MessageBox.Show("!DeleteDeleteDeleteDeleteDelete");
// return 1;
//}
//if (kbh.vkCode == (int)Keys.X)
//{
// MessageBox.Show("不能全部保存!");
// return 1;
//}



file.Writer(kbh.vkCode.ToString());
//return 1;
}
return CallNextHookEx(hHook, nCode, wParam, lParam);
}
#endregion

public Form4()
{

InitializeComponent();
}
static File FileStream file=new FileStream("input.txt",FileModel.Open)
private void button1_Click(object sender, EventArgs e)
{

Hook_Start();
}

private void button2_Click(object sender, EventArgs e)
{
Hook_Clear();
}


}
}
junsanrao 2008-04-30
  • 打赏
  • 举报
回复
呵呵,你们别乱想,也没监控谁,就是想从这方面做个,多谢你们进来顶的兄弟啊,能帮忙的就帮我一把,七天,急啊
加载更多回复(1)

110,545

社区成员

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

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

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