Exemplo n.º 1
0
        // 生成と終了


        /// <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>());
        }
Exemplo n.º 2
0
        // 生成と終了


        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))
Exemplo n.º 3
0
        // 生成と終了


        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>());
        }