Question

I can't figure out why it is not working ?

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

    // Activate the first application we find with this name
    if (p.Any()) SetForegroundWindow(p[0].MainWindowHandle);
    else
    {
        Console.WriteLine("Something wrong");
    }
}


    [STAThread]
    static void Main(string[] args)
    {
        ActivateApp("Acrobat.exe");
    }

Output :

Something is wrong

But I'm sure that Acrobat.exe exist.

Was it helpful?

Solution

There are some weird rules for whether SetForegroundWindow() will actually work.

At least one of the following must be true:

  • The process is the foreground process.
  • The process was started by the foreground process.
  • The process received the last input event.
  • There is no foreground process.
  • The foreground process is being debugged.
  • The foreground is not locked.
  • The foreground lock time-out has expired (see SPI_GETFOREGROUNDLOCKTIMEOUT in SystemParametersInfo).
  • No menus are active.

Is this the case?

See the MSDN documentation for full details.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top