如何限制鼠标在桌面的一部分范围内移动?
比如限制鼠标只在桌面的左半部分使用,过不了中线。
左半部分可以切换任何窗体,但是同样不能过中线。
比如限制鼠标只在桌面的左半部分使用,过不了中线。
左半部分可以切换任何窗体,但是同样不能过中线。
解决方案 »
- 大家帮我看看错在什么地方
- JS三级联动菜单,页面刷新后如何保持之前选择的项目?
- 请教一个远程文件读取的问题
- 可以在Win Form中加入script引用吗?
- 幫我看看下面代碼,哪裡有錯,急呀。看了好久看不知錯在哪裡。
- 返回表中选重的是第几行
- asp.net安装问题!在线等待!
- 关于VS2008发布后vshost.exe.manifest自动删除
- 又发现一问题,窗体的尺寸在其他机器改变的原因
- 【付费求助】5000元求大神写一个 appstore账号全自动注册器
- 关于"继承"与"多态"的关系,我们到底理解了有多少.
- 收藏 不显示删除回复显示所有回复显示星级回复显示得分回复 winform中我怎么将ip的数据放入数据库中?
http://www.bcbbs.net/news/Content32245.aspx
[DllImport("user32.dll")]
public static extern int SetCursorPos(int x, int y); [DllImport("User32.dll ")]
private static extern Int32 GetCursorPos(ref POINTAPI lpPoint); public class POINTAPI
{
public Int32 x;
public Int32 y;
} private void timer1_Tick(object sender, EventArgs e) //监视鼠标位置
{
POINTAPI lPos = new POINTAPI();
GetCursorPos(ref lPos); if (lPos.y > SystemInformation.VirtualScreen.Height) //过屏幕中线
{
lPos.x = SystemInformation.VirtualScreen.Height / 2;
lPos.y = MousePosition.Y;
} SetCursorPos(lPos.x, lPos.y);
}
IntPtr hookProc(int code, IntPtr wparam, IntPtr lparam)
{
if (code < 0) return CallNextHookEx(_nextHookPtr, code, wparam, lparam); MSLLHOOKSTRUCT msllStruct = (MSLLHOOKSTRUCT)Marshal.PtrToStructure(lparam, typeof(MSLLHOOKSTRUCT));
if (msllStruct.pt.X>=300)
{
this.Text = Cursor.Position.ToString();
SetCursorPos(300, msllStruct.pt.Y);
} return IntPtr.Zero;
} public void SetHook()
{
if (_nextHookPtr != IntPtr.Zero)
{
return;
} HookProc myhookProc = new HookProc(hookProc);
//_nextHookPtr = SetWindowsHookEx((int)HookType.MouseLL, myhookProc, IntPtr.Zero, GetCurrentThreadId());
_nextHookPtr = SetWindowsHookEx((int)HookType.MouseLL, myhookProc, GetModuleHandle(Process.GetCurrentProcess().MainModule.ModuleName), 0);
}
现在可以获得全局的鼠标事件了,但是没办法把鼠标限制在x<=300。只有当鼠标点了左右键的时候的,光标才会回到x<=300