zoukankan      html  css  js  c++  java
  • 一个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     }
  • 相关阅读:
    iptables防火墙(RHEL6)
    漏洞扫描与网络抓包
    服务安全与监控
    Typecho反序列化漏洞
    python类,魔术方法等学习&&部分ssti常见操作知识点复习加深
    PHAR伪协议&&[CISCN2019 华北赛区 Day1 Web1]Dropbox
    [GXYCTF2019]禁止套娃 1 &无参数RCE
    PHP代码审计学习(1)
    Yii2安装完kartik组件后,使用时报错
    收藏博客
  • 原文地址:https://www.cnblogs.com/wuhenke/p/1711380.html
Copyright © 2011-2022 走看看