这个问题来自论坛提问,C#的大致代码如下
using
System;
using
System.Windows.Forms;
using
System.Runtime.InteropServices;
namespace
WindowsApplication1
...
{
public
partial
class
Form1 : Form
...
{
public
Form1()
...
{
InitializeComponent();
}
private
void
Form1_Load(
object
sender, EventArgs e)
...
{
Win32Hook hook
=
new
Win32Hook();
hook.onMouseChange
+=
new
EventHandler(hook_onMouseChange);
hook.SetHook();
}
void
hook_onMouseChange(
object
sender, EventArgs e)
...
{
this
.Text
=
Cursor.Position.ToString();
}
}
public
class
Win32Hook
...
{
[DllImport(
"
kernel32
"
)]
public
static
extern
int
GetCurrentThreadId();
[DllImport(
"
user32
"
,CharSet
=
CharSet.Auto, CallingConvention
=
CallingConvention.StdCall)]
public
static
extern
int
SetWindowsHookEx(
HookType idHook,
HOOKPROC lpfn,
int
hmod,
int
dwThreadId);
public
enum
HookType
...
{
WH_GETMESSAGE
=
3
}
public
delegate
int
HOOKPROC(
int
nCode,
int
wParam,
int
lParam);
public
event
System.EventHandler onMouseChange;
public
void
SetHook()
...
{
SetWindowsHookEx(HookType.WH_GETMESSAGE,
new
HOOKPROC(
this
.MyKeyboardProc),
0
,
GetCurrentThreadId());
}
public
int
MyKeyboardProc(
int
nCode,
int
wParam,
int
lParam)
...
{
if
(onMouseChange
!=
null
)
...
{
onMouseChange(
null
,
null
);
}
return
0
;
}
}
}