亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C#實現老板鍵功能的代碼

2020-01-24 01:50:40
字體:
來源:轉載
供稿:網友

C#設置熱鍵隱藏指定窗口的代碼

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];}}}}

再給大家分享一個其他網友的方法,也非常不錯,詳情請看注釋。

using System;using System.Collections.Generic;using System.Runtime.InteropServices;using System.Windows.Forms;namespace drmaple{  class HotKey  {    //如果函數執行成功,返回值不為0。    //如果函數執行失敗,返回值為0。要得到擴展錯誤信息,調用GetLastError。    [DllImport("user32.dll", SetLastError = true)]    public static extern bool RegisterHotKey(            IntPtr hWnd,        //要定義熱鍵的窗口的句柄      int id,           //定義熱鍵ID(不能與其它ID重復)      KeyModifiers fsModifiers,  //標識熱鍵是否在按Alt、Ctrl、Shift、Windows等鍵時才會生效      Keys vk           //定義熱鍵的內容      );    [DllImport("user32.dll", SetLastError = true)]    public static extern bool UnregisterHotKey(      IntPtr hWnd,        //要取消熱鍵的窗口的句柄      int id           //要取消熱鍵的ID      );    //定義了輔助鍵的名稱(將數字轉變為字符以便于記憶,也可去除此枚舉而直接使用數值)    [Flags()]    public enum KeyModifiers    {      None = 0,      Alt = 1,      Ctrl = 2,      Shift = 4,      WindowsKey = 8    }  }}//簡單說明一下://“public static extern bool RegisterHotKey()”這個函數用于注冊熱鍵。由于這個函數需要引用user32.dll動態鏈接庫后才能使用,并且//user32.dll是非托管代碼,不能用命名空間的方式直接引用,所以需要用“DllImport”進行引入后才能使用。于是在函數前面需要加上//“[DllImport("user32.dll", SetLastError = true)]”這行語句。//“public static extern bool UnregisterHotKey()”這個函數用于注銷熱鍵,同理也需要用DllImport引用user32.dll后才能使用。//“public enum KeyModifiers{}”定義了一組枚舉,將輔助鍵的數字代碼直接表示為文字,以方便使用。這樣在調用時我們不必記住每一個輔//助鍵的代碼而只需直接選擇其名稱即可。//(2)以窗體FormA為例,介紹HotKey類的使用//在FormA的Activate事件中注冊熱鍵,本例中注冊Shift+S,Ctrl+Z,Alt+D這三個熱鍵。這里的Id號可任意設置,但要保證不被重復。private void Form_Activated(object sender, EventArgs e){  //注冊熱鍵Shift+S,Id號為100。HotKey.KeyModifiers.Shift也可以直接使用數字4來表示。  HotKey.RegisterHotKey(Handle, 100, HotKey.KeyModifiers.Shift, Keys.S);   //注冊熱鍵Ctrl+B,Id號為101。HotKey.KeyModifiers.Ctrl也可以直接使用數字2來表示。  HotKey.RegisterHotKey(Handle, 101, HotKey.KeyModifiers.Ctrl, Keys.B);  //注冊熱鍵Alt+D,Id號為102。HotKey.KeyModifiers.Alt也可以直接使用數字1來表示。  HotKey.RegisterHotKey(Handle, 102, HotKey.KeyModifiers.Alt, Keys.D);}//在FormA的Leave事件中注銷熱鍵。private void FrmSale_Leave(object sender, EventArgs e){  //注銷Id號為100的熱鍵設定  HotKey.UnregisterHotKey(Handle, 100);  //注銷Id號為101的熱鍵設定  HotKey.UnregisterHotKey(Handle, 101);  //注銷Id號為102的熱鍵設定  HotKey.UnregisterHotKey(Handle, 102);}重載FromA中的WndProc函數/// /// 監視Windows消息/// 重載WndProc方法,用于實現熱鍵響應/// /// protected override void WndProc(ref Message m){  const int WM_HOTKEY = 0x0312;  //按快捷鍵   switch (m.Msg)  {    case WM_HOTKEY:      switch (m.WParam.ToInt32())      {        case 100:  //按下的是Shift+S          //此處填寫快捷鍵響應代碼           break;        case 101:  //按下的是Ctrl+B          //此處填寫快捷鍵響應代碼          break;        case 102:  //按下的是Alt+D          //此處填寫快捷鍵響應代碼          break;      }    break;  }  base.WndProc(ref m);}

以上所述就是本文的全部內容了,希望對大家學習C#能夠有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲а∨天堂久久精品9966| 久久久在线视频| 91高清视频在线免费观看| 日韩久久精品成人| 国产精品成久久久久三级| 亚洲成人三级在线| 91亚洲va在线va天堂va国| 精品自拍视频在线观看| 亚洲一区二区三区在线免费观看| 久久久久久久久国产精品| 国产欧美日韩专区发布| 日本精品久久电影| 亚洲区免费影片| 欧美日韩免费观看中文| 国产精品主播视频| 日本成人免费在线| 青青久久av北条麻妃黑人| 日本人成精品视频在线| 日韩av中文在线| 日韩欧亚中文在线| 国产主播精品在线| 91av免费观看91av精品在线| 欧美在线观看网址综合| 久久久午夜视频| 久久久伊人欧美| 欧美精品福利视频| 亚洲午夜未删减在线观看| 成人免费大片黄在线播放| 一本色道久久88亚洲综合88| 亚洲最大福利网站| 久久久亚洲精选| 免费不卡欧美自拍视频| 136fldh精品导航福利| 精品久久久久久久久久久久久| 亚洲日本欧美中文幕| 久久久久亚洲精品成人网小说| 91精品久久久久久久久久入口| 欧美野外猛男的大粗鳮| 亚洲网站在线播放| 最新中文字幕亚洲| 亚洲视频在线观看视频| 精品国产欧美一区二区三区成人| 亚洲成人免费网站| 日韩视频免费大全中文字幕| 亚洲精品xxx| 精品久久国产精品| 日韩欧美国产免费播放| 欧美午夜丰满在线18影院| 亚洲欧美激情精品一区二区| 欧洲成人性视频| 国产精品久久久999| 26uuu另类亚洲欧美日本一| 青青草原一区二区| 成人激情视频免费在线| 久久99精品久久久久久噜噜| 日韩精品福利网站| 午夜精品久久久久久久白皮肤| 日韩欧美aⅴ综合网站发布| 国产成人精品一区二区| 亚洲人成毛片在线播放| 欧美日韩一区二区免费视频| 大胆欧美人体视频| www.日韩欧美| 欧美日韩xxx| 日韩中文字幕国产| 精品自拍视频在线观看| 国产色综合天天综合网| 日韩免费在线视频| 亚洲欧美精品中文字幕在线| 日韩中文字幕视频| 国产精品99久久久久久久久| 日韩av在线高清| 日韩电影免费观看中文字幕| 国内免费精品永久在线视频| 欧美在线欧美在线| 亚洲自拍另类欧美丝袜| 亚洲欧美激情四射在线日| 亚洲一区二区三区四区在线播放| 亚洲人成77777在线观看网| 中文字幕av一区| 国产精品一区电影| 亚洲香蕉成视频在线观看| 国产成人亚洲综合91| 国产www精品| 国产91av在线| 欧美精品在线观看91| 国模gogo一区二区大胆私拍| 色综合天天综合网国产成人网| 国产精品国产三级国产aⅴ浪潮| 久久伊人免费视频| 亚洲一区二区三区成人在线视频精品| 国产精品一二三视频| 亚洲精品mp4| 亚洲女同精品视频| 久久97精品久久久久久久不卡| 国产一区二中文字幕在线看| 清纯唯美亚洲激情| 久久精品夜夜夜夜夜久久| 成人网在线视频| 亚洲午夜精品视频| 亚洲国产天堂久久综合网| 久久久久久久电影一区| 午夜精品美女自拍福到在线| 精品久久香蕉国产线看观看gif| 欧美精品免费看| 久久久久久亚洲精品| 国产ts一区二区| 国产91在线播放| 久久国产精品视频| 97超碰色婷婷| 国产a∨精品一区二区三区不卡| 91国偷自产一区二区三区的观看方式| 最近2019中文免费高清视频观看www99| 91精品在线观| 国产精品国产自产拍高清av水多| 国产精品亚洲аv天堂网| 欧美激情亚洲国产| 久久久av电影| 国产成人一区二区三区| 在线视频亚洲欧美| 国产精品网站视频| 久久久女女女女999久久| 91牛牛免费视频| 欧美日韩国产色| 国自在线精品视频| 久久天天躁狠狠躁老女人| 亚洲欧美日韩网| 色综合视频一区中文字幕| 中文国产亚洲喷潮| 久久久人成影片一区二区三区| 日韩精品在线视频观看| 久久精品国产久精国产思思| 亚洲美女精品成人在线视频| 国产亚洲欧美日韩美女| 91chinesevideo永久地址| 久久在线视频在线| 国产精品一区久久| 成人av在线网址| 国语对白做受69| 午夜伦理精品一区| 欧美日韩国产精品一区二区三区四区| 亚洲欧美中文另类| 久久网福利资源网站| 久久久久成人精品| 国产三级精品网站| 亚洲欧美另类国产| 国产一区二区三区欧美| 国产美女久久久| 久久久成人精品视频| 精品国产视频在线| 国产精品极品在线| 亚洲天堂一区二区三区| 国产成人拍精品视频午夜网站| 91沈先生在线观看| 久久伊人91精品综合网站| 日韩精品亚洲元码| 日韩中文字幕视频| 亚洲激情在线观看视频免费| 亚洲开心激情网| 一区二区三区四区精品| 日韩电影免费观看中文字幕| 午夜精品蜜臀一区二区三区免费| 国模视频一区二区三区| 欧亚精品中文字幕|