• 一个Win32 API实例类(代码收集)


      最近看到别人代码中一个很好的功能类,该类是一个Win32 API实例类,该类功能包括:同一程序禁止启动多次;获取任意窗体;恢复窗体状态;设置窗体焦点等。

    该类很实用,与大家分享一下:

      

     1     /// Summary description for ProcessUtils.
     2     public static class ProcessUtils
     3     {
     4         private static Mutex mutex = null;
     5 
     6         /// Determine if the current process is already running
     7         public static bool ThisProcessIsAlreadyRunning()
     8         {
     9             // Only want to call this method once, at startup.
    10             Debug.Assert(mutex == null);
    11 
    12             // createdNew needs to be false in .Net 2.0, otherwise, if another instance of
    13             // this program is running, the Mutex constructor will block, and then throw 
    14             // an exception if the other instance is shut down.
    15             bool createdNew = false;
    16 
    17             mutex = new Mutex(false, Application.ProductName, out createdNew);
    18 
    19             Debug.Assert(mutex != null);
    20 
    21             return !createdNew;
    22         }
    23 
    24         [DllImport("user32.dll", SetLastError = true)]
    25         static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
    26 
    27         [DllImport("user32.dll")]
    28         [return: MarshalAs(UnmanagedType.Bool)]
    29         static extern bool SetForegroundWindow(IntPtr hWnd);
    30 
    31         [DllImport("user32.dll")]
    32         static extern bool IsIconic(IntPtr hWnd);
    33 
    34         [DllImport("user32.dll")]
    35         static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
    36 
    37         const int SW_RESTORE = 9;
    38 
    39         [DllImport("user32.dll")]
    40         static extern IntPtr GetLastActivePopup(IntPtr hWnd);
    41 
    42         [DllImport("user32.dll")]
    43         static extern bool IsWindowEnabled(IntPtr hWnd);
    44 
    45         /// Set focus to the previous instance of the specified program.
    46         public static void SetFocusToPreviousInstance(string windowCaption)
    47         {
    48             // Look for previous instance of this program.
    49             IntPtr hWnd = FindWindow(null, windowCaption);
    50 
    51             // If a previous instance of this program was found...
    52             if (hWnd != null)
    53             {
    54                 // Is it displaying a popup window?
    55                 IntPtr hPopupWnd = GetLastActivePopup(hWnd);
    56 
    57                 // If so, set focus to the popup window. Otherwise set focus
    58                 // to the program's main window.
    59                 if (hPopupWnd != null && IsWindowEnabled(hPopupWnd))
    60                 {
    61                     hWnd = hPopupWnd;
    62                 }
    63 
    64                 SetForegroundWindow(hWnd);
    65 
    66                 // If program is minimized, restore it.
    67                 if (IsIconic(hWnd))
    68                 {
    69                     ShowWindow(hWnd, SW_RESTORE);
    70                 }
    71             }
    72         }
    73     }
  • 相关阅读:
    [Flink] 从 RabbitMQ 读取并计算后输出到 MySQL
    极光笔记丨搭建UMS私有云文件服务器
    极光笔记丨Spark SQL 在极光的建设实践
    Iog4j2漏洞相关技术分析
    极光笔记丨关于数据大屏一比一还原设计稿这件事
    极光笔记|基于CMPP协议集成短信测试桩全流程实践分享
    极光笔记|数据服务平台一期建设
    【记录】GIT常用命令
    【原创】使用micrel的千兆PHY芯片ksz9021GN和KSZ9021GQ前要注意
    【记录】调试千兆以太网PHY芯片DP83865的痛苦经历
  • 原文地址:https://www.cnblogs.com/wuhenke/p/1711380.html
Copyright © 2020-2023  润新知