📄 win32.cs
字号:
using System;
using System.Runtime.InteropServices;
namespace WWAM
{
/// <summary>
/// Win32 的摘要说明。
/// </summary>
/// <summary>
/// WinAPI 的摘要说明。
/// </summary>
public class Win32
{
public const uint EM_LINESCROLL = 0x00B5;
public const uint WM_NCLBUTTONDOWN = 0x00A1;
public const uint WM_NCPAINT = 0x0085;
public const uint WM_PAINT = 0x000F;
public const uint WM_ERASEBKGND = 0x0014;
[DllImport("User32.dll", CharSet = CharSet.Auto)]
public static extern int SendMessage(IntPtr hWnd, uint Msg, uint wParam, uint lparam);
/// <summary>
/// 禁止在窗口绘画
/// </summary>
/// <param name="hWnd"></param>
/// <returns></returns>
[DllImport("User32.dll", CharSet = CharSet.Auto)]
public static extern bool LockWindowUpdate(IntPtr hWnd);
/// <summary>
/// 释放鼠标捕获
/// </summary>
/// <returns></returns>
[DllImport("User32.dll", CharSet = CharSet.Auto)]
public static extern bool ReleaseCapture();
[DllImport("User32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr GetWindowDC(IntPtr hWnd);
#region OneInstance
[DllImport("Kernel32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr OpenMutex(uint dwDesiredAccess, int bInheritHandle, string lpName);
[DllImport("Kernel32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr CreateMutex(IntPtr lpMutexAttributes, int bInitialOwner, string lpName);
public static bool IsFirst(string appId)
{
bool result = false;
if ( Win32.OpenMutex(0x1F0001, 0, appId) == IntPtr.Zero)
{
Win32.CreateMutex(IntPtr.Zero, 0, appId);
result = true;
}
return result;
}
#endregion
#region 继承SendMessge
/// <summary>
/// 带Scroll的控件滑到底部(主要用于RichTextBox一类控件)
/// </summary>
/// <param name="controlHandle">控件句柄</param>
public static void ScrollToBottom(IntPtr controlHandle)
{
uint SB_BOTTOM = 0x0007;
SendMessage(controlHandle , EM_LINESCROLL , SB_BOTTOM , 0 );
}
/// <summary>
/// 窗体事件
/// </summary>
/// <param name="form"></param>
/// <param name="param"></param>
private static void FormEvent(System.Windows.Forms.Form form,FormEventParam param)
{
ReleaseCapture();
SendMessage(form.Handle, WM_NCLBUTTONDOWN , (uint)param, 0);
}
public enum FormEventParam
{
HTCAPTION = 0x0002,
HTLEFT = 0x000A,
HTRIGHT = 0x000B,
HTTOP = 0x000C,
HTTOPLEFT = 0x000D,
HTTOPRIGHT = 0x000E,
HTBOTTOM = 0x000F,
HTBOTTOMLEFT = 0x0010,
HTBOTTOMRIGHT = 0x0011,
}
/// <summary>
/// 移动窗体
/// </summary>
/// <param name="formHandle">窗体句柄</param>
public static void FormMove(System.Windows.Forms.Form form)
{
FormEvent(form , FormEventParam.HTCAPTION );
}
/// <summary>
/// 改变窗体大小
/// </summary>
/// <param name="formHandle">窗体句柄</param>
/// <param name="mParam"/>改变方向</param>
public static void FormResize(System.Windows.Forms.Form form , FormEventParam mParam )
{
FormEvent(form , mParam );
}
#endregion
#region 声音相关
[DllImport("winmm.dll", CharSet = CharSet.Auto)]
public static extern int PlaySound(string lpszName, int hModule, int dwFlags);
public enum PlayingFlags : uint
{
SND_SYNC = 0x00,
SND_ASYNC = 0x01,
SND_NODEFAULT = 0x02,
SND_MEMORY = 0x04,
SND_ALIAS = 0x010000,
SND_FILENAME = 0x020000,
SND_RESOURCE = 0x040004,
SND_ALIAS_ID = 0x0110000,
SND_ALIAS_START = 0,
SND_LOOP = 0x08,
SND_NOSTOP = 0x010,
SND_VALID = 0x01F,
SND_NOWAIT = 0x02000,
SND_PURGE = 0x40
}
#endregion
#region 模拟鼠标事件
[DllImport("User32.dll", CharSet = CharSet.Auto)]
public static extern bool SetCursorPos(int X, int Y);
[DllImport("User32.dll", CharSet = CharSet.Auto)]
public static extern bool GetCursorPos(out MousePoint lpPoint);
public struct MousePoint
{
public int x;
public int y;
}
public static System.Drawing.Point GetMousePos()
{
MousePoint mp;
GetCursorPos(out mp);
return new System.Drawing.Point(mp.x,mp.y);
}
[DllImport("User32.dll", CharSet = CharSet.Auto)]
public static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint dwData, int dwExtraInfo);
[Flags]
public enum MouseEventFlags
{
LEFTDOWN = 0x00000002,
LEFTUP = 0x00000004,
MIDDLEDOWN = 0x00000020,
MIDDLEUP = 0x00000040,
MOVE = 0x00000001,
ABSOLUTE = 0x00008000,
RIGHTDOWN = 0x00000008,
RIGHTUP = 0x00000010
}
/*
Example :
//Set cursor position
SetCursorPos(10, 50);
//Mouse Right Down and Mouse Right Up
mouse_event((uint)MouseEventFlags.RIGHTDOWN,0,0,0,0);
mouse_event((uint)MouseEventFlags.RIGHTUP,0,0,0,0);
*/
#endregion
#region 设置系统时间
[StructLayout(LayoutKind.Sequential)]
private struct SystemTime
{
public ushort _Year;
public ushort _Month;
public ushort _DayOfWeek;
public ushort _Day;
public ushort _Hour;
public ushort _Minute;
public ushort _Second;
public ushort _Miliseconds;
}
[DllImport("Kernel32.dll")]
private static extern bool SetSystemTime( ref SystemTime sysTime );
[DllImport("Kernel32.dll")]
private static extern void GetSystemTime(ref SystemTime sysTime);
public static void SetSystemTime(DateTime sysTime)
{
SystemTime _sysTime = new SystemTime();
_sysTime._Year = Convert.ToUInt16(sysTime.Year);
_sysTime._Month = Convert.ToUInt16(sysTime.Month);
_sysTime._Day = Convert.ToUInt16(sysTime.Day);
_sysTime._DayOfWeek = Convert.ToUInt16(sysTime.DayOfWeek);
_sysTime._Hour = Convert.ToUInt16(sysTime.Hour);
_sysTime._Minute = Convert.ToUInt16(sysTime.Minute);
_sysTime._Second = Convert.ToUInt16(sysTime.Second);
_sysTime._Miliseconds = Convert.ToUInt16(sysTime.Millisecond);
SetSystemTime(ref _sysTime);
}
#endregion
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -