尝试便捷的Windows隐藏并定义热键来控制他们。下面我们将演示如何通过热键,我们将会用到DllImports of Win32 API、CallBacks/Delegates,定制事件和事件的句柄。
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 Objects 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 Objects 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)
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




