本文主要介绍Win32程序启动时如何激活上一个启动程序的窗口,具有一定的参考价值。有兴趣的朋友可以参考一下。希望你看完这篇文章后收获很大。让桂哥网络带你去了解一下。
UWP计划是与生俱来的。当然,新的API (10.0.17134)也提供了多实例功能。然而,传统的Win32程序一定要自己控制单个实例。
激活之前进程的窗口
我们可以通过进程名称找到先前启动的进程实例,如果找到,激活它的窗口。
[STAThread]
staticvoidMain(字符串[]参数)
{
varcurrent=进程。GetCurrentProcess();
varprocess=Process。GetProcessesByName(当前。ProcessName)。FirstOrDefault(x=x.Id!=当前。id);
if(process!=null)
{
varhwnd=进程。MainWindowHandle
ShowWindow(hwnd,9);
返回;
}
//启动自己的主窗口。这部分代码省略了。
}
[DllImport('user32.dll')]
privatesticexternintshowwindow(IntPtrhwnd,uintnCmdShow);你一定认为9很奇怪,它是许多不同nCmdShow的值:
藏
使.减少(或缩小)到最小量
达到最大值
恢复
此外,找到的窗口此时可能不活动。例如,在Windows 10中,此窗口可能在另一个桌面上。然后我们需要添加额外的代码来显示它。
在前一个显示窗口之后,再次调用SetForegroundWindow将其激活到前面。如果它在另一个桌面上,它会切换到相应的桌面。
[DllImport('USER32。DLL')]
publicationstatexternboolsetforegroundwindow(IntPtrhWnd);
varhwnd=进程。MainWindowHandle
ShowWindow(hwnd,9);
SetForegroundWindow(hwnd);找到并激活窗口
以上方法适用于普通主窗口。但是,当窗口不是流程的主窗口,或者ShowInTaskBar设置为false时,就不会生效(此时窗口句柄会发生变化)。
因此,我们需要通过其他方式找到窗口。
[STAThread]
staticvoidMain(字符串[]参数)
{
Varhwnd=FindWindow(null,“该窗口的标题栏文本”);
if(hwnd!=IntPtr。零)
{
ShowWindow(hwnd,9);
返回;
}
//启动自己的主窗口。这部分代码省略了。
}
[DllImport('user32.dll ',CharSet=CharSet。Unicode)]
publicationstatexternintptrfindwindow(stringlpClassName,stringpwindowname);感谢您仔细阅读本文。希望桂哥网络分享的文章《Win32程序启动时如何激活上一个启动程序的窗口》对大家有所帮助。也希望大家支持桂哥网络,关注桂哥网络,更多相关知识等着你去学习!
TikTok千粉号购买平台:https://tiktokusername.com/
TOP