Любая горячая клавиша, которую я хочу зарегистрировать, похоже, уже занята.C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Любая горячая клавиша, которую я хочу зарегистрировать, похоже, уже занята.

Сообщение Anonymous »

Я пытаюсь зарегистрировать глобальную горячую клавишу в Visual C# 2012, создать целевую платформу .NET3, после использования http://www.dreamincode.net/forums/topic ... l-hotkeys/ в качестве руководства я получил следующие (сокращенные) файлы:
  • GlobalHotkey.cs

    Код: Выделить всё

    using System;
    using System.Windows.Forms;
    using System.Runtime.InteropServices;
    
    namespace barcodelabel
    {
    public class GlobalHotkey
    {
    private int modifier;
    private int key;
    private IntPtr hWnd;
    private int id;
    
    public GlobalHotkey(int modifier, Keys key, Form form)
    {
    this.modifier = modifier;
    this.key = (int)key;
    this.hWnd = form.Handle;
    id = this.GetHashCode();
    }
    
    public bool Register()
    {
    return RegisterHotKey(hWnd, id, modifier, key);
    }
    
    public bool Unregister()
    {
    return UnregisterHotKey(hWnd, id);
    }
    
    public override int GetHashCode()
    {
    return modifier ^ key ^ hWnd.ToInt32();
    }
    
    [DllImport("user32.dll")]
    private static extern bool RegisterHotKey(IntPtr hWnd, int id, int fsModifiers, int vk);
    
    [DllImport("user32.dll")]
    private static extern bool UnregisterHotKey(IntPtr hWnd, int id);
    }
    }
    
  • GlobalHotkeyConstants.cs

    Код: Выделить всё

    using System;
    using System.Collections.Generic;
    using System.Text;
    
    namespace barcodelabel
    {
    class GlobalHotkeyConstants
    {
    public const int NOMOD = 0x0000;
    public const int ALT = 0x0001;
    public const int CTRL = 0x0002;
    public const int SHIFT = 0x0004;
    public const int WIN = 0x0008;
    
    //windows message id for hotkey
    public const int WM_HOTKEY_MSG_ID = 0x0312;
    
    }
    }
    
  • Моя форма1.cs

    Код: Выделить всё

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Windows;
    using System.Windows.Forms;
    using System.Runtime.InteropServices;
    using Microsoft.Win32;
    
    namespace barcodelabel
    {
    public partial class Form1 : Form
    {
    
    private GlobalHotkey ghk;
    
    protected override void WndProc(ref Message m)
    {
    if (m.Msg == GlobalHotkeyConstants.WM_HOTKEY_MSG_ID) {
    MessageBox.Show("HOTKEY PRESSED");
    
    }
    base.WndProc(ref m);
    }
    
    public Form1()
    {
    InitializeComponent();
    this.ghk = new GlobalHotkey(GlobalHotkeyConstants.SHIFT,  Keys.F10, this);
    }
    
    private void Form1_Load(object sender, EventArgs e)
    {
    if (!this.ghk.Register())
    {
    MessageBox.Show("Hotkey could not be registered");
    }
    }
    
    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
    this.ghk.Unregister();
    }
    }
    
Какую бы горячую клавишу я ни выбрал, ее невозможно зарегистрировать. Я попробовал использовать Hotkey Explorer с http://hkcmdr.anymania.com/, чтобы проверить, занята ли горячая клавиша, но мне сказали, что она бесплатна.

Что могу ли я это сделать?

Подробнее здесь: https://stackoverflow.com/questions/248 ... y-be-taken
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»