SetForegroundWindow 没有激活我的窗口
Posted
技术标签:
【中文标题】SetForegroundWindow 没有激活我的窗口【英文标题】:SetForegroundWindow does not activate my window 【发布时间】:2013-04-11 08:39:12 【问题描述】:我不知道为什么它不起作用?
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");
输出:
出了点问题
但我确定 Acrobat.exe 存在。
【问题讨论】:
将Acrobat.exe
更改为 Acrobat
。
它不工作是什么意思?例外?控制台中的“有问题”?请详细说明。
谢谢@ByteBlast,jordanhill123,是的,“出了点问题”,现在它消失了,但我的窗口仍然不会出现,也许我错了,但这种方法应该将所选进程的 Windows 放在所有其他 Windows 的顶部,对吗?
你的意思是,它现在没有说“Something wrong”,但窗口仍然不会转到前台? (当我认为 ByteBlast 有正确答案时,我刚刚取消了我在下面删除的答案)
哦,刚看到,Matthew Watson的回答,我觉得我错了,要不要删除这个问题?
【参考方案1】:
SetForegroundWindow()
是否真的有效有一些奇怪的规则。
以下至少一项必须为真:
该进程是前台进程。 进程由前台进程启动。 进程收到最后一个输入事件。 没有前台进程。 正在调试前台进程。 前景未锁定。 前台锁定超时已过期(请参阅 SystemParametersInfo 中的 SPI_GETFOREGROUNDLOCKTIMEOUT)。 没有处于活动状态的菜单。是这样吗?
详情请参阅the MSDN documentation。
【讨论】:
以上是关于SetForegroundWindow 没有激活我的窗口的主要内容,如果未能解决你的问题,请参考以下文章
将后台窗口激活到前台的方法(使用AttachThreadInput和SetForegroundWindow两个API)
SetForegroundWindow 在对话框窗口中使用时不起作用