问题
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.
回答1:
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.
来源:https://stackoverflow.com/questions/16079440/setforegroundwindow-does-not-activate-my-window