美文网首页
UNITY pc端在后台运行情况下也调用之全局钩子

UNITY pc端在后台运行情况下也调用之全局钩子

作者: 杨夏MX | 来源:发表于2017-06-12 01:45 被阅读0次

PC端 通过调用钩子实现键盘的全局捕获 搞了一天生气  下面贴代码 using UnityEngine;using System;using System.Diagnostics;using System.Runtime.InteropServices;using Debug = UnityEngine.Debug;////// 调用钩子实现全局键盘捕获

///public class hook : SingletonWithMonBehaviour{

public static hook Instance

{

get { return (hook)mInstance; }

}

//建立钩子

[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]

private static extern IntPtr SetWindowsHookEx(int idHook,

LowLevelKeyboardProc lpfn, IntPtr hMod, uint dwThreadId);

//移除钩子

[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]

[return: MarshalAs(UnmanagedType.Bool)]

private static extern bool UnhookWindowsHookEx(IntPtr hhk);

[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]

private static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam, IntPtr lParam);

[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]

private static extern IntPtr GetModuleHandle(string lpModuleName);

private const int WH_KEYBOARD_LL = 13;

private const int WM_KEYDOWN = 0x0100;

private static LowLevelKeyboardProc _proc = HookCallback;

private static IntPtr _hookID = IntPtr.Zero;

void Start()

{

_hookID = SetHook(_proc);

}

private static IntPtr SetHook(LowLevelKeyboardProc proc)

{

using (Process curProcess = Process.GetCurrentProcess())

using (ProcessModule curModule = curProcess.MainModule)

{

return SetWindowsHookEx(WH_KEYBOARD_LL, proc, GetModuleHandle(curModule.ModuleName), 0);

}

}

private delegate IntPtr LowLevelKeyboardProc(int nCode, IntPtr wParam, IntPtr lParam);

private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)

{

if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN)

{

int vkCode = Marshal.ReadInt32(lParam);

Debug.Log("ASCII:" + vkCode);

}

return CallNextHookEx(_hookID, nCode, wParam, lParam);

}

void OnApplicationQuit()

{

UnhookWindowsHookEx(_hookID);

}

}

相关文章

  • UNITY pc端在后台运行情况下也调用之全局钩子

    PC端 通过调用钩子实现键盘的全局捕获 搞了一天生气 下面贴代码 using UnityEngine;using ...

  • Git_钩子工作原理

    Git可以定制一些钩子,这些钩子可以在特定的情况下被执行,分为Client端的钩子和Server端的钩子。Clie...

  • 电商功能

    PC端前台 移动端 管理后台

  • 2019-07-26

    一、adb组成 1.客户端 2.运行在pc端服务 3.adb后台进程 adb shell ps | findstr...

  • git hook

    钩子定义 Git 可以定制一些钩子,这些钩子可以在特定的情况下被执行,分为 Client 端的钩子和 Server...

  • unity编译时判断系统

    当选择#elif UNITY_STANDALONE时通配pc端

  • Unity发布exe去窗口设置分辨率

    前段时间做游戏pc端,要求exe运行去窗口,还要固定分辨率unity有设置分辨率的API:Screen.SetRe...

  • vue路由钩子

    路由钩子 1.全局钩子2.某个路由独享钩子3.组件内钩子 全局钩子 beforeEach(全局前置守卫)、afte...

  • Unity 运行时显示Log工具Log Viewer

    Unity导出到安卓后log查看一直不太方便,或者有些PC的电脑没有安装Unity,但又想查看Log。PC端可以找...

  • vue2.0全局路由守卫(全局控制登录)

    例: 全局后置钩子 你也可以注册全局后置钩子,然而和守卫不同的是,这些钩子不会接受 next 函数也不会改变导航本...

网友评论

      本文标题:UNITY pc端在后台运行情况下也调用之全局钩子

      本文链接:https://www.haomeiwen.com/subject/tffkqxtx.html