Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

FindWindow and SetForegroundWindow alternatives?

Tags:

c#

.net

process

I am searching for alternatives to the old User32.dll version of switching to a different application with FindWindow() and SetForegroundWindow().

I did find an alternative to the first with the usage of Process.GetProcessesByName() but I do not see the corresponding method to switch (set active/foreground) to that application.

Is there a way of doing that without using the old way with the User32.dll?

Thank you for your help.

EDIT

I accepted the answer of @Sorceri although it is not the answer I was looking for.

like image 749
fdomig Avatar asked Jul 16 '12 20:07

fdomig


3 Answers

Answer: No.

But, to help the next wonderer looking to find a window and activate it from C# here's what you have to do:

[DllImport("user32.dll")]
static extern bool SetForegroundWindow(IntPtr hWnd);

void ActivateApp(string processName)
{
    Process[] p = Process.GetProcessesByName(processName);

    // Activate the first application we find with this name
    if (p.Count() > 0)
        SetForegroundWindow(p[0].MainWindowHandle);
}

To bring notepad to the front, for example, you would call:

ActivateApp("notepad");

As a side note - for those of you who are trying to bring a window within your application to the foreground just call the Activate() method.

like image 83
noelicus Avatar answered Nov 12 '22 19:11

noelicus


You could use SetActiveWindow as an alternative to SetForeGroundWindow. I'd say you should go through all the Windows Manipulation Api Functions and see if there's something you're missing out.

Also, note that you can obtain the handle of the System.Diagnostics.Process object via the Process.Handle property.

like image 3
Chibueze Opata Avatar answered Nov 12 '22 19:11

Chibueze Opata


An alternative to SetForeGroundWindow is VisualBasic's AppActivate

Call it like this

Microsoft.VisualBasic.Interaction.AppActivate("WindowTitle")

Just because it is in the VisualBasic namespace doesn't mean you can't use it in C#.

Full Documentation here

like image 3
Mark Arnott Avatar answered Nov 12 '22 19:11

Mark Arnott