keybd_eventは正常に動作していますか?(実際にはキー入力をしていないのに"押しています"が表示されるという認識でいいですか?)
また、keybd_eventを使わねばならない明確な理由がありますか?(無理に外部dllを用いるよりは別の方法でカバーした方が安定するかもしれません)
前提・実現したいこと
keybd_eventの キーが押し続けられる。
キーを上げるための0x2が反応しない。
発生している問題・エラーメッセージ
押していません が出ない。
該当のソースコード
using UnityEngine; using System.Collections; using System.Runtime.InteropServices; public class ToggleCapsLock : MonoBehaviour { [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true, CallingConvention = CallingConvention.Winapi)] private static extern short GetKeyState(int keyCode); [DllImport("user32.dll")] private static extern int GetKeyboardState(byte[] lpKeyState); [DllImport("user32.dll", EntryPoint = "keybd_event")] private static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, int dwExtraInfo); private const uint KEYEVENTF_EXTENDEDKEY = 1; private const int KEYEVENTF_KEYUP = 0x2; private const int KEYEVENTF_KEYDOWN = 0x0; private void Update() { keybd_event(0x31, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYDOWN, 0); if (Input.GetKey("1")) { Debug.Log("押しています"); keybd_event(0x31, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0); if (Input.GetKey("1")) { } else { Debug.Log("押していません"); } } } }
試したこと
コピペをして自分なりに分解構築
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
あなたの回答
tips
プレビュー