源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

c#使用热键实现程序窗口隐藏示例

  • 时间:2020-05-11 19:45 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:c#使用热键实现程序窗口隐藏示例
[u]复制代码[/u] 代码如下:
using System; using System.Text; using System.Collections; using System.Runtime.InteropServices; namespace WindowHider {     /// <summary>     /// Object used to control a Windows Form.     /// </summary>     public class Window     {         /// <summary>         /// Win32 API Imports         /// </summary>         [DllImport("user32.dll")] private static extern              bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);         [DllImport("user32.dll")] private static extern              bool SetForegroundWindow(IntPtr hWnd);         [DllImport("user32.dll")] private static extern              bool IsIconic(IntPtr hWnd);         [DllImport("user32.dll")] private static extern              bool IsZoomed(IntPtr hWnd);         [DllImport("user32.dll")] private static extern              IntPtr GetForegroundWindow();         [DllImport("user32.dll")] private static extern              IntPtr GetWindowThreadProcessId(IntPtr hWnd, IntPtr ProcessId);         [DllImport("user32.dll")] private static extern              IntPtr AttachThreadInput(IntPtr idAttach, IntPtr idAttachTo, int fAttach);         /// <summary>         /// Win32 API Constants for ShowWindowAsync()         /// </summary>         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;         /// <summary>         /// Private Fields         /// </summary>         private IntPtr m_hWnd;         private string m_Title;         private bool m_Visible = true;         private string m_Process;         private bool m_WasMax = false;         /// <summary>         /// Window Object's Public Properties         /// </summary>         public IntPtr hWnd         {             get{return m_hWnd;}         }         public string Title         {             get{return m_Title;}         }         public string Process         {             get{return m_Process;}         }         /// <summary>         /// Sets this Window Object's visibility         /// </summary>         public bool Visible         {             get{return m_Visible;}             set             {                 //show the window                 if(value == true)                 {                     if(m_WasMax)                     {                         if(ShowWindowAsync(m_hWnd,SW_SHOWMAXIMIZED))                             m_Visible = true;                     }                     else                     {                         if(ShowWindowAsync(m_hWnd,SW_SHOWNORMAL))                             m_Visible = true;                     }                 }                 //hide the window                 if(value == false)                 {                     m_WasMax = IsZoomed(m_hWnd);                     if(ShowWindowAsync(m_hWnd,SW_HIDE))                         m_Visible = false;                 }             }         }         /// <summary>         /// Constructs a Window Object         /// </summary>         /// <param name="Title">Title Caption</param>         /// <param name="hWnd">Handle</param>         /// <param name="Process">Owning Process</param>         public Window(string Title, IntPtr hWnd, string Process)         {             m_Title = Title;             m_hWnd = hWnd;             m_Process = Process;         }         //Override ToString()          public override string ToString()         {             //return the title if it has one, if not return the process name             if (m_Title.Length > 0)             {                 return m_Title;             }             else             {                 return m_Process;             }         }         /// <summary>         /// Sets focus to this Window Object         /// </summary>         public void Activate()         {             if(m_hWnd == GetForegroundWindow())                 return;             IntPtr ThreadID1 = GetWindowThreadProcessId(GetForegroundWindow(),                                                         IntPtr.Zero);             IntPtr ThreadID2 = GetWindowThreadProcessId(m_hWnd,IntPtr.Zero);             if (ThreadID1 != ThreadID2)             {                 AttachThreadInput(ThreadID1,ThreadID2,1);                 SetForegroundWindow(m_hWnd);                 AttachThreadInput(ThreadID1,ThreadID2,0);             }             else             {                 SetForegroundWindow(m_hWnd);             }             if (IsIconic(m_hWnd))             {                 ShowWindowAsync(m_hWnd,SW_RESTORE);             }             else             {                 ShowWindowAsync(m_hWnd,SW_SHOWNORMAL);             }         }     }     /// <summary>     /// Collection used to enumerate Window Objects     /// </summary>     public class Windows : IEnumerable, IEnumerator     {         /// <summary>         /// Win32 API Imports         /// </summary>         [DllImport("user32.dll")] private static extern                int GetWindowText(int hWnd, StringBuilder title, int size);         [DllImport("user32.dll")] private static extern                int GetWindowModuleFileName(int hWnd, StringBuilder title, int size);         [DllImport("user32.dll")] private static extern                int EnumWindows(EnumWindowsProc ewp, int lParam);          [DllImport("user32.dll")] private static extern                bool IsWindowVisible(int hWnd);         //delegate used for EnumWindows() callback function         public delegate bool EnumWindowsProc(int hWnd, int lParam);         private int m_Position = -1; // holds current index of wndArray,                                       // necessary for IEnumerable         ArrayList wndArray = new ArrayList(); //array of windows         //Object's private fields         private bool m_invisible = false;         private bool m_notitle = false;         /// <summary>         /// Collection Constructor with additional options         /// </summary>         /// <param name="Invisible">Include invisible Windows</param>         /// <param name="Untitled">Include untitled Windows</param>         public Windows(bool Invisible, bool Untitled)         {             m_invisible = Invisible;             m_notitle = Untitled;             //Declare a callback delegate for EnumWindows() API call             EnumWindowsProc ewp = new EnumWindowsProc(EvalWindow);             //Enumerate all Windows             EnumWindows(ewp, 0);         }         /// <summary>         /// Collection Constructor         /// </summary>         public Windows()         {             //Declare a callback delegate for EnumWindows() API call             EnumWindowsProc ewp = new EnumWindowsProc(EvalWindow);             //Enumerate all Windows             EnumWindows(ewp, 0);         }         //EnumWindows CALLBACK function         private bool EvalWindow(int hWnd, int lParam)         {             if (m_invisible == false && !IsWindowVisible(hWnd))                 return(true);             StringBuilder title = new StringBuilder(256);             StringBuilder module = new StringBuilder(256);             GetWindowModuleFileName(hWnd, module, 256);             GetWindowText(hWnd, title, 256);             if (m_notitle == false && title.Length == 0)                 return(true);             wndArray.Add(new Window(title.ToString(), (IntPtr)hWnd,                                      module.ToString()));             return(true);         }         //implement IEnumerable         public IEnumerator GetEnumerator()         {             return (IEnumerator)this;         }         //implement IEnumerator         public bool MoveNext()         {             m_Position++;             if (m_Position < wndArray.Count) { return true; } else { return false; } } public void Reset() { m_Position = -1; } public object Current { get { return wndArray[m_Position]; } } } }
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部