我需要对键盘进行编程,并进行一些配置和自定义。 如果在键盘之前聚焦了任何文本区域,我需要将其配置为启用。 主要是我需要知道选择了什么控件。
键盘是一个独立的应用程序,因此只需访问操作系统就无法直接处理控件。
有关更多解释,我将告诉你情景:
ShowInTaskBar
未设置,并且键盘已禁用。用户点击窗口中的任何文本控件,如记事本或Microsoft Word或Paint中的TextBox,然后单击键盘应用程序后启用。
用户点击键盘应用程序及其键,在步骤2之前选择的TextBox上写入文本,请注意前一个TextBox将失去焦点,但键盘仍然会启用。
答案 0 :(得分:0)
您可以尝试使用Focused property
foreach (var control in this.Controls)
{
if (control.Focused)
{
....
}
}
链接:http://msdn.microsoft.com/fr-fr/library/system.windows.forms.control.focused.aspx
答案 1 :(得分:0)
您将需要两个Windows API函数
GetActiveWindow(无效); GetWindowClass()
首先会给你活动的窗口(Focussed窗口),第二个会告诉你它是否是一个文本窗口。
您需要更多函数sendmessage(...)来获取窗口的当前文本以及设置文本。
更多关于Windows API。
答案 2 :(得分:0)
通过搜索插入位置很容易,因为它应该大于0
GUITHREADINFO lpgui = new GUITHREADINFO();
IntPtr fore = GetForegroundWindow();
uint tpid = GetWindowThreadProcessId(fore, IntPtr.Zero);
lpgui.cbSize = Marshal.SizeOf(lpgui.GetType());
bool flag = GetGUIThreadInfo(tpid, out lpgui);
WINDOWINFO pwi = new WINDOWINFO();
pwi.cbSize = (uint)Marshal.SizeOf(pwi.GetType());
GetWindowInfo((IntPtr)lpgui.hwndCaret, ref pwi);
if (flag)
{
if (!(lpgui.rcCaret.Location.X == 0 && lpgui.rcCaret.Location.Y == 0))
{
//TODO
}
}