using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
namespace Clubank.Common
{
/// <summary>
/// 打印机Win32 API,用来探测打印状态
/// </summary>
public class Win32
{
[DllImport("winspool.drv", CharSet = CharSet.Auto, SetLastError = true)]
public static extern bool OpenPrinter(string printer, out IntPtr handle, IntPtr printerDefaults);
[DllImport("winspool.drv")]
public static extern bool ClosePrinter(IntPtr handle);
[DllImport("winspool.drv", CharSet = CharSet.Auto, SetLastError = true)]
public static extern bool GetPrinter(IntPtr handle, UInt32 level, IntPtr buffer, UInt32 size, out UInt32 sizeNeeded);
[DllImport("shell32.dll")]
public static extern uint ExtractIconEx(string lpszFile, int nIconIndex, IntPtr[] hLarge, IntPtr[] hSmall, uint nIcons);
[DllImport("User32.dll", EntryPoint = "DestroyIcon")]
public static extern int DestroyIcon(IntPtr hIcon);
[DllImport("User32.dll", EntryPoint = "mouse_event")]
public static extern int mouse_event(int dwFlags,int dx,int dy,int cButtons,int dwExtraInfo);
[DllImport("uxtheme.dll")]
public static extern int IsThemeActive();
[DllImport("Kernel32.dll")]
private static extern Boolean SetSystemTime([In, Out] SystemTime st);
/// <summary>
/// 设置系统时间
/// </summary>
/// <param name="newdatetime">新时间</param>
/// <returns></returns>
public static bool SetSysTime(DateTime dt)
{
SystemTime st = new SystemTime();
st.year = Convert.ToUInt16(dt.Year);
st.month = Convert.ToUInt16(dt.Month);
st.day = Convert.ToUInt16(dt.Day);
st.dayofweek = Convert.ToUInt16(dt.DayOfWeek);
st.hour = Convert.ToUInt16(dt.Hour - TimeZone.CurrentTimeZone.GetUtcOffset(new DateTime(2001, 09, 01)).Hours);
st.minute = Convert.ToUInt16(dt.Minute);
st.second = Convert.ToUInt16(dt.Second);
st.milliseconds = Convert.ToUInt16(dt.Millisecond);
return SetSystemTime(st);
}
[DllImport("user32.dll")]
public extern static IntPtr GetDesktopWindow();
[DllImport("user32.dll")]
public extern static bool SetLayeredWindowAttributes(IntPtr hwnd, uint crKey, byte bAlpha, uint dwFlags);
public static uint LWA_COLORKEY = 0x00000001;
public static uint LWA_ALPHA = 0x00000002;
[DllImport("user32.dll")]
public extern static uint SetWindowLong(IntPtr hwnd, int nIndex, uint dwNewLong);
[DllImport("user32.dll")]
public extern static uint GetWindowLong(IntPtr hwnd, int nIndex);
public enum WindowStyle : int
{
GWL_EXSTYLE = -20
}
public enum ExWindowStyle : uint
{
WS_EX_LAYERED = 0x00080000
}
/// <summary>
/// 该函数设置由不同线程产生的窗口的显示状态。
/// </summary>
/// <param name="hWnd">窗口句柄</param>
/// <param name="cmdShow">指定窗口如何显示。查看允许值列表,请查阅ShowWlndow函数的说明部分。</param>
/// <returns>如果函数原来可见,返回值为非零;如果函数原来被隐藏,返回值为零。</returns>
[DllImport("User32.dll")]
public static extern bool ShowWindowAsync(IntPtr hWnd, int cmdShow);
/// <summary>
/// 该函数将创建指定窗口的线程设置到前台,并且激活该窗口。键盘输入转向该窗口,并为用户改各种可视的记号。系统给创建前台窗口的线程分配的权限稍高于其他线程。
/// </summary>
/// <param name="hWnd">将被激活并被调入前台的窗口句柄。</param>
/// <returns>如果窗口设入了前台,返回值为非零;如果窗口未被设入前台,返回值为零。</returns>
[DllImport("User32.dll")]
public static extern bool SetForegroundWindow(IntPtr hWnd);
public const int WS_SHOWNORMAL = 1;
public const int SW_SHOWMAXIMIZED = 3;
[DllImport("kernel32")]
public static extern bool GlobalMemoryStatusEx(ref MemoryStatusEx memoryStatus);
[DllImport("kernel32")]
public static extern bool GlobalMemoryStatus(ref MemoryStatus memoryStatus);
[DllImport("kernel32", CharSet = CharSet.Auto)]
static extern int GetDiskFreeSpaceEx(string lpDirectoryName,
out ulong lpFreeBytesAvailable,
out ulong lpTotalNumberOfBytes,
out ulong lpTotalNumberOfFreeBytes);
[DllImport("kernel32")]
public static extern void GetSystemInfo(ref SYSTEM_INFO pSI);
[DllImport("kernel32.Dll")]
public static extern short GetVersionEx(ref OSVERSIONINFO o);
}
/// <summary>
///系统时间类
/// </summary>
[StructLayout(LayoutKind.Sequential)]
public class SystemTime
{
public ushort year;
public ushort month;
public ushort dayofweek;
public ushort day;
public ushort hour;
public ushort minute;
public ushort second;
public ushort milliseconds;
}
[StructLayout(LayoutKind.Sequential)]
public struct MemoryStatusEx
{
public uint dwLength;
public uint dwMemoryLoad;
public ulong ullTotalPhys;
public ulong ullAvailPhys;
public ulong ullTotalPageFile;
public ulong ullAvailPageFile;
public ulong ullTotalVirtual;
public ulong ullAvailVirtual;
public ulong ullAvailExtendedVirtual;
}
[StructLayout(LayoutKind.Sequential)]
public struct MemoryStatus
{
public uint dwLength;
public uint dwMemoryLoad;
public uint dwTotalPhys;
public uint dwAvailPhys;
public uint dwTotalPageFile;
public uint dwAvailPageFile;
public uint dwTotalVirtual;
public uint dwAvailVirtual;
}
[StructLayout(LayoutKind.Sequential)]
public struct SYSTEM_INFO
{
public uint dwOemId;
public uint dwPageSize;
public uint lpMinimumApplicationAddress;
public uint lpMaximumApplicationAddress;
public uint dwActiveProcessorMask;
public uint dwNumberOfProcessors;
public uint dwProcessorType;
public uint dwAllocationGranularity;
public uint dwProcessorLevel;
public uint dwProcessorRevision;
}
[StructLayout(LayoutKind.Sequential)]
public struct OSVERSIONINFO
{
public int dwOSVersionInfoSize;
public int dwMajorVersion;
public int dwMinorVersion;
public int dwBuildNumber;
public int dwPlatformId;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
public string szCSDVersion;
}
/// <summary>
/// Win32 API 中定义的打印机结构体
/// </summary>
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public struct PRINTER_INFO_2
{
public string pServerName;
public string pPrinterName;
public string pShareName;
public string pPortName;
public string pDriverName;
public string pComment;
public string pLocation;
public IntPtr pDevMode;
public string pSepFile;
public string pPrintProcessor;
public string pDatatype;
public string pParameters;
public IntPtr pSecurityDescriptor;
public uint Attributes;
public uint Priority;
public uint DefaultPriority;
public uint StartTime;
public uint UntilTime;
public uint Status;
public uint cJobs;
public uint AveragePPM;
}
}
本文转载至http://www.aaspx.com/article-10-1.html