Как вывести окно на передний план с помощью C #?

Я пытаюсь вывести окно на передний план. Я использую этот код. Но это не работает. Не могли бы вы помочь?

ShowWindowAsync(wnd.hWnd, SW_SHOW);

SetForegroundWindow(wnd.hWnd);
// Code from Karl E. Peterson, www.mvps.org/vb/sample.htm
// Converted to Delphi by Ray Lischner
// Published in The Delphi Magazine 55, page 16
// Converted to C# by Kevin Gale
IntPtr foregroundWindow = GetForegroundWindow();
IntPtr Dummy = IntPtr.Zero;

uint foregroundThreadId = GetWindowThreadProcessId(foregroundWindow, Dummy);
uint thisThreadId = GetWindowThreadProcessId(wnd.hWnd, Dummy);

 if (AttachThreadInput(thisThreadId, foregroundThreadId, true))
 {
    BringWindowToTop(wnd.hWnd); // IE 5.5 related hack
    SetForegroundWindow(wnd.hWnd);
    AttachThreadInput(thisThreadId, foregroundThreadId, false);
 }

 if (GetForegroundWindow() != wnd.hWnd)
 {
     // Code by Daniel P. Stasinski
     // Converted to C# by Kevin Gale
    IntPtr Timeout = IntPtr.Zero;
    SystemParametersInfo(SPI_GETFOREGROUNDLOCKTIMEOUT, 0, Timeout, 0);
    SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, Dummy, SPIF_SENDCHANGE);
    BringWindowToTop(wnd.hWnd); // IE 5.5 related hack
    SetForegroundWindow(wnd.hWnd);
    SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, Timeout, SPIF_SENDCHANGE);
 }

Code Explained

Создание окна в качестве окна переднего плана требует большего, чем просто вызов SetForegroundWindow API. Вы должны сначала определите поток переднего плана и прикрепите его к своему окну, используя AttachThreadInput, затем вызовите SetForegroundWindow. Таким образом они могут разделять состояния ввода.

Сначала я вызываю GetForegroundWindow, чтобы получить ручку текущего окно переднего плана. Затем несколько звонков GetWindowThreadProcessId получить потоки, связанные с текущим окно переднего плана и окно I хочу вывести на передний план. Если эти темы такие же простые вызов SetForegroundWindow - это все это необходимо. В противном случае нитка переднего плана прикреплена к окно, которое я несу впереди и отделился от того, что было текущим окно переднего плана. В Этим занимается API AttachThreadInput.

Содержимое взято из здесь Спасибо.

6
задан Nikil 1 February 2011 в 21:05
поделиться