bool temp;
form_click中
temp=true;
form_click中
temp=true;
解决方案 »
- 初学接口的疑问:接口的意义
- [新手问题]关于SelectCommand.CommandType的问题
- 如何将已经做好的form程序设置为隐藏进程和定时运行
- c# windows api 对象结构?描述可能不准确,请高手指点。
- {0:#.###} 这个是什么意思?
- 窗体间传值,并传回赋值问题?
- 关于文件的查找替换效率问题。。急求高手进。。(我只能发20分的帖)
- 求助各位大虾:C#数据库知识方面的困惑<毕业设计>
- 现在有一个完整的C#源程序网站,里的源程序全部可以看见,也VS2003.NET的,但里面没有解决方案和项目文件,我如何才能有设计视图呢?
- cookie引用问题
- 问一下怎么用C#来建虚拟目录? 建 ftp呢
- 求救--我的vs.net安装了xde后帮助文档没了,急!!!
可是在当鼠标在窗体外Click的时候并不能执行form_click事件
而且在Form的控件中执行Click的时候也并不能执行form_click事件
不过这样有可能会漏掉某些事件
这方面的帖子很多啊!
用timer 更是不行,因为鼠标点击的过程非常短,你的timer无论多们短,有时候总是会漏过一个消息的.给你个提示,假设点击form 上的其他控件,form 当然不产生click事件,但是他会收到一个别的消息,用SPY++看看就知道了,然后override WndProc 就ok了,问题,本人遇到,而且已经解决.如果需要,我可以,告诉你很多方法,但是好的就一个,对我而言:)
那不是可以在每个控件的Click事件中写下你要的代码吗?
能给些代码提示吗?
谢过了
public delegate IntPtr HookProc(int nCode, IntPtr wParam, IntPtr lParam);2、声明API函数:
[DllImport("user32.dll", CharSet=CharSet.Auto)]
public static extern IntPtr SetWindowsHookEx(int hookid, HookProc pfnhook, IntPtr hinst, int threadid);
[DllImport("user32.dll", CharSet=CharSet.Auto, ExactSpelling=true)]
public static extern bool UnhookWindowsHookEx(IntPtr hhook);
[DllImport("user32.dll", CharSet=CharSet.Auto, ExactSpelling=true)]
public static extern IntPtr CallNextHookEx(IntPtr hhook, int code, IntPtr wparam, IntPtr lparam);[DllImport("kernel32.dll", ExactSpelling=true, CharSet=CharSet.Auto)]
public static extern int GetCurrentThreadId();public const int WH_MSGFILTER = -1;
3、写你自己的HookProc代理实现方法,如MyHookProc
public IntPtr MyHookProc(int nCode, IntPtr wParam, IntPtr lParam)
{
//...你的代码
return CallNextHookEx(iHookHandle, code, wparam, lparam);
}4、为你的类声明一个Hook Handle和非托管的钩子线程地址:
private IntPtr _iHookHandle=IntPtr.Zero;
private GCHandle _hookProcHandle;5、在合适的地方安装你的钩子
HookProc hookProc = new HookProc(MyHookProc);
_hookProcHandle = GCHandle.Alloc(hookProc);
iHookHandle = SetWindowsHookEx(WH_MSGFILTER, hookProc, IntPtr.Zero, .GetCurrentThreadId());
if (iHookHandle == IntPtr.Zero) throw new System.Exception("没有足够权限安装钩子!");6、在合适的地方卸载你的钩子
if (iHookHandle!=IntPtr.Zero)
UnhookWindowsHookEx(iHookHandle);
_hookProcHandle.Free();
iHookHandle = IntPtr.Zero;