之前写了一段程序,检测是否有程序处于文字输入状态。
当时只考虑了获得激活窗体handle,并判断其光标状态,
当文字未选择时,运行OK。
用的方法是:
IntPtr hWnd = GetForegroundWindow();
uint processId;
uint threadid = GetWindowThreadProcessId(hWnd, out processId);
GUITHREADINFO lpgui = new GUITHREADINFO();
lpgui.cbSize = Marshal.SizeOf(lpgui);
if (GetGUIThreadInfo(threadid, ref lpgui))
{
if (lpgui.hwndCaret != 0)
{
return hWnd;
}
}
如上面代码所示
首先我们通过 GetForegroundWindows API 得到当前窗体的句柄。然后我们再通过 GetGUIThreadInfo 得到当前窗体的一些属性。这些属性在 GUITHREADINFO 中定义
public struct GUITHREADINFO
{
public int cbSize;
public int flags;
public int hwndActive;
public int hwndFocus;
public int hwndCapture;
public int hwndMenuOwner;
public int hwndMoveSize;
public int hwndCaret;
public System.Drawing.Rectangle rcCaret;
}
上面是 GUITHREADINFO 结构。我们可以通过这个信息得到当前窗体中当前焦点的子窗口句柄,当前获得光标的子窗口句柄,当前正激活的子窗体句柄等等。这里我们只要用到当前获得光标的子窗口句柄,就是 hwndCaret 。如果hwndCaret 不为0,则表示当前窗体处于可输入状态。
但是当状态为文字选择时,上面方法就判断不了了。
希望能得到解决方法。
10 个解决方案
#1
up up up 谢谢!
#2
都看球去了?没人解答啦~~~~
#3
那你再判断是否是选择状态啊。
#4
能提示用什么方法吗?
#5
anybody?????
#6
继续顶,谢谢!
#7
奉劝楼主不要把有限的生命浪费在无限的加密解密死循环中!
#8
#9
还是没有解决,有大内高手不?
试图用sendmessage来发送EM_GETSEL消息,但是没有办法得到当前拥有caret的控件句柄。
也试图用窗体句柄得到窗体对象,通过activecontrol来逐个控件判断,但是没有找到有什么方法可以用句柄得到窗体对象。
PS:FromHandle试过了,在我们这个系统里取不到。
还有一个方法也在想法是,用GetCaretPos来获得光标的坐标,通过这个坐标得到控件句柄。但是怎样从坐标转成控件呢?
谁能有可行的方法吗?谢谢啦!
试图用sendmessage来发送EM_GETSEL消息,但是没有办法得到当前拥有caret的控件句柄。
也试图用窗体句柄得到窗体对象,通过activecontrol来逐个控件判断,但是没有找到有什么方法可以用句柄得到窗体对象。
PS:FromHandle试过了,在我们这个系统里取不到。
还有一个方法也在想法是,用GetCaretPos来获得光标的坐标,通过这个坐标得到控件句柄。但是怎样从坐标转成控件呢?
谁能有可行的方法吗?谢谢啦!
#10
up up up up up up up up up
#1
up up up 谢谢!
#2
都看球去了?没人解答啦~~~~
#3
那你再判断是否是选择状态啊。
#4
能提示用什么方法吗?
#5
anybody?????
#6
继续顶,谢谢!
#7
奉劝楼主不要把有限的生命浪费在无限的加密解密死循环中!
#8
#9
还是没有解决,有大内高手不?
试图用sendmessage来发送EM_GETSEL消息,但是没有办法得到当前拥有caret的控件句柄。
也试图用窗体句柄得到窗体对象,通过activecontrol来逐个控件判断,但是没有找到有什么方法可以用句柄得到窗体对象。
PS:FromHandle试过了,在我们这个系统里取不到。
还有一个方法也在想法是,用GetCaretPos来获得光标的坐标,通过这个坐标得到控件句柄。但是怎样从坐标转成控件呢?
谁能有可行的方法吗?谢谢啦!
试图用sendmessage来发送EM_GETSEL消息,但是没有办法得到当前拥有caret的控件句柄。
也试图用窗体句柄得到窗体对象,通过activecontrol来逐个控件判断,但是没有找到有什么方法可以用句柄得到窗体对象。
PS:FromHandle试过了,在我们这个系统里取不到。
还有一个方法也在想法是,用GetCaretPos来获得光标的坐标,通过这个坐标得到控件句柄。但是怎样从坐标转成控件呢?
谁能有可行的方法吗?谢谢啦!
#10
up up up up up up up up up