尝试便捷的Windows隐藏并定义热键来控制它们。下面我们将演示如何通过热键,我们将会用到DllImports of Win32 API、CallBacks/Delegates,定制事件与事件的句柄。 using System; namespace WindowHider /// <summary> /// <summary> /// <summary> /// <summary> /// <summary> //Override ToString() /// <summary> IntPtr ThreadID1 = GetWindowThreadProcessId(GetForegroundWindow(), if (IsIconic(m_hWnd)) /// <summary> //delegate used for EnumWindows() callback function private int m_Position = -1; // holds current index of wndArray, /// <summary> //Declare a callback delegate for EnumWindows() API call StringBuilder title = new StringBuilder(256); GetWindowModuleFileName(hWnd, module, 256); if (m_notitle == false && title.Length == 0) wndArray.Add(new Window(title.ToString(), (IntPtr)hWnd, return(true);
using System.Text;
using System.Collections;
using System.Runtime.InteropServices;
{
/// <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);
/// 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;
/// 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;
/// 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;}
}
/// 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;
}
}
}
/// 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;
}
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;
}
}
/// Sets focus to this Window Object
/// </summary>
public void Activate()
{
if(m_hWnd == GetForegroundWindow())
return;
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);
}
{
ShowWindowAsync(m_hWnd,SW_RESTORE);
}
else
{
ShowWindowAsync(m_hWnd,SW_SHOWNORMAL);
}
}
}
/// 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);
public delegate bool EnumWindowsProc(int hWnd, int lParam);
// necessary for IEnumerable
ArrayList wndArray = new ArrayList(); //array of windows
//Objects private fields
private bool m_invisible = false;
private bool m_notitle = false;
/// 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;
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 module = new StringBuilder(256);
GetWindowText(hWnd, title, 256);
return(true);
module.ToString()));
}
//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];
}
}
}
}
http://www.cnblogs.com/tanghuawei/archive/2006/10/11/526387.html
在c#中使用热键隐含窗口_c#应用
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 在c#中使用热键隐含窗口_c#应用
相关推荐
-      利用c#远程存取access数据库_c#应用
-      c# 3.0新特性系列:隐含类型var_c#教程
-      c#动态生成树型结构的web程序设计_c#应用
-      论c#变得越来越臃肿是不可避免的_c#应用
-      用c#监控并显示cpu状态信息_c#应用
-      c#中实现vb中的createobject方法_c#应用
-      photoshop给花瓶打造彩绘效果_photoshop教程
-      使用c#创建sql server的存储过程_c#应用