zoukankan      html  css  js  c++  java
  • 检测某个程序是否已经运行,如果运行就切换到该程序界面

    检测某个程序是否已经运行,如果运行就切换到该程序界面。
    以下代码还存在一个问题,程序最小化之后就不能恢复了

    /// 该函数设置由不同线程产生的窗口的显示状态  
            /// </summary>  
            /// <param name="hWnd">窗口句柄</param>  
            /// <param name="cmdShow">指定窗口如何显示。查看允许值列表,请查阅ShowWlndow函数的说明部分</param>  
            /// <returns>如果函数原来可见,返回值为非零;如果函数原来被隐藏,返回值为零</returns>  
            [DllImport("User32.dll")]
            private static extern bool ShowWindowAsync(IntPtr hWnd, int cmdShow);
            /// <summary>  
            ///  该函数将创建指定窗口的线程设置到前台,并且激活该窗口。键盘输入转向该窗口,并为用户改各种可视的记号。  
            ///  系统给创建前台窗口的线程分配的权限稍高于其他线程。   
            /// </summary>  
            /// <param name="hWnd">将被激活并被调入前台的窗口句柄</param>  
            /// <returns>如果窗口设入了前台,返回值为非零;如果窗口未被设入前台,返回值为零</returns>  
            [DllImport("User32.dll")]
            private static extern bool SetForegroundWindow(IntPtr hWnd);
            /// 窗口是否已最小化        
           [System.Runtime.InteropServices.DllImport("User32.dll")]   
            private static extern bool IsIconic(IntPtr hWnd);
           [System.Runtime.InteropServices.DllImport("User32.dll")]
           private static extern bool OpenIcon(IntPtr hWnd);

           //相关常量        
            private const int SW_HIDE = 0;             //隐藏窗口,活动状态给另一个窗口       
            private const int SW_SHOWNORMAL = 1;       //用原来的大小和位置显示一个窗口,同时令其进入活动状态  
            private const int SW_SHOWMINIMIZED = 2;    //最小化窗口,并将其激活       
            private const int SW_SHOWMAXIMIZED = 3;    //最大化窗口,并将其激活      
            private const int SW_SHOWNOACTIVATE = 4;   //用最近的大小和位置显示一个窗口,同时不改变活动窗口      
            private const int SW_RESTORE = 9;          //用原来的大小和位置显示一个窗口,同时令其进入活动状态          
            private const int SW_SHOWDEFAULT = 10;     //根据默认 创建窗口时的样式 来显示  
            private static void HandleRunningInstance(Process instance)
            {
                IntPtr hWnd = instance.MainWindowHandle;
                bool isIcon = IsIconic(hWnd);             // 窗口是否已最小化       
                if (isIcon)           
                {             
                    // 还原窗口           
                    ShowWindowAsync(hWnd, SW_RESTORE);  
                }          
                else        
                {
                    OpenIcon(hWnd);
                    //如果期望窗口显示为Normal模式,可先做如下设置      
                    ShowWindowAsync(hWnd, 10);      
                    // 将窗口设为前台窗口             
                    SetForegroundWindow(hWnd);       
                }
            }

            private void btn_Click(object sender, EventArgs e)
            {
                Process process = IsProcessStarted("F");
                if (process != null)
                {
                    HandleRunningInstance(process);
                   // System.Environment.Exit(1);
                }
                else
                {
                    string tempPath = AppDomain.CurrentDomain.SetupInformation.ApplicationBase + "F.exe";
                    if (File.Exists(tempPath))
                    {
                        System.Diagnostics.Process.Start(tempPath);
                    }
                    else
                    {
                        MessageBox.Show("未找到程序", "提示信息");
                    }
                }
            }

            private Process IsProcessStarted(string processName)
            {
                Process[] temp = Process.GetProcessesByName(processName);
                if (temp.Length > 0)
                {
                    return temp[0];
                }
                else
                    return null;
            }

  • 相关阅读:
    BZOJ 2119: 股市的预测(后缀数组+rmq)
    2018.12.26 考试(哈希,二分,状压dp)
    ural 1297. Palindrome(后缀数组+rmq)
    URAL 1996. Cipher Message 3(KMP+fft)
    2019.4.11 一题 XSY 1551 ——广义后缀数组(trie上后缀数组)
    bzoj 2553 [BeiJing2011]禁忌——AC自动机+概率DP+矩阵
    洛谷 5291 [十二省联考2019]希望(52分)——思路+树形DP
    LOJ 2587 「APIO2018」铁人两项——圆方树
    洛谷 5289 [十二省联考2019]皮配——分开决策的动态规划
    洛谷 5284 [十二省联考2019]字符串问题——后缀数组+线段树优化连边+真实字典序排序思路
  • 原文地址:https://www.cnblogs.com/guodongsky/p/2995249.html
Copyright © 2011-2022 走看看