Программа обработки события нажатия внешней кнопки - C#

Узнай цену своей работы

Формулировка задачи:

Всем привет! Мне понадобилась приставка к ПК в виде кнопки. Подключается по USB и при нажатии на неё воспроизводилась бы мелодия на ПК. Поиск нечто подобного привёл меня на этот сайт http://blog.flipwork.nl/?x=entry:entry081009-142605 В это проекте при нажатии на кнопку эмулируется нажатие на символ “[ или ]” Из проекта: What does it do? This 1-Key-Keyboard can be plugged into any computer and will be recognised as a standard USB keyboard. When closing the switch, the keystroke ‘]’ will be sent. When opening the switch, the keystoke ‘[’ will be sent. Собственно собрать кнопку и прошить МК не проблема. Возможно, мне даже удастся изменить символ (если это необходимо). Но проблема в ответной программе на ПК. Какая задача программы. 1) Должна быть в трее (можно даже без формы) 2) При отлове символа воспроизводила звуковой файл (который лежит в заранее оговоренном месте (то есть программа без настроек)). 2.1) Если есть возможность так сделать. Как только программа ловит символ. Все звуки и музыка воспроизводящиеся в данный момент затихали. Проигрывала заданную мелодию. А потом опять все звуки и музыку запускала бы вновь. (Или если быть точнее, то просто уменьшала бы громкость музыки до 0 а потом восстанавливала.) Собственно есть ли возможность написать подобную программу? Или я слишком многого хочу? Про себя: Программировал я очень давно. И то так…… пару раз что то написал и всё. Я даже не знаю с чего и начать… В общем пока всё печально

Решение задачи: «Программа обработки события нажатия внешней кнопки»

textual
Листинг программы
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Text.RegularExpressions;
using System.IO;
using System.Drawing.Imaging;
using System.Runtime.InteropServices;
using System.Media;
 
 
namespace MusicalButton
{
    public partial class Form1 : Form
    {
        private static SoundPlayer player;
        public Form1()
        {
            InitializeComponent();
            ToolStripMenuItem ExitMenuItem = new ToolStripMenuItem("Exit");
            contextMenuStrip1.Items.AddRange(new[] { ExitMenuItem });
            notifyIcon1.ContextMenuStrip=contextMenuStrip1;
            ExitMenuItem.Click += ExitMenuItem_Click;
        }
        
        void Form1Load(object sender, EventArgs e)
        {
            myOneAndOnlyForm = this;
            this.WindowState = FormWindowState.Minimized;
            this.ShowInTaskbar = false;
            this.Visible=false; 
            SetHook();            
        }
        
        void ExitMenuItem_Click(object sender, EventArgs e)
        {
            UnHook();
            this.Close();
        }
 
        public static void PlayMusic(Form1 form)
        {
            player = new SoundPlayer();
            player.SoundLocation = @"C:\k.wav";
            player.Play();
        }
 
 
        private static Form1 myOneAndOnlyForm = null;
 
                // ... { GLOBAL HOOK }
        [DllImport("user32.dll")]
        static extern IntPtr SetWindowsHookEx(int idHook, LowLevelKeyboardProc callback, IntPtr hInstance, uint threadId);
 
        [DllImport("user32.dll")]
        static extern bool UnhookWindowsHookEx(IntPtr hInstance);
 
        [DllImport("user32.dll")]
        static extern IntPtr CallNextHookEx(IntPtr idHook, int nCode, int wParam, IntPtr lParam);
 
        [DllImport("kernel32.dll")]
        static extern IntPtr LoadLibrary(string lpFileName);
 
        private delegate IntPtr LowLevelKeyboardProc(int nCode, IntPtr wParam, IntPtr lParam);
 
        const int WH_KEYBOARD_LL = 13; // Номер глобального LowLevel-хука на клавиатуру
        const int WM_KEYDOWN = 0x100; // Сообщения нажатия клавиши
 
        private LowLevelKeyboardProc _proc = hookProc;
 
        private static IntPtr hhook = IntPtr.Zero;
 
        public void SetHook()
        {
            IntPtr hInstance = LoadLibrary("User32");
            hhook = SetWindowsHookEx(WH_KEYBOARD_LL, _proc, hInstance, 0);
        }
 
        public static void UnHook()
        {
            UnhookWindowsHookEx(hhook);
        }
 
        public static IntPtr hookProc(int code, IntPtr wParam, IntPtr lParam)
        {
            if (code >= 0 && wParam == (IntPtr)WM_KEYDOWN)
            {
                int vkCode = Marshal.ReadInt32(lParam);
                //////ОБРАБОТКА НАЖАТИЯ
                if (vkCode.ToString() == "219")
                {
                    PlayMusic(myOneAndOnlyForm);         
                }
                return (IntPtr)1;
            }
            else
                return CallNextHookEx(hhook, code, (int)wParam, lParam);
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.833 из 5