Программа обработки события нажатия внешней кнопки - 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
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9. using System.Text.RegularExpressions;
  10. using System.IO;
  11. using System.Drawing.Imaging;
  12. using System.Runtime.InteropServices;
  13. using System.Media;
  14.  
  15.  
  16. namespace MusicalButton
  17. {
  18.     public partial class Form1 : Form
  19.     {
  20.         private static SoundPlayer player;
  21.         public Form1()
  22.         {
  23.             InitializeComponent();
  24.             ToolStripMenuItem ExitMenuItem = new ToolStripMenuItem("Exit");
  25.             contextMenuStrip1.Items.AddRange(new[] { ExitMenuItem });
  26.             notifyIcon1.ContextMenuStrip=contextMenuStrip1;
  27.             ExitMenuItem.Click += ExitMenuItem_Click;
  28.         }
  29.        
  30.         void Form1Load(object sender, EventArgs e)
  31.         {
  32.             myOneAndOnlyForm = this;
  33.             this.WindowState = FormWindowState.Minimized;
  34.             this.ShowInTaskbar = false;
  35.             this.Visible=false;
  36.             SetHook();            
  37.         }
  38.        
  39.         void ExitMenuItem_Click(object sender, EventArgs e)
  40.         {
  41.             UnHook();
  42.             this.Close();
  43.         }
  44.  
  45.         public static void PlayMusic(Form1 form)
  46.         {
  47.             player = new SoundPlayer();
  48.             player.SoundLocation = @"C:\k.wav";
  49.             player.Play();
  50.         }
  51.  
  52.  
  53.         private static Form1 myOneAndOnlyForm = null;
  54.  
  55.                 // ... { GLOBAL HOOK }
  56.         [DllImport("user32.dll")]
  57.         static extern IntPtr SetWindowsHookEx(int idHook, LowLevelKeyboardProc callback, IntPtr hInstance, uint threadId);
  58.  
  59.         [DllImport("user32.dll")]
  60.         static extern bool UnhookWindowsHookEx(IntPtr hInstance);
  61.  
  62.         [DllImport("user32.dll")]
  63.         static extern IntPtr CallNextHookEx(IntPtr idHook, int nCode, int wParam, IntPtr lParam);
  64.  
  65.         [DllImport("kernel32.dll")]
  66.         static extern IntPtr LoadLibrary(string lpFileName);
  67.  
  68.         private delegate IntPtr LowLevelKeyboardProc(int nCode, IntPtr wParam, IntPtr lParam);
  69.  
  70.         const int WH_KEYBOARD_LL = 13; // Номер глобального LowLevel-хука на клавиатуру
  71.         const int WM_KEYDOWN = 0x100; // Сообщения нажатия клавиши
  72.  
  73.         private LowLevelKeyboardProc _proc = hookProc;
  74.  
  75.         private static IntPtr hhook = IntPtr.Zero;
  76.  
  77.         public void SetHook()
  78.         {
  79.             IntPtr hInstance = LoadLibrary("User32");
  80.             hhook = SetWindowsHookEx(WH_KEYBOARD_LL, _proc, hInstance, 0);
  81.         }
  82.  
  83.         public static void UnHook()
  84.         {
  85.             UnhookWindowsHookEx(hhook);
  86.         }
  87.  
  88.         public static IntPtr hookProc(int code, IntPtr wParam, IntPtr lParam)
  89.         {
  90.             if (code >= 0 && wParam == (IntPtr)WM_KEYDOWN)
  91.             {
  92.                 int vkCode = Marshal.ReadInt32(lParam);
  93.                 //////ОБРАБОТКА НАЖАТИЯ
  94.                 if (vkCode.ToString() == "219")
  95.                 {
  96.                     PlayMusic(myOneAndOnlyForm);        
  97.                 }
  98.                 return (IntPtr)1;
  99.             }
  100.             else
  101.                 return CallNextHookEx(hhook, code, (int)wParam, lParam);
  102.         }
  103.     }
  104. }

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


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

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

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут