Leo Vo
Leo Vo

Reputation: 10330

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.

Upvotes: 19

Views: 34000

Answers (3)

Hans Passant
Hans Passant

Reputation: 941545

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.

Upvotes: 34

Nayan
Nayan

Reputation: 3214

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.

Upvotes: 0

Lloyd
Lloyd

Reputation: 29668

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.

Upvotes: 0

Related Questions