Cnic.SafeNativeMethods

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Text;
  4 using System.Runtime.InteropServices;
  5 using System.ComponentModel;
  6 //using System.Drawing;
  7 
  8 namespace Cnic
  9 {
 10     public class SafeNativeMethods
 11     {
 12         public const int INVALID_HANDLE_VALUE = -1;
 13         public const int NULL = 0;
 14         public const int ERROR_SUCCESS = 0;
 15         public const int FILE_READ_DATA = 0x0001;
 16         public const int FILE_SHARE_READ = 0x00000001;
 17         public const int OPEN_EXISTING = 3;
 18         public const int GENERIC_READ = unchecked((int)0x80000000);
 19         public const int GENERIC_WRITE = unchecked((int)0x40000000);
 20         public const int METHOD_BUFFERED = 0;
 21         public const int METHOD_OUT_DIRECT = 2;
 22         public const int METHOD_NEITHER = 3;
 23         public const int FILE_ANY_ACCESS = 0;
 24         public const int FILE_DEVICE_VIRTUAL_DISK = 0x00000024;
 25         public const long FILE_DEVICE_PHYSICAL_NETCARD = 0x00000017;
 26 
 27         public const int SC_MONITORPOWER = 0xF170;
 28 
 29         public const int SE_PRIVILEGE_ENABLED = 0x00000002;
 30         public const int TOKEN_QUERY = 0x00000008;
 31         public const int TOKEN_ADJUST_PRIVILEGES = 0x00000020;
 32         public const string SE_SHUTDOWN_NAME = "SeShutdownPrivilege";
 33         public const int EWX_LOGOFF = 0x00000000;
 34         public const int EWX_SHUTDOWN = 0x00000001;
 35         public const int EWX_REBOOT = 0x00000002;
 36         public const int EWX_FORCE = 0x00000004;
 37         public const int EWX_POWEROFF = 0x00000008;
 38         public const int EWX_FORCEIFHUNG = 0x00000010;
 39 
 40         public delegate IntPtr HookProc(int code, IntPtr wparam, IntPtr lparam);
 41         public const int ULW_COLORKEY = 0x00000001;
 42         public const int ULW_ALPHA = 0x00000002;
 43         public const int ULW_OPAQUE = 0x00000004;
 44         public const uint LWA_COLORKEY = 0x00000001;
 45         public const uint LWA_ALPHA = 0x00000002;
 46 
 47         public const int HC_ACTION = 0x00000000;
 48         public const int HC_GETNEXT = 0x00000001;
 49         public const int HC_SKIP = 0x00000002;
 50         public const int HC_NOREMOVE = 0x00000003;
 51         public const int HC_NOREM = 0x00000003;
 52         public const int HC_SYSMODALON = 0x00000004;
 53         public const int HC_SYSMODALOFF = 0x00000005;
 54 
 55         public const int MOUSE = 0;
 56         public const int KEYBOARD = 1;
 57         public const int HARDWARE = 2;
 58         public const short VK_LWIN = 0x5B;
 59         public const short KEYEVENTF_KEYUP = 0x0002;
 60         public const int WM_SYSCOMMAND = 0x112;
 61         public const int HTCAPTION = 0x2;
 62         public const int WS_SHOWNORMAL = 1;
 63         public const byte AC_SRC_OVER = 0x00;
 64         public const byte AC_SRC_ALPHA = 0x01;
 65         public const int SRCCOPY = 0x40CC0020;
 66         public const Int16 IMAGE_ICON = 1;
 67         public const int LOAD_LIBRARY_AS_DATAFILE = 0x2;
 68         public const int RT_ICON = 3;
 69         public const int RT_GROUP_ICON = 14;
 70         public const int WM_KEYDOWN = 0x100;
 71         public const int WM_KEYUP = 0x101;
 72         public const int MOUSEEVENTF_MOVE = 0x0001;
 73         public const int MOUSEEVENTF_LEFTDOWN = 0x0002;
 74         public const int MOUSEEVENTF_LEFTUP = 0x0004;
 75         public const int MOUSEEVENTF_RIGHTDOWN = 0x0008;
 76         public const int MOUSEEVENTF_RIGHTUP = 0x0010;
 77         public const int MOUSEEVENTF_MIDDLEDOWN = 0x0020;
 78         public const int MOUSEEVENTF_MIDDLEUP = 0x0040;
 79         public const int MOUSEEVENTF_ABSOLUTE = 0x8000;
 80         public const int SC_SIZE = 0xF000;
 81         public const int SC_MOVE = 0xF010;
 82         public const int SC_MINIMIZE = 0xF020;
 83         public const int SC_MAXIMIZE = 0xF030;
 84         public const int SC_NEXTWINDOW = 0xF040;
 85         public const int SC_PREVWINDOW = 0xF050;
 86         public const int SC_CLOSE = 0xF060;
 87         public const int SC_VSCROLL = 0xF070;
 88         public const int SC_HSCROLL = 0xF080;
 89         public const int SC_MOUSEMENU = 0xF090;
 90         public const int SC_KEYMENU = 0xF100;
 91         public const int SC_ARRANGE = 0xF110;
 92         public const int SC_RESTORE = 0xF120;
 93         public const int AW_HOR_POSITIVE = 0x00000001;
 94         public const int AW_HOR_NEGATIVE = 0x00000002;
 95         public const int AW_VER_POSITIVE = 0x00000004;
 96         public const int AW_VER_NEGATIVE = 0x00000008;
 97         public const int AW_CENTER = 0x00000010;
 98         public const int AW_HIDE = 0x00010000;
 99         public const int AW_ACTIVATE = 0x00020000;
100         public const int AW_SLIDE = 0x00040000;
101         public const int AW_BLEND = 0x00080000;
102 
103 
104         public const uint WS_EX_LAYERED = 0x80000;
105         public const int WS_EX_TRANSPARENT = 0x20;
106         public const int GWL_STYLE = (-16);
107         public const int GWL_EXSTYLE = (-20);
108 
109 
110 
111         [StructLayout(LayoutKind.Sequential, Pack = 1)]
112         struct ARGB
113         {
114             public byte Blue;
115             public byte Green;
116             public byte Red;
117             public byte Alpha;
118         }
119 
120 
121         [StructLayout(LayoutKind.Sequential, Pack = 1)]
122         public struct BLENDFUNCTION
123         {
124             public byte BlendOp;
125             public byte BlendFlags;
126             public byte SourceConstantAlpha;
127             public byte AlphaFormat;
128         }
129         //Security Attributes
130         public struct SECURITY_ATTRIBUTES
131         {
132             public int nLength;
133             public IntPtr lpSecurityDescriptor;
134             public int bInheritHandle;
135         }
136 
137 
138 
139         /// <summary>
140         /// 枚举,钩子的类型 WindowsMessageHook
141         /// </summary>
142         public enum HookType
143         {
144 
145             MsgFilter = -1,
146 
147             JournalRecord = 0,
148             JournalPlayback = 1,
149             Keyboard = 2,
150             GetMessage = 3,
151             CallWndProc = 4,
152             CBT = 5,
153             SysMsgFilter = 6,
154             Mouse = 7,
155             Hardware = 8,
156             Debug = 9,
157             Shell = 10,
158             ForegroundIdle = 11,
159             CallWndProcRet = 12,
160             KeyboardLL = 13,
161             MouseLL = 14
162         }
163         [StructLayout(LayoutKind.Sequential, Pack = 1)]
164         public struct TOKEN_PRIVILEGES
165         {
166             public int PrivilegeCount;
167             public long Luid;
168             public int Attributes;
169         }
170 
171         [StructLayout(LayoutKind.Sequential)]
172         public struct HARDWAREINPUT
173         {
174             public int uMsg;
175             public short wParamL;
176             public short wParamH;
177         }
178 
179         [StructLayout(LayoutKind.Explicit)]
180         public struct Input
181         {
182             [FieldOffset(0)]
183             public int type;
184             [FieldOffset(4)]
185             public MOUSEINPUT mi;
186             [FieldOffset(4)]
187             public KEYBDINPUT ki;
188             [FieldOffset(4)]
189             public HARDWAREINPUT hi;
190         }
191 
192 
193         [StructLayout(LayoutKind.Sequential)]
194         public struct KeyboardHookStruct
195         {
196             public int vkCode; //表示一个在1到254间的虚似键盘码
197             public int scanCode; //表示硬件扫描码
198             public int flags;
199             public int time;
200             public int dwExtraInfo;
201         }
202         public enum KeyModifiers
203         {
204             None = 0,
205             Alt = 1,
206             Control = 2,
207             Shift = 4,
208             Windows = 8
209         }
210         [StructLayout(LayoutKind.Sequential)]
211         public struct KEYBDINPUT
212         {
213             public short wVk;
214             public short wScan;
215             public int dwFlags;
216             public int time;
217             public IntPtr dwExtraInfo;
218         }
219         [StructLayout(LayoutKind.Sequential)]
220         public struct MOUSEINPUT
221         {
222             public int dx;
223             public int dy;
224             public int mouseData;
225             public int dwFlags;
226             public int time;
227             public IntPtr dwExtraInfo;
228         }
229         //[StructLayout(LayoutKind.Sequential)]
230         //public struct Point
231         //{
232         //    public Int32 x;
233         //    public Int32 y;
234 
235         //    public Point(Int32 x, Int32 y) { this.x = x; this.y = y; }
236         //}
237 
238         public struct POINTAPI
239         {
240             public int x;
241             public int y;
242         }
243 
244         public struct RECT
245         {
246             public int left;
247             public int top;
248             public int right;
249             public int bottom;
250         }
251 
252         //[StructLayout(LayoutKind.Sequential)]
253         //public struct Size
254         //{
255         //    public Int32 cx;
256         //    public Int32 cy;
257 
258         //    public Size(Int32 cx, Int32 cy) { this.cx = cx; this.cy = cy; }
259         //}
260 
261         /// <summary>
262         /// 该函数对指定的源设备环境区域中的像素进行位块(bit_block)转换,以传送到目标设备环境。
263         /// </summary>
264         /// <param name="TarPtr">目标设备环境的句柄。</param>
265         /// <param name="DestX">指定目标矩形区域左上角的X轴逻辑坐标。</param>
266         /// <param name="DestY">指定目标矩形区域左上角的Y轴逻辑坐标。</param>
267         /// <param name="Width">指定源和目标矩形区域的逻辑宽度。</param>
268         /// <param name="Height">指定源和目标矩形区域的逻辑高度。</param>
269         /// <param name="DcPtr">指向源设备环境的句柄。</param>
270         /// <param name="ScrX">指定源矩形区域左上角的X轴逻辑坐标。</param>
271         /// <param name="ScrY">指定源矩形区域左上角的Y轴逻辑坐标。</param>
272         /// <param name="dwRop">指定光栅操作代码。这些代码将定义源矩形区域的颜色数据,如何与目标矩形区域的颜色数据组合以完成最后的颜色。:BLACKNESS,DSTINVERT,MERGECOPY,MERGEPAINT,NOTSRCCOPY,NOTSRCERASE,PATCOPY,PATPAINT,PATINVERT,SRCAND,SRCCOPY,SRCERASE,SRCINVERT,SRCPAINT,WHITENESS</param>
273         /// <returns>如果函数成功,那么返回值非零;如果函数失败,则返回值为零。</returns>
274         [DllImport("gdi32.dll", SetLastError = true)]
275         public static extern bool BitBlt(IntPtr TarPtr, int DestX, int DestY, int Width, int Height, IntPtr DcPtr, int ScrX, int ScrY, int dwRop);
276 
277         /// <summary>
278         /// 调用下一个钩子
279         /// </summary>
280         /// <param name="handle">当前钩子的句柄</param>
281         /// <param name="code">钩子代码  HC_ACTION = 0,HC_GETNEXT = 1,HC_SKIP = 2,HC_NOREMOVE = 3,HC_NOREM = HC_NOREMOVE;,HC_SYSMODALON = 4,HC_SYSMODALOFF = 5;</param>
282         /// <param name="wparam">要传递的参数</param>
283         /// <param name="lparam">要传递的参数</param>
284         /// <returns></returns>
285         [DllImport("user32.dll", SetLastError = true)]
286         public static extern IntPtr CallNextHookEx(IntPtr handle, int code, IntPtr wparam, IntPtr lparam);
287 
288         [DllImport("gdi32.dll", SetLastError = true)]
289         public static extern IntPtr CreateCompatibleBitmap(IntPtr hDC, int nWidth, int nHeight);
290 
291         [DllImport("gdi32.dll", SetLastError = true)]
292         public static extern IntPtr CreateCompatibleDC(IntPtr hDC);
293 
294 
295         [DllImport("gdi32.dll", SetLastError = true)]
296         public static extern IntPtr CreateDC(string lpszDriver, string lpszDevice, string lpszOutput, IntPtr lpInitData);
297 
298 
299         [DllImport("gdi32.dll", SetLastError = true)]
300         public static extern bool DeleteDC(IntPtr hDC);
301 
302         [DllImport("gdi32.dll", SetLastError = true)]
303         public static extern bool DeleteObject(IntPtr hObject);
304 
305         [DllImport("user32.dll", SetLastError = true)]
306         public static extern bool DrawIcon(IntPtr hdc, int x, int y, IntPtr hIcon);
307 
308         public delegate int EnumResNamesProc(IntPtr hMod, IntPtr lpszType, IntPtr lpszName, IntPtr lParam);
309 
310         [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
311         public static extern int EnumResourceNames(IntPtr hModule, IntPtr lpType, [MarshalAs(UnmanagedType.FunctionPtr)] EnumResNamesProc lpEnumFunc, IntPtr lParam);
312 
313         [DllImport("kernel32.dll", SetLastError = true)]
314         public static extern int FreeLibrary(IntPtr hLibModule);
315 
316         [DllImport("kernel32", CharSet = CharSet.Auto)]
317         public static extern IntPtr FindResource(IntPtr hInstance, [MarshalAs(UnmanagedType.LPTStr)] string lpName, IntPtr lpType);
318 
319         [DllImport("kernel32.dll", SetLastError = true)]
320         public static extern int FreeResource(IntPtr hResData);
321 
322         [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
323         public static extern IntPtr GetCursor();
324 
325 
326         [DllImport("User32.dll", EntryPoint = "GetKeyState", CharSet = CharSet.Auto)]
327         public static extern short GetKeyState(int nVirtKey);
328 
329         [DllImport("user32.dll", SetLastError = true)]
330         public static extern IntPtr GetDC(IntPtr hwnd);
331 
332         [DllImport("user32.dll", SetLastError = true)]
333         public static extern IntPtr GetDesktopWindow();
334 
335         [DllImport("user32.dll", EntryPoint = "GetSystemMetrics")]
336         public static extern int GetSystemMetrics(int nIndex);
337 
338         [DllImport("user32.dll", SetLastError = true)]
339         public static extern IntPtr GetWindowDC(IntPtr hwnd);
340 
341         [DllImport("kernel32", CharSet = CharSet.Auto)]
342         public static extern IntPtr LoadLibraryEx([MarshalAs(UnmanagedType.LPTStr)] string lpLibFileName, IntPtr hFile, int dwFlags);
343 
344         [DllImport("kernel32.dll", SetLastError = true)]
345         public static extern IntPtr LoadResource(IntPtr hInstance, IntPtr hResInfo);
346 
347         [DllImport("kernel32.dll", SetLastError = true)]
348         public static extern IntPtr LockResource(IntPtr hResData);
349 
350         [DllImport("user32.dll", SetLastError = true)]
351         public static extern int mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo);
352 
353         /// <summary>
354         /// 
355         /// </summary>
356         /// <param name="hwnd">Window to copy,Handle to the window that will be copied. </param>
357         /// <param name="hdcBlt">HDC to print into,Handle to the device context. </param>
358         /// <param name="nFlags">Optional flags,Specifies the drawing options. It can be one of the following values. </param>
359         /// <returns></returns>
360         [DllImport("user32.dll", SetLastError = true)]
361         public static extern bool PrintWindow(IntPtr hwnd, IntPtr hdcBlt, UInt32 nFlags);
362 
363         [DllImport("user32.dll", SetLastError = true)]
364         public static extern bool RegisterHotKey(IntPtr hWnd, int id, uint fsModifiers, System.Windows.Forms.Keys vk);
365 
366         [DllImport("user32.dll", SetLastError = true)]
367         public static extern Int32 ReleaseDC(IntPtr hwnd, IntPtr hdc);
368 
369         [DllImport("gdi32.dll", SetLastError = true)]
370         public static extern IntPtr SelectObject(IntPtr hDC, IntPtr hObject);
371 
372         [DllImport("user32.dll", EntryPoint = "SetCursorPos")]
373         public static extern int SetCursorPos(int x, int y);
374 
375         [DllImport("kernel32.dll", SetLastError = true)]
376         public static extern int SizeofResource(IntPtr hInstance, IntPtr hResInfo);
377 
378         [DllImport("gdi32.dll", SetLastError = true)]
379         public static extern bool StretchBlt(IntPtr hObjec, int nXDest, int nYDest, int nWidth, int nHeight, IntPtr hObjectSource, int nXSrc, int nYSrc, int nSrcWidth, int nSrcHeight, uint dwRop);
380 
381 
382         [DllImport("user32.dll", SetLastError = true)]
383         public static extern bool UnregisterHotKey(IntPtr hWnd, int id);
384 
385         [DllImport("User32.dll", EntryPoint = "SystemParametersInfo")]
386         public static extern int SystemParametersInfo(int UAction, int UParam, string IpvParam, int fuWinIni);
387 
388         [DllImport("kernel32.dll", SetLastError = true)]
389         public static extern bool SetProcessWorkingSetSize(IntPtr handle, int minimumWorkingSetSize, int maximumWorkingSetSize);
390 
391         [DllImport("user32.dll", SetLastError = true)]
392         public static extern IntPtr SetWindowsHookEx(int idHook, [MarshalAs(UnmanagedType.FunctionPtr)] HookProc lpfn, IntPtr hinstance, int threadID);
393 
394 
395         [DllImport("user32.dll", SetLastError = true)]
396         public static extern void UnhookWindowsHookEx(IntPtr handle);
397 
398         [DllImport("user32.dll", ExactSpelling = true, SetLastError = true)]
399         public static extern bool UpdateLayeredWindow(IntPtr hwnd, IntPtr hdcDst, ref System.Drawing.Point pptDst, ref System.Drawing.Size psize, IntPtr hdcSrc, ref System.Drawing.Point pprSrc, Int32 crKey, ref BLENDFUNCTION pblend, Int32 dwFlags);
400 
401         [DllImport("user32.dll", EntryPoint = "SwapMouseButton")]
402         public static extern int SwapMouseButton(int bSwap);
403 
404         [DllImport("user32", EntryPoint = "ClipCursor")]
405         public static extern int ClipCursor(ref RECT lpRect);
406 
407         [DllImport("user32.dll", EntryPoint = "GetCursorPos")]
408         public static extern int GetCursorPos(ref System.Drawing.Point lpPoint);
409 
410         [DllImport("user32.dll", EntryPoint = "ShowCursor")]
411         public static extern bool ShowCursor(bool bShow);
412 
413         [DllImport("user32.dll", EntryPoint = "EnableWindow")]
414         public static extern int EnableWindow(int hwnd, int fEnable);
415 
416         [DllImport("user32.dll", EntryPoint = "GetWindowRect")]
417         public static extern int GetWindowRect(int hwnd, ref RECT lpRect);
418 
419 
420         [DllImport("user32.dll", EntryPoint = "SetDoubleClickTime")]
421         public static extern int SetDoubleClickTime(int wCount);
422 
423         [DllImport("user32.dll", EntryPoint = "GetDoubleClickTime")]
424         public static extern int GetDoubleClickTime();
425 
426         [DllImport("kernel32.DLL", EntryPoint = "Sleep")]
427         public static extern void Sleep(int dwMilliseconds);
428 
429         [DllImport("user32.dll", SetLastError = true)]
430         public static extern bool ShowWindowsAsync(IntPtr hWnd, int cmdShow);
431 
432         [DllImport("user32.dll", SetLastError = true)]
433         public static extern bool SetForegroundWindows(IntPtr hWnd);
434 
435         [DllImport("User32.dll", EntryPoint = "SendInput", CharSet = CharSet.Auto, SetLastError = true)]
436         public static extern UInt32 SendInput(UInt32 nInputs, Input[] pInputs, Int32 cbSize);
437 
438         [DllImport("Kernel32.dll", EntryPoint = "GetTickCount", CharSet = CharSet.Auto, SetLastError = true)]
439         public static extern int GetTickCount();
440 
441 
442         [DllImport("user32.dll", SetLastError = true)]
443         public static extern bool SetLayeredWindowAttributes(IntPtr hwnd, uint crKey, byte bAlpha, uint dwFlags);
444 
445         [DllImport("user32.dll", SetLastError = true)]
446         public static extern uint SetWindowLong(IntPtr hwnd, int nIndex, uint dwNewLong);
447 
448         [DllImport("user32.dll", SetLastError = true)]
449         public static extern uint GetWindowLong(IntPtr hwnd, int nIndex);
450 
451 
452         [DllImportAttribute("user32.dll", SetLastError = true)]
453         public static extern int SendMessage(IntPtr hWnd, uint Msg, uint wParam, uint lParam);
454 
455         [DllImportAttribute("user32.dll", SetLastError = true)]
456         public static extern bool ReleaseCapture();
457 
458         [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
459         public static extern int GetShortPathName(string lpszLongPath, string shortFile, int cchBuffer);
460 
461         [DllImport("winmm.dll", EntryPoint = "mciSendString", CharSet = CharSet.Auto, SetLastError = true)]
462         public static extern int mciSendString(string lpstrCommand, string lpstrReturnString, int uReturnLength, int hwndCallback);
463 
464         [DllImport("advapi32.dll", SetLastError = true, ExactSpelling = true)]
465         public static extern bool OpenProcessToken(IntPtr h, int acc, ref IntPtr phtok);
466 
467         [DllImport("kernel32.dll", ExactSpelling = true, SetLastError = true)]
468         public static extern IntPtr GetCurrentThread();
469 
470         [DllImport("advapi32.dll", ExactSpelling = true, SetLastError = true)]
471         public static extern bool OpenThreadToken(IntPtr h, int acc, bool openAsSelf, ref IntPtr phtok);
472 
473         [DllImport("advapi32.dll", SetLastError = true)]
474         public static extern bool LookupPrivilegeValue(string host, string name, ref long pluid);
475 
476         [DllImport("advapi32.dll", SetLastError = true, ExactSpelling = true)]
477         public static extern bool AdjustTokenPrivileges(IntPtr htok, bool disall, ref TOKEN_PRIVILEGES newst, int len, IntPtr prev, IntPtr relen);
478 
479         [DllImport("user32.dll", SetLastError = true, ExactSpelling = true)]
480         public static extern bool ExitWindowsEx(int DoFlag, int rea);
481 
482         [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
483         public static extern IntPtr GetCurrentProcess();
484 
485         [DllImport("kernel32.dll", EntryPoint = "GetLastError")]
486         public static extern int GetLastError();
487 
488         [DllImport("User32.Dll", EntryPoint = "LockWorkStation", SetLastError = true), Description("Locks the workstation's display. Locking a workstation protects it from unauthorized use.")]
489         [return: MarshalAs(UnmanagedType.Bool)]
490         public static extern bool LockWorkStation();
491 
492         [DllImport("advapi32.dll", SetLastError = true)]
493         public static extern bool InitiateSystemShutdown(string Machinename, string Message, long Timeout, bool ForceAppsClosed, bool RebootAfterShutdown);
494 
495         //Zero Memory
496         [DllImport("kernel32.dll", SetLastError = true)]
497         public static extern void ZeroMemory(IntPtr dest, int size);
498 
499         //Create file - overloaded
500         [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
501         public static extern int CreateFile(string lpFileName, int dwDesiredAccess, int dwSharedMode, IntPtr lpSecurityAttributes, int dwCreationDisposition, int dwFlagsandAttributes, int hTemplatFile);
502 
503         [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
504         public static extern int CreateFile(string lpFileName, int dwDesiredAccess, int dwSharedMode, ref SECURITY_ATTRIBUTES lpSecurityAttributes, int dwCreationDisposition, int dwFlagsandAttributes, int hTemplatFile);
505 
506         //CloseFile
507         [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
508         public static extern bool CloseHandle(int hHandle);
509 
510         //deviceIoControl - overloaded
511         [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
512         public static extern bool DeviceIoControl(int hDevice, int dwIoControlCode, byte[] InBuffer, int nInBufferSize, byte[] OutBuffer, int nOutputBufferSize, ref int pBytesReturned, int pOverlapped);
513 
514         [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
515         public static extern bool DeviceIoControl(int hDevice, int dwIoControlCode, int[] InBuffer, int nInBufferSize, int[] OutBuffer, int nOutputBufferSize, ref int pBytesReturned, int pOverlapped);
516 
517         [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
518         public static extern bool DeviceIoControl(
519            [MarshalAs(UnmanagedType.U4)] int hDevice,
520            [MarshalAs(UnmanagedType.U4)] int dwIoControlCode, IntPtr lpInBuffer,
521            [MarshalAs(UnmanagedType.U4)]uint nInBufferSize, IntPtr lpOutBuffer,
522            [MarshalAs(UnmanagedType.U4)] uint nOutputBufferSize,
523            [MarshalAs(UnmanagedType.U4)]out int pBytesReturned,
524            [MarshalAs(UnmanagedType.U4)]int pOverlapped);
525         [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
526         public static extern bool AnimateWindow( IntPtr hwnd, int dwTime, int dwFlags ); 
527 
528 
529     }
530 }
View Code
原文地址:https://www.cnblogs.com/CodeBase/p/3399956.html