Skip to content

Instantly share code, notes, and snippets.

Avatar
🏠
Working from home

Kusa Mochi kusa-mochi

🏠
Working from home
View GitHub Profile
View HookSample.cs
using (Process currentProcess = Process.GetCurrentProcess ())
using (ProcessModule currentModule = currentProcess.MainModule) {
// メソッドをマウスのイベントに紐づける。
_mouseHookId = NativeMethods.SetWindowsHookEx (
NativeMethods.HookType.WH_MOUSE_LL,
_mouseProc,
NativeMethods.GetModuleHandle (currentModule.ModuleName),
0
);
View MouseKeyboardProcDelegateSample.cs
// デリゲート
private static readonly NativeMethods.LowLevelMouseKeyboardProc _mouseProc = MouseInputCallback;
private static readonly NativeMethods.LowLevelMouseKeyboardProc _keyboardProc = KeyboardInputCallback;
// メソッドを識別するID
private static IntPtr _mouseHookId = IntPtr.Zero;
private static IntPtr _keyboardHookId = IntPtr.Zero;
View KeyboardInputCallbackSample.cs
// キーボード操作のイベントが発生したら実行されるメソッド
private static IntPtr KeyboardInputCallback (int nCode, IntPtr wParam, IntPtr lParam) {
if (nCode < 0) {
// キーボードのイベントに紐付けられた次のメソッドを実行する。メソッドがなければ処理終了。
return NativeMethods.CallNextHookEx (_keyboardHookId, nCode, wParam, lParam);
}
switch ((NativeMethods.KeyboardMessage) wParam) {
case NativeMethods.KeyboardMessage.WM_KEYDOWN:
// キーが押し下げられたときに実行したい処理をここに書く。
View MouseInputCallbackSample.cs
// マウス操作のイベントが発生したら実行されるメソッド
private static IntPtr MouseInputCallback (int nCode, IntPtr wParam, IntPtr lParam) {
if (nCode < 0) {
// マウスのイベントに紐付けられた次のメソッドを実行する。メソッドがなければ処理終了。
return NativeMethods.CallNextHookEx (_mouseHookId, nCode, wParam, lParam);
}
MSLLHOOKSTRUCT param = Marshal.PtrToStructure<MSLLHOOKSTRUCT> (lParam);
Win32Point mousePosition = new Win32Point {
View NativeMethods.cs
using System;
using System.Runtime.InteropServices;
namespace KusaMochiAutoLibrary.NativeFunctions
{
[StructLayout(LayoutKind.Sequential)]
public struct Win32Point
{
public Int32 X;
public Int32 Y;
View GetScreenSize2.cs
// アプリのメインウィドウ
System.Windows.Window MainWindow = System.Windows.Application.Current.MainWindow;
// DIPを物理的なピクセルに変換するための係数をもとめる。
PresentationSource MainWindowPresentationSource = PresentationSource.FromVisual(MainWindow);
Matrix m = MainWindowPresentationSource.CompositionTarget.TransformToDevice;
double dpiWidthFactor = m.M11;
double dpiHeightFactor = m.M22;
// DIPのスクリーンサイズに係数を掛け算して、スクリーンの解像度をもとめる。
View GetScreenSize1.cs
// これでは正確に取得できない場合がある。
double ScreenHeight = SystemParameters.PrimaryScreenHeight;
double ScreenWidth = SystemParameters.PrimaryScreenWidth;
View KeyCodeConvertSample.cs
Keys winFormsKey = Keys.A;
short key = (short)winFormsKey;
// 以下同様
View KeyboardPressSample.cs
// キーコード
short key = 65;
INPUT[] inputs = new INPUT[] {
new INPUT {
type = NativeMethods.INPUT_KEYBOARD,
ui = new INPUT_UNION {
keyboard = new KEYBDINPUT {
wVk = key,
wScan = (short) NativeMethods.MapVirtualKey (key, 0),
View NativeMethods.cs
using System;
namespace MyNamespace {
///// APIの利用に必要な構造体・共用体の定義 ここから /////
[StructLayout(LayoutKind.Sequential)]
public struct Win32Point
{
public Int32 X;
public Int32 Y;
};