[DllImport("user32")]
public static extern IntPtr GetForegroundWindow();
[DllImport("user32")]
public static extern bool AttachThreadInput(uint idAttach, uint idAttachTo, bool fAttach);
[DllImport("user32")]
public static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId);
[DllImport("user32")]
public static extern uint SendMessage(IntPtr hWnd, uint Msg, uint wParam, uint lParam);
[DllImport("kernel32.dll", SetLastError = true)]
static extern uint GetCurrentThreadId();
[DllImport("user32.dll")]
static extern IntPtr GetFocus();
[ComImport]
[Guid("00000114-0000-0000-C000-000000000046")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IOleWindow
{
void GetWindow(out IntPtr phwnd);
void ContextSensitiveHelp([In, MarshalAs(UnmanagedType.Bool)] bool fEnterMode);
}
IntPtr focusHwnd = GetFocusedControl();
IntPtr GetFocusedControl()
{
IntPtr hFocus;
IntPtr hFore;
uint id = 0;
hFore = GetForegroundWindow();
AttachThreadInput(GetWindowThreadProcessId(hFore, out id), GetCurrentThreadId(), true);
hFocus = GetFocus();
AttachThreadInput(GetWindowThreadProcessId(hFore, out id), GetCurrentThreadId(), false);
return hFocus;
}