2011-06-09 35 views
0

我正在制作一个程序,使用热键的各种事情。 这些热键将是用户可设置的,因此如果这些热键将在退出时保存,则会很好。 由于键盘上的按键数量非常大(包括OEM按键等),因此我不会对IF大量的怪物感到温暖。保存System.Windows.Forms.Keys作为设置

我尝试使用内置设置thingamajigg(Properties.Settings.Default等)但它似乎并没有妥善保存键。 (这还是我做错了什么)

这是我现在正在使用这种权利代码:

// (..some code ommitted) 
if (comboBox_hotkeys_uploadclipboard_modifier.SelectedText != "" && comboBox_hotkeys_uploadclipboard_key.SelectedText != "") 
{ 
    if (comboBox_hotkeys_uploadclipboard_modifier.SelectedText == "None") 
     Properties.Settings.Default.hotkeys_uploadclipboard_modifier = 0; 
    else 
     Properties.Settings.Default.hotkeys_uploadclipboard_modifier = modifierdict[comboBox_hotkeys_uploadclipboard_modifier.SelectedText]; 
    Properties.Settings.Default.hotkeys_uploadclipboard_key = keydict[comboBox_hotkeys_uploadclipboard_key.SelectedText]; 
} 
Properties.Settings.Default.Save(); 
return true; 

,并在节目的一开始,我做的事:

Dictionary<string, uint> modifierdict = new Dictionary<string, uint>(); 
Dictionary<string, Keys> keydict = new Dictionary<string, Keys>(); 

public Form_stuff() 
{ 
    for (int i = 0; i < Enum.GetNames(typeof(ModifierKeysH)).Length; i++) 
    { 
     modifierdict.Add(Enum.GetNames(typeof(ModifierKeysH))[i], (uint)Enum.GetValues(typeof(ModifierKeysH)).GetValue(i)); 
    } 
    for (int i = 0; i < Enum.GetNames(typeof(Keys)).Length; i++) 
    { 
     keydict.Add(Enum.GetNames(typeof(Keys))[i], (Keys)Enum.GetValues(typeof(Keys)).GetValue(i)); 
    } 
} 

但是,它似乎并没有实际保存密钥,或者在下次启动程序时加载它们。 (是的,我也有该代码)

有人知道一个(简单)的方式吗?

编辑:

这是我使用的设置热键的代码,而互操作件等,这些在别处托管代码:

public void SetKeyboardHooks() 
    { 
     if (!(kbhook == null)) 
      kbhook.Dispose(); 
     kbhook = new KeyboardHook(); 
     //Set clipboard upload hotkey 
     kbhook.RegisterHotKey((ModifierKeysH)Properties.Settings.Default.hotkeys_uploadclipboard_modifier, Properties.Settings.Default.hotkeys_uploadclipboard_key); 
     kbhook.KeyPressed += new EventHandler<KeyPressedEventArgs>(kbhook_KeyPressed); 
    } 

    void kbhook_KeyPressed(object sender, KeyPressedEventArgs e) 
    { 
     if (e.Modifier == (ModifierKeysH)Properties.Settings.Default.hotkeys_uploadclipboard_modifier && e.Key == Properties.Settings.Default.hotkeys_uploadclipboard_key) 
     { 
      string url = Functions.UploadClipboard(); 
      Clipboard.SetText(url); 
      hificon.ShowBalloonTip(5000, "Upload succesful!", "Uploaded to: " + url,ToolTipIcon.Info); 
     } 
    } 

正如你所看到的代码是远完了。这只是我试图克服的障碍.. 似乎并没有工作的主要事实是热键实际上并没有得到保护。设置似乎不喜欢System.Windows.Forms.Keys,然后也跳过保存为uint的ModifierkeysH部分。

+0

你到底在做什么?您的应用是否有一定数量的热键,用户可以映射到不同的动作,或者您的应用是否有一定量的用户可以映射到他希望的热键的动作? – InBetween 2011-06-09 12:18:39

+0

该应用程序有一定的操作 - 上传剪贴板内容,制作截图等。这是一个非常灵活的屏幕应用程序,除了更轻,更少。用户然后将热键映射到每个动作。然后该程序必须记住那些热键。我会添加更多的代码。 – Alex 2011-06-09 14:12:41

回答

0

虚惊一场的人,它的工作原理与它应该一样,除了某些原因,组合框没有用.SelectedValue返回一个值,而是因为某些原因必须使用.SelectedItem。 无论如何,它现在完美无瑕。感谢每个人的时间,并且可能这个线程在未来面对别人,因为没有使用.SelectedItem。