C#完成老板鍵功效的代碼。本站提示廣大學習愛好者:(C#完成老板鍵功效的代碼)文章只能為提供參考,不一定能成為您想要的結果。以下是C#完成老板鍵功效的代碼正文
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#可以或許有所贊助。