如何使用c#引入窗口前景?

前端之家收集整理的这篇文章主要介绍了如何使用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,false);
 }

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

代码解释

Making a window the foreground window
requires more than just calling the
SetForegroundWindow API. You must
first determine the foreground thread
and attach it to your window,using
AttachThreadInput,then call
SetForegroundWindow. That way they can
share input states.

First I call GetForegroundWindow to
get the handle of the current
foreground window. Then a few calls to
GetWindowThreadProcessId retrieve the
threads associated with the current
foreground window and the window I
want to bring to the foreground. If
these threads are the same a simple
call to SetForegroundWindow is all
that is necessary. Otherwise,the
foreground thread is attached to the
window that I am bringing to the front
and detached from what was the current
foreground window. The
AttachThreadInput API handles this.

内容摘自here
谢谢.

解决方法

我以前用过这个方法
[DllImport("user32.dll")]
    static extern bool SetForegroundWindow(IntPtr hWnd);

    Process[] processes = Process.GetProcessesByName("processname");
    SetForegroundWindow(processes[0].MainWindowHandle);

更多信息:http://pinvoke.net/default.aspx/user32.SetForegroundWindow

猜你在找的C#相关文章