开发者

Find and activate an application's window

Assume that notepad.exe is opening and the it's window is inactive. I will write an application to activate it. How to make?

Update: The window title is undefined. So, I don't like to use to FindWindow which based on window's title.开发者_高级运维

My application is Winform C# 2.0. Thanks.


You'll need to P/invoke SetForegroundWindow(). Process.MainWindowHandle can give you the handle you'll need. For example:

using System;
using System.Diagnostics;
using System.Runtime.InteropServices;

class Program {
    static void Main(string[] args) {
        var prc = Process.GetProcessesByName("notepad");
        if (prc.Length > 0) {
            SetForegroundWindow(prc[0].MainWindowHandle);
        }
    }
    [DllImport("user32.dll")]
    private static extern bool SetForegroundWindow(IntPtr hWnd);
}

Note the ambiguity if you've got more than one copy of Notepad running.


You'd need to PInvoke the Windows API calls such as FindWindow and or EnumWindows and GetWindowText (for the title). Ideally you might also want to use GeWindowThreadProcessId so you can tie it down to the actual process.


You have to use combination of these -

Toggle Process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden at runtime

and

Bring another processes Window to foreground when it has ShowInTaskbar = false

You need to find the class of the window and do a search on it. Read more about it here.

Just for info, Notepad's class name is "Notepad" (without quotes). You can verify it using Spy++.

Note: You cannot activate a window of an app if it was run with no window. Read more options in API here.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜