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
posted on 2013-03-31 14:59 阅读( ...) 评论( ...)