Я пытаюсь вывести окно на передний план.Я использую этот код.Но это не работает.Может кто-нибудь помочь, пожалуйста?
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);
}
Код объяснения
Создание окна переднего плана требует больше, чем просто вызов API SetForegroundWindow.Сначала вы должны определить поток переднего плана и прикрепить его к окну, используя AttachThreadInput, а затем вызвать SetForegroundWindow.Таким образом они могут совместно использовать входные состояния.
Сначала я вызываю GetForegroundWindow, чтобы получить дескриптор текущего окна переднего плана.Затем несколько вызовов GetWindowThreadProcessId извлекают потоки, связанные с текущим окном переднего плана и окном, которое я хочу вывести на передний план.Если эти потоки одинаковы, простой вызов SetForegroundWindow - это все, что необходимо.В противном случае нить переднего плана прикрепляется к окну, которое я вывожу на передний план, и отсоединяется от текущего окна переднего плана.API-интерфейс AttachThreadInput обрабатывает это.
Содержимое взято с здесь Спасибо.