Michael
Michael

Reputation: 121

Set active window

I'm trying to make an app that gives a quake style drop-down HUD console. I can get it to show and hide the window, but I can't figure out how to set it as the active window after showing it. Im using Win API calls to show and hide the window. I've tried SetForegroundWindow(IntPtr hWnd) and SetFocus(IntPtr hWnd) to no avail. Anyone have any ideas?

http://pastebin.com/DgtJJGiv

public void ShowApp()
{
    IntPtr h = FindWindow(null, "C:\\Windows\\system32\\cmd.exe");
    ShowWindow(h, SW_SHOW);
    //EnableWindow(h, true);
    isHidden = false;
        // set focus to console window

    SetForegroundWindow(h);
    System.Diagnostics.Debug.WriteLine(h);
}

Upvotes: 8

Views: 27202

Answers (4)

Miguel Angelo
Miguel Angelo

Reputation: 24182

Try this (works for me):

public static void ShowApp()
{
    IntPtr h = FindWindow(null, "C:\\Windows\\system32\\cmd.exe");
    ShowWindow(h, ShowWindowCommands.Show);
    SetForegroundWindow(h);
    SetFocus(h);
    System.Diagnostics.Debug.WriteLine(h);
}

Upvotes: 1

Dulini Atapattu
Dulini Atapattu

Reputation: 2735

You may use SetActiveWindow winAPI method. Hope this helps...

Upvotes: 1

Ryan Taylor
Ryan Taylor

Reputation: 71

I found an answer here: How to show form in front in C#

The winAPI approaches were not working correctly for me but this did:

form.TopMost = true;
form.TopMost = false;

I originally was only setting TopMost to true but I ran into problems with dialog boxes displaying behind the form. It appears that setting TopMost to true pulls the form to the front and holds it there. Setting it to false doesn't push it back but does allow other forms to be shown in front. I was still having problems with focus so I ended up going with the following:

form.Activate();

Upvotes: 4

Eben Roux
Eben Roux

Reputation: 13246

Is there any reason why you can't implement your own console window? What I mean is a simple Form with a Textbox set to the correct style. You would probably have more control over how it works than trying to use the 'cmd' process.

Just a thought.

Upvotes: -1

Related Questions