C# 监视光标在系统范围内的位置

C# 监视光标在系统范围内的位置,c#,cursor,monitoring,C#,Cursor,Monitoring,我需要制作一个小型的系统托盘应用程序,该应用程序在系统范围内监控光标位置,并根据光标手柄ID显示或隐藏屏幕键盘。例如,如果光标位于IE中的文本框(位置等于IBeam),则会弹出键盘。 我有系统托盘应用程序(无格式应用程序)的代码,但无法找到使其监视系统的方法。欢迎提供有关监控系统光标位置功能的任何帮助。谢谢。要实现事件驱动,您需要使用SetWindowsHookEx。您不能直接通过.NET执行此操作,但必须插入DLL。这是一本书。这是使用System.Runtime.InteropService

我需要制作一个小型的系统托盘应用程序,该应用程序在系统范围内监控光标位置,并根据光标手柄ID显示或隐藏屏幕键盘。例如,如果光标位于IE中的文本框(位置等于IBeam),则会弹出键盘。
我有系统托盘应用程序(无格式应用程序)的代码,但无法找到使其监视系统的方法。欢迎提供有关监控系统光标位置功能的任何帮助。谢谢。

要实现事件驱动,您需要使用
SetWindowsHookEx
。您不能直接通过.NET执行此操作,但必须插入DLL。这是一本书。这是使用
System.Runtime.InteropServices
导入user32.dll完成的。MSDN文章给出了从C#调用
SetWindowsHookEx
CallNextHookEx
UnhookWindowsHookEx
的分步说明。CodeProject还有一篇关于监控系统光标位置的文章。

            private void Pos()
            {
                for (; ; )
                {
                    Thread.Sleep(10);
                    Point position = Cursor.Position;
//You can use these to pass to your system tray or whereever you need it.
                    somePublicXVar = position.X; 
                    somePublicYVar = position.Y; 
                }

            }
            public void PointPosition()
            {
                Thread pointThread = new Thread(new ThreadStart(Pos));
                pointThread.Start();
            }

使用标准的
TextBox
可以很容易地完成,但使用某种复合的
TextBox
却不容易,例如
WPF中的
TextBox
。只需使用光标。定位在计时器的Tick事件处理程序中。请使用示例代码?循环占用大量CPU!!根据您的需要,您应该尝试为Thread.Sleep(minmilissecondsyoucanafford)使用更高的数字。希望它能有所帮助。需要的是:无论何时我的光标在任何应用程序的教科书中定位,屏幕键盘都会像平板电脑一样出现。Windows Metro做得很好,但桌面模式缺少此功能。@Regu或设置一个勾号事件,如Hans Passant对原始帖子的评论。使用条件和游标位置重新使用代码。如果我使用.Position,则位置会随着鼠标移动而改变,但如果我需要cursor.handle,则控制柄不会改变。我认为您不想查看光标控制柄,而是要在鼠标位置上执行命中测试。看看这个,发现一个家伙在C++中寻找同样的东西。有人想把代码转换成c#吗?我确实使用了一个转换器,但不确定它是否完成了所有必要的转换:LRESULT回调winProc(int-nCode,WPARAM-WPARAM,LPARAM-LPARAM){if(nCode<0)return CallNextHookEx(hhk,nCode,WPARAM,LPARAM);if(LPARAM){cwpsstruct*msg=(cwpsstruct*)LPARAM;if((msg->message==WM_命令)&(HIWORD(msg->WPARAM)==EN_SETFOCUS))MessageBox(NULL,“focus!”,“Information”,MB_ICONINFORMATION);}return CallNextHookEx(hhk,nCode,wParam,lParam);}@JoeCoder看看我提到的MSDN文章。它显示了如何从C#调用这些函数。