// 生成と終了 /// <summary> /// コンストラクタ。 /// ゲームコントローラデバイスをRawInputに登録する。 /// </summary> /// <param name="hWindow"> /// 対象とするウィンドウのハンドル。<see cref="IntPtr.Zero"/> にすると、キーボードフォーカスに追従する。 /// </param> public GameControllersHID(IntPtr hWindow, SoundTimer soundTimer) { using var _ = new LogBlock(Log.現在のメソッド名); this._SoundTimer = soundTimer; this.入力イベントリスト = new List <InputEvent>(); this.Devices = new Dictionary <IntPtr, GameControllerHIDProperty>(); // 登録したいデバイスの配列(ここでは2個)。 var devs = new RawInput.RawInputDevice[] { new RawInput.RawInputDevice { usUsagePage = UsagePage.Generic, // Genericページの usUsage = UsageId.GenericGamepad, // Genericゲームパッドと、 Flags = RawInput.DeviceFlags.None, hwndTarget = hWindow, }, new RawInput.RawInputDevice { usUsagePage = UsagePage.Generic, // Genericページの usUsage = UsageId.GenericJoystick, // Genericジョイスティック。 Flags = RawInput.DeviceFlags.None, hwndTarget = hWindow, } }; // デバイスを登録。 RawInput.RegisterRawInputDevices(devs, devs.Length, Marshal.SizeOf <RawInput.RawInputDevice>()); }
// 生成と終了 public MidiIns(SoundTimer soundTimer) { using var _ = new LogBlock(Log.現在のメソッド名); this._SoundTimer = soundTimer; // コールバックをデリゲートとして生成し、そのデリゲートをGCの対象から外す。 this._midiInProc = new MidiInProc(this.MIDI入力コールバック); this._midiInProcGCh = GCHandle.Alloc(this._midiInProc); // デバイス数を取得。 uint MIDI入力デバイス数 = midiInGetNumDevs(); Log.Info($"MIDI入力デバイス数 = {MIDI入力デバイス数}"); // すべてのMIDI入力デバイスについて... for (uint id = 0; id < MIDI入力デバイス数; id++) { // デバイス名を取得。 var caps = new MIDIINCAPS(); midiInGetDevCaps(id, ref caps, Marshal.SizeOf(caps)); this.DeviceName.Add(caps.szPname); Log.Info($"MidiIn[{id}]: {caps.szPname}"); // MIDI入力デバイスを開く。コールバックは全デバイスで共通。 IntPtr hMidiIn = default; if ((0 == midiInOpen(ref hMidiIn, id, this._midiInProc, default, CALLBACK_FUNCTION)) && (default != hMidiIn))
// 生成と終了 public KeyboardHID(SoundTimer soundTimer) { using var _ = new LogBlock(Log.現在のメソッド名); this._SoundTimer = soundTimer; // 登録したいデバイスの配列(ここでは1個)。 var devs = new RawInput.RawInputDevice[] { new RawInput.RawInputDevice { usUsagePage = UsagePage.Generic, // Genericページの usUsage = UsageId.GenericKeyboard, // Genericキーボード。 Flags = RawInput.DeviceFlags.None, hwndTarget = IntPtr.Zero, }, }; // デバイスを登録。 RawInput.RegisterRawInputDevices(devs, 1, Marshal.SizeOf <RawInput.RawInputDevice>()); }