最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#實(shí)現(xiàn)老板鍵功能的代碼

 更新時(shí)間:2015年05月18日 09:34:32   投稿:hebedich  
最近在做項(xiàng)目中遇到需要增加個(gè)老板鍵功能,找一慣的方式,開始從網(wǎng)絡(luò)下手尋找: 關(guān)鍵字類似”C# 老板鍵“,一搜,一堆又一堆,然而出來的代碼大多數(shù)都不是太合適,下面給大家分享下自己的解決方案已經(jīng)一個(gè)網(wǎng)友的解決方案,有需要的小伙伴可以參考下。

C#設(shè)置熱鍵隱藏指定窗口的代碼

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

再給大家分享一個(gè)其他網(wǎng)友的方法,也非常不錯(cuò),詳情請(qǐng)看注釋。

using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Windows.Forms;
namespace drmaple
{
  class HotKey
  {
    //如果函數(shù)執(zhí)行成功,返回值不為0。
    //如果函數(shù)執(zhí)行失敗,返回值為0。要得到擴(kuò)展錯(cuò)誤信息,調(diào)用GetLastError。
    [DllImport("user32.dll", SetLastError = true)]
    public static extern bool RegisterHotKey(
            IntPtr hWnd,        //要定義熱鍵的窗口的句柄
      int id,           //定義熱鍵ID(不能與其它ID重復(fù))
      KeyModifiers fsModifiers,  //標(biāo)識(shí)熱鍵是否在按Alt、Ctrl、Shift、Windows等鍵時(shí)才會(huì)生效
      Keys vk           //定義熱鍵的內(nèi)容
      );
    [DllImport("user32.dll", SetLastError = true)]
    public static extern bool UnregisterHotKey(
      IntPtr hWnd,        //要取消熱鍵的窗口的句柄
      int id           //要取消熱鍵的ID
      );
    //定義了輔助鍵的名稱(將數(shù)字轉(zhuǎn)變?yōu)樽址员阌谟洃?,也可去除此枚舉而直接使用數(shù)值)
    [Flags()]
    public enum KeyModifiers
    {
      None = 0,
      Alt = 1,
      Ctrl = 2,
      Shift = 4,
      WindowsKey = 8
    }
  }
}
//簡單說明一下:
//“public static extern bool RegisterHotKey()”這個(gè)函數(shù)用于注冊(cè)熱鍵。由于這個(gè)函數(shù)需要引用user32.dll動(dòng)態(tài)鏈接庫后才能使用,并且
//user32.dll是非托管代碼,不能用命名空間的方式直接引用,所以需要用“DllImport”進(jìn)行引入后才能使用。于是在函數(shù)前面需要加上
//“[DllImport("user32.dll", SetLastError = true)]”這行語句。
//“public static extern bool UnregisterHotKey()”這個(gè)函數(shù)用于注銷熱鍵,同理也需要用DllImport引用user32.dll后才能使用。
//“public enum KeyModifiers{}”定義了一組枚舉,將輔助鍵的數(shù)字代碼直接表示為文字,以方便使用。這樣在調(diào)用時(shí)我們不必記住每一個(gè)輔
//助鍵的代碼而只需直接選擇其名稱即可。
//(2)以窗體FormA為例,介紹HotKey類的使用
//在FormA的Activate事件中注冊(cè)熱鍵,本例中注冊(cè)Shift+S,Ctrl+Z,Alt+D這三個(gè)熱鍵。這里的Id號(hào)可任意設(shè)置,但要保證不被重復(fù)。

private void Form_Activated(object sender, EventArgs e)
{
  //注冊(cè)熱鍵Shift+S,Id號(hào)為100。HotKey.KeyModifiers.Shift也可以直接使用數(shù)字4來表示。
  HotKey.RegisterHotKey(Handle, 100, HotKey.KeyModifiers.Shift, Keys.S); 
  //注冊(cè)熱鍵Ctrl+B,Id號(hào)為101。HotKey.KeyModifiers.Ctrl也可以直接使用數(shù)字2來表示。
  HotKey.RegisterHotKey(Handle, 101, HotKey.KeyModifiers.Ctrl, Keys.B);
  //注冊(cè)熱鍵Alt+D,Id號(hào)為102。HotKey.KeyModifiers.Alt也可以直接使用數(shù)字1來表示。
  HotKey.RegisterHotKey(Handle, 102, HotKey.KeyModifiers.Alt, Keys.D);
}
//在FormA的Leave事件中注銷熱鍵。
private void FrmSale_Leave(object sender, EventArgs e)
{
  //注銷Id號(hào)為100的熱鍵設(shè)定
  HotKey.UnregisterHotKey(Handle, 100);
  //注銷Id號(hào)為101的熱鍵設(shè)定
  HotKey.UnregisterHotKey(Handle, 101);
  //注銷Id號(hào)為102的熱鍵設(shè)定
  HotKey.UnregisterHotKey(Handle, 102);
}

重載FromA中的WndProc函數(shù)
/// 
/// 監(jiān)視Windows消息
/// 重載WndProc方法,用于實(shí)現(xiàn)熱鍵響應(yīng)
/// 
/// 
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
          //此處填寫快捷鍵響應(yīng)代碼 
          break;
        case 101:  //按下的是Ctrl+B
          //此處填寫快捷鍵響應(yīng)代碼
          break;
        case 102:  //按下的是Alt+D
          //此處填寫快捷鍵響應(yīng)代碼
          break;
      }
    break;
  }
  base.WndProc(ref m);
}

以上所述就是本文的全部內(nèi)容了,希望對(duì)大家學(xué)習(xí)C#能夠有所幫助。

相關(guān)文章

  • C# PLINQ 內(nèi)存列表查詢優(yōu)化歷程

    C# PLINQ 內(nèi)存列表查詢優(yōu)化歷程

    這篇文章主要介紹了C# PLINQ 內(nèi)存列表查詢優(yōu)化歷程的相關(guān)資料,需要的朋友可以參考下
    2016-03-03
  • 在C#中發(fā)送自定義HTML格式郵件的示例詳解

    在C#中發(fā)送自定義HTML格式郵件的示例詳解

    在C#中發(fā)送自定義HTML格式郵件是一項(xiàng)常見的任務(wù),這在開發(fā)電子郵件營銷系統(tǒng)或任何需要通過電子郵件與用戶溝通的應(yīng)用程序中都非常重要,以下是如何在C#中發(fā)送自定義HTML格式郵件的詳解與示例,需要的朋友可以參考下
    2024-07-07
  • Winform+.Net6實(shí)現(xiàn)圖片拖拽上傳功能

    Winform+.Net6實(shí)現(xiàn)圖片拖拽上傳功能

    這篇文章主要為大家詳細(xì)介紹了如何使用WinformPictureBox控件+.Net6 WebApi實(shí)現(xiàn)圖片拖拽上傳功能,文中的示例代碼講解詳細(xì),感興趣的可以學(xué)習(xí)一下
    2023-09-09
  • C#中異步回調(diào)函數(shù)用法實(shí)例

    C#中異步回調(diào)函數(shù)用法實(shí)例

    這篇文章主要介紹了C#中異步回調(diào)函數(shù)用法,實(shí)例分析了異步回調(diào)函數(shù)的定義及使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-04-04
  • C#圖書管理系統(tǒng) 附源碼下載

    C#圖書管理系統(tǒng) 附源碼下載

    這篇文章主要為大家詳細(xì)介紹了C#圖書管理系統(tǒng),文章中附源碼下載,示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • Unity UI實(shí)現(xiàn)拖拽旋轉(zhuǎn)

    Unity UI實(shí)現(xiàn)拖拽旋轉(zhuǎn)

    這篇文章主要為大家詳細(xì)介紹了Unity UI實(shí)現(xiàn)拖拽旋轉(zhuǎn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • C#開發(fā)簡易winform計(jì)算器程序

    C#開發(fā)簡易winform計(jì)算器程序

    這篇文章主要為大家詳細(xì)介紹了C#開發(fā)簡易winform計(jì)算器程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • C#使用iTextSharp獲取PDF文件書簽信息的操作方法

    C#使用iTextSharp獲取PDF文件書簽信息的操作方法

    C# iTextSharp是一個(gè)用于處理PDF文件的源庫,它提供了一系列的功能,包括創(chuàng)建PDF文件,以及提取和操作PDF文件中的內(nèi)容,本文給大家介紹了C#使用iTextSharp獲取PDF文件書簽信息的操作方法,需要的朋友可以參考下
    2024-04-04
  • c#消息提示框messagebox的詳解及使用

    c#消息提示框messagebox的詳解及使用

    這篇文章主要介紹了c#消息提示框messagebox的詳解及使用的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • c#讀取excel數(shù)據(jù)的兩種方法實(shí)現(xiàn)

    c#讀取excel數(shù)據(jù)的兩種方法實(shí)現(xiàn)

    這篇文章主要介紹了c#讀取excel數(shù)據(jù)的兩種方法實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12

最新評(píng)論

朝阳市| 大石桥市| 山西省| 静海县| 方山县| 呼玛县| 休宁县| 永安市| 呼伦贝尔市| 肇庆市| 烟台市| 绥化市| 凌源市| 曲麻莱县| 邵阳市| 高安市| 鞍山市| 馆陶县| 若尔盖县| 尉氏县| 鹿泉市| 息烽县| 东至县| 皮山县| 陇南市| 淅川县| 大同县| 阳春市| 抚顺县| 大埔县| 黎城县| 英山县| 泾源县| 浮梁县| 天全县| 太仆寺旗| 桂平市| 特克斯县| 龙海市| 电白县| 玉树县|