随笔 - 120  文章 - 0  评论 - 27  阅读 - 80816

Delphi-ShowWindow显示已经打开窗体

一、查找程序是否已经启动代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
program FastTest;
uses
    Forms,
    Windows,
    Main in 'Main\Main.pas' {FrmMain},
    Welcome in 'Main\Welcome.pas' {FrmWelcome},
    Common in 'Common\Common.pas',
    Login in 'Login.pas' {frmLogin};
 
{$R *.res}
 
var
    Found: HWND;
begin
    Found := FindWindow(nil, PChar(Common.ApplicationTitle)); //查找窗口
    if Found <> 0 then
    begin
        //若找到则激活已运行的程序并结束自身
        ShowWindow(Found, SW_RESTORE);
        Exit;
    end;
    Application.Initialize;
    Application.CreateForm(TfrmLogin, frmLogin);
    Application.Run;
end.

二、ShowWindow函数说明

  [DllImport("user32.dll", EntryPoint = "ShowWindow", CharSet = CharSet.Auto)]
        public static extern int ShowWindow(IntPtr hwnd, int nCmdShow);
函数功能:该函数设置指定窗口的显示状态。
    参数:
    hWnd:窗口句柄。
    nCmdShow:指定窗口如何显示。如果发送应用程序的程序提供了STARTUPINFO结构,则应用程序第一次调用ShowWindow时该参数被忽略。否则,在第一次调用ShowWindow函数时,该值应为在函数WinMain中nCmdShow参数。在随后的调用中,该参数可以为下列值之一:
    SW_FORCEMINIMIZE:在WindowNT5.0中最小化窗口,即使拥有窗口的线程被挂起也会最小化。在从其他线程最小化窗口时才使用这个参数。
    SW_MIOE:隐藏窗口并激活其他窗口。
    SW_MAXIMIZE:最大化指定的窗口。
    SW_MINIMIZE:最小化指定的窗口并且激活在Z序中的下一个顶层窗口。
    SW_RESTORE:激活并显示窗口。如果窗口最小化或最大化,则系统将窗口恢复到原来的尺寸和位置。在恢复最小化窗口时,应用程序应该指定这个标志。
    SW_SHOW:在窗口原来的位置以原来的尺寸激活和显示窗口。
    SW_SHOWDEFAULT:依据在STARTUPINFO结构中指定的SW_FLAG标志设定显示状态,STARTUPINFO 结构是由启动应用程序的程序传递给CreateProcess函数的。
    SW_SHOWMAXIMIZED:激活窗口并将其最大化。
    SW_SHOWMINIMIZED:激活窗口并将其最小化。
    SW_SHOWMINNOACTIVATE:窗口最小化,激活窗口仍然维持激活状态。
    SW_SHOWNA:以窗口原来的状态显示窗口。激活窗口仍然维持激活状态。
    SW_SHOWNOACTIVATE:以窗口最近一次的大小和状态显示窗口。激活窗口仍然维持激活状态。
    SW_SHOWNOMAL:激活并显示一个窗口。如果窗口被最小化或最大化,系统将其恢复到原来的尺寸和大小。应用程序在第一次显示窗口的时候应该指定此标志。
    返回值:如果窗口以前可见,则返回值为非零。如果窗口以前被隐藏,则返回值为零。
    备注:应用程序第一次调用ShowWindow时,应该使用WinMain函数的nCmdshow参数作为它的nCmdShow参数。在随后调用ShowWindow函数时,必须使用列表中的一个给定值,而不是由WinMain函数的nCmdSHow参数指定的值。
Public Const SW_HIDE = 0
Public Const SW_SHOWNORMAL = 1
Public Const SW_SHOWMINIMIZED = 2
Public Const SW_SHOWMAXIMIZED = 3
Public Const SW_MAXIMIZE = 3
Public Const SW_SHOWNOACTIVATE = 4
Public Const SW_SHOW = 5
Public Const SW_MINIMIZE = 6
Public Const SW_SHOWMINNOACTIVE = 7
Public Const SW_SHOWNA = 8
Public Const SW_RESTORE = 9

编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义

点击右上角即可分享
微信分享提示