none
监控光标 RRS feed

  • 问题

  • 程序需要实现一个功能,就是要监视所有的光标是否处于文本编辑框中,比如IE里面的编辑框,qq文本框。比如光标插入符处于qq里面的时候就弹出此时的光标位置,不是鼠标光标,是插入符的光标。看了许多资料,一头雾水,哪位高手指点下思路
    2012年1月6日 6:17

答案

  • UINT __cdecl ThreadProc(LPVOID lParam)
    {
    	while(TRUE)
    	{
    		Sleep(5000);
    		CPoint pt;
    		GetCursorPos(&pt);
    		HWND hWnd = NULL;
    		
    		if(NULL != (hWnd = WindowFromPoint(pt)))
    		{
    			DWORD dwThreadId = 0;
    			GUITHREADINFO gi = {0};
    			gi.cbSize = sizeof(GUITHREADINFO);
    
    			dwThreadId = GetWindowThreadProcessId(hWnd, NULL);
    
    			if(GetGUIThreadInfo(dwThreadId, &gi))
    			{
    				if(gi.hwndCaret)
    				{
    					SendMessage(gi.hwndCaret, WM_SETTEXT, 0, (LPARAM)(_T("Hello, World!")));
    				}
    			}					
    		}
    	}
    	return 0;
    }
    


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.
    • 已建议为答案 Helen Zhao 2012年1月9日 6:48
    • 已标记为答案 Helen Zhao 2012年1月12日 8:53
    2012年1月6日 14:04
    版主
  • 这个应该通过检查Focus来实现

    看看SetFocus能不能满足你的要求


    0xBAADF00D
    • 已建议为答案 Helen Zhao 2012年1月9日 6:49
    • 已标记为答案 Helen Zhao 2012年1月12日 8:53
    2012年1月8日 13:47
    版主

全部回复

  • 程序需要实现一个功能,就是要监视所有的光标是否处于文本编辑框中,比如IE里面的编辑框,qq文本框。比如光标插入符处于qq里面的时候就弹出此时的光标位置,不是鼠标光标,是插入符的光标。看了许多资料,一头雾水,哪位高手指点下思路
    问题简单说是这样的,我程序打开后就最小化,然后就一直监视,当监视到光标插入符在qq的输入框的时候,程序就把“hello word”字符打上去。
    2012年1月6日 7:07
  • UINT __cdecl ThreadProc(LPVOID lParam)
    {
    	while(TRUE)
    	{
    		Sleep(5000);
    		CPoint pt;
    		GetCursorPos(&pt);
    		HWND hWnd = NULL;
    		
    		if(NULL != (hWnd = WindowFromPoint(pt)))
    		{
    			DWORD dwThreadId = 0;
    			GUITHREADINFO gi = {0};
    			gi.cbSize = sizeof(GUITHREADINFO);
    
    			dwThreadId = GetWindowThreadProcessId(hWnd, NULL);
    
    			if(GetGUIThreadInfo(dwThreadId, &gi))
    			{
    				if(gi.hwndCaret)
    				{
    					SendMessage(gi.hwndCaret, WM_SETTEXT, 0, (LPARAM)(_T("Hello, World!")));
    				}
    			}					
    		}
    	}
    	return 0;
    }
    


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.
    • 已建议为答案 Helen Zhao 2012年1月9日 6:48
    • 已标记为答案 Helen Zhao 2012年1月12日 8:53
    2012年1月6日 14:04
    版主
  • 非常感谢您的回答,将您的例子进行了测试,能捕获IE上面的输入框,和文本,但是我需要的功能是捕获像百度中间的输入框tab框,和qq的输入框。发现这两种还是没办法捕获。对这块不熟悉,找资料也不好找,还希望老师继续指导下,万分感谢
    2012年1月7日 3:50
  • 这个应该通过检查Focus来实现

    看看SetFocus能不能满足你的要求


    0xBAADF00D
    • 已建议为答案 Helen Zhao 2012年1月9日 6:49
    • 已标记为答案 Helen Zhao 2012年1月12日 8:53
    2012年1月8日 13:47
    版主
  • 技术上不好解决的问题可以尝试重新对需求描述一下,或许就有替代解决方案了。

    2011 c# mvp China. *George读起来像不像“饺子”?我爱吃饺子,我叫George。

    2012年2月22日 3:32