Программа обработки события нажатия внешней кнопки - 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);
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д