172 lines
5.8 KiB
C#
Executable File
172 lines
5.8 KiB
C#
Executable File
using System;
|
|
using System.Collections.Generic;
|
|
using System.Runtime.InteropServices;
|
|
using System.Text;
|
|
|
|
namespace MacroBoard.Native
|
|
{
|
|
public static class Messages
|
|
{
|
|
[DllImport("user32.dll")]
|
|
public static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
|
|
|
|
[return: MarshalAs(UnmanagedType.Bool)]
|
|
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
|
|
public static extern bool PostMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
|
|
|
|
|
|
|
|
[DllImport("user32.dll", SetLastError = true)]
|
|
public static extern bool PeekMessage(
|
|
out NativeMessage lpMsg,
|
|
IntPtr hwnd,
|
|
uint wMsgFilterMin,
|
|
uint wMsgFilterMax,
|
|
uint wRemoveMsg);
|
|
|
|
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
public struct NativeMessage
|
|
{
|
|
public IntPtr handle;
|
|
public uint msg;
|
|
public IntPtr wParam;
|
|
public IntPtr lParam;
|
|
public uint time;
|
|
public System.Drawing.Point p;
|
|
}
|
|
|
|
[Flags]
|
|
public enum PeekMessageParams : uint
|
|
{
|
|
PM_NOREMOVE = 0x0000,
|
|
PM_REMOVE = 0x0001,
|
|
PM_NOYIELD = 0x0002,
|
|
PM_QS_INPUT = QueueStatusFlags.QS_INPUT << 16,
|
|
PM_QS_POSTMESSAGE = (QueueStatusFlags.QS_POSTMESSAGE | QueueStatusFlags.QS_HOTKEY | QueueStatusFlags.QS_TIMER) << 16,
|
|
PM_QS_PAINT = QueueStatusFlags.QS_PAINT << 16,
|
|
PM_QS_SENDMESSAGE = QueueStatusFlags.QS_SENDMESSAGE << 16
|
|
}
|
|
|
|
[Flags]
|
|
public enum QueueStatusFlags : uint
|
|
{
|
|
QS_KEY = 0x1,
|
|
QS_MOUSEMOVE = 0x2,
|
|
QS_MOUSEBUTTON = 0x4,
|
|
QS_MOUSE = (QS_MOUSEMOVE | QS_MOUSEBUTTON),
|
|
QS_INPUT = (QS_MOUSE | QS_KEY),
|
|
QS_POSTMESSAGE = 0x8,
|
|
QS_TIMER = 0x10,
|
|
QS_PAINT = 0x20,
|
|
QS_SENDMESSAGE = 0x40,
|
|
QS_HOTKEY = 0x80,
|
|
QS_REFRESH = (QS_HOTKEY | QS_KEY | QS_MOUSEBUTTON | QS_PAINT),
|
|
QS_ALLEVENTS = (QS_INPUT | QS_POSTMESSAGE | QS_TIMER | QS_PAINT | QS_HOTKEY),
|
|
QS_ALLINPUT = (QS_SENDMESSAGE | QS_PAINT | QS_TIMER | QS_POSTMESSAGE | QS_MOUSEBUTTON | QS_MOUSEMOVE | QS_HOTKEY | QS_KEY),
|
|
QS_ALLPOSTMESSAGE = 0x100,
|
|
QS_RAWINPUT = 0x400
|
|
}
|
|
|
|
|
|
public enum AppComandCode : uint
|
|
{
|
|
BASS_BOOST = 20,
|
|
BASS_DOWN = 19,
|
|
BASS_UP = 21,
|
|
BROWSER_BACKWARD = 1,
|
|
BROWSER_FAVORITES = 6,
|
|
BROWSER_FORWARD = 2,
|
|
BROWSER_HOME = 7,
|
|
BROWSER_REFRESH = 3,
|
|
BROWSER_SEARCH = 5,
|
|
BROWSER_STOP = 4,
|
|
LAUNCH_APP1 = 17,
|
|
LAUNCH_APP2 = 18,
|
|
LAUNCH_MAIL = 15,
|
|
LAUNCH_MEDIA_SELECT = 16,
|
|
MEDIA_NEXTTRACK = 11,
|
|
MEDIA_PLAY_PAUSE = 14,
|
|
MEDIA_PREVIOUSTRACK = 12,
|
|
MEDIA_STOP = 13,
|
|
TREBLE_DOWN = 22,
|
|
TREBLE_UP = 23,
|
|
VOLUME_DOWN = 9,
|
|
VOLUME_MUTE = 8,
|
|
VOLUME_UP = 10,
|
|
MICROPHONE_VOLUME_MUTE = 24,
|
|
MICROPHONE_VOLUME_DOWN = 25,
|
|
MICROPHONE_VOLUME_UP = 26,
|
|
CLOSE = 31,
|
|
COPY = 36,
|
|
CORRECTION_LIST = 45,
|
|
CUT = 37,
|
|
DICTATE_OR_COMMAND_CONTROL_TOGGLE = 43,
|
|
FIND = 28,
|
|
FORWARD_MAIL = 40,
|
|
HELP = 27,
|
|
MEDIA_CHANNEL_DOWN = 52,
|
|
MEDIA_CHANNEL_UP = 51,
|
|
MEDIA_FASTFORWARD = 49,
|
|
MEDIA_PAUSE = 47,
|
|
MEDIA_PLAY = 46,
|
|
MEDIA_RECORD = 48,
|
|
MEDIA_REWIND = 50,
|
|
MIC_ON_OFF_TOGGLE = 44,
|
|
NEW = 29,
|
|
OPEN = 30,
|
|
PASTE = 38,
|
|
PRINT = 33,
|
|
REDO = 35,
|
|
REPLY_TO_MAIL = 39,
|
|
SAVE = 32,
|
|
SEND_MAIL = 41,
|
|
SPELL_CHECK = 42,
|
|
UNDO = 34,
|
|
DELETE = 53,
|
|
DWM_FLIP3D = 54
|
|
}
|
|
}
|
|
|
|
public static class Libraries
|
|
{
|
|
[DllImport("kernel32", SetLastError = true, CharSet = CharSet.Ansi)]
|
|
public static extern IntPtr LoadLibrary([MarshalAs(UnmanagedType.LPStr)] string lpFileName);
|
|
|
|
[DllImport("kernel32", CharSet = CharSet.Ansi, ExactSpelling = true, SetLastError = true)]
|
|
public static extern IntPtr GetProcAddress(IntPtr hModule, string procName);
|
|
}
|
|
|
|
public static class Windows
|
|
{
|
|
[DllImport("user32.dll")]
|
|
public static extern IntPtr FindWindow(string strClassName, string strWindowName);
|
|
|
|
[DllImport("user32.dll", SetLastError = true)]
|
|
public static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint processId);
|
|
}
|
|
|
|
public static class Keyboards
|
|
{
|
|
public const uint KEYEVENTF_EXTENDEDKEY = 0x0001;
|
|
public const uint KEYEVENTF_KEYUP = 0x0002;
|
|
|
|
|
|
[DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true, CallingConvention = CallingConvention.Winapi)]
|
|
public static extern short GetKeyState(int keyCode);
|
|
|
|
public static bool IsNumLockEnabled() => (((ushort)GetKeyState(0x90)) & 0xFFFF) != 0;
|
|
|
|
public enum KeyState
|
|
{
|
|
Down,
|
|
Up
|
|
}
|
|
|
|
//There is a built in System.Windows.Input version of this that has a Toggled version, but I am using my own.
|
|
public static KeyState GetKeyState(IntPtr lParam) => (((ulong)lParam & 0x80000000) == 0 ? KeyState.Down : KeyState.Up);
|
|
|
|
[DllImport("user32.dll")]
|
|
public static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, int dwExtraInfo);
|
|
}
|
|
} |