Entwickler-Ecke

WinForms - HotKeys - Button drücken


Lihlu - Di 31.07.12 13:54
Titel: HotKeys - Button drücken
Hallo alle zsm,

Zuerst mein HotKey Script:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
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.Runtime.InteropServices;


namespace HotKeys
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            
        }
        [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);

        const int MOD_CONTROL = 0x0002;
        const int MOD_SHIFT = 0x0004;
        const int WM_HOTKEY = 0x0312;

        private void button1_Click(object sender, EventArgs e)
        {
            label1.Text = "Hallo :D";
            
        }

        private void button2_Click(object sender, EventArgs e)
        {
            label1.Text = "";
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            

            RegisterHotKey(this.Handle, 1, MOD_CONTROL , (int)Keys.X);
            RegisterHotKey(this.Handle, 2, MOD_CONTROL , (int)Keys.Y);
            RegisterHotKey(this.Handle, 3, MOD_CONTROL, (int)Keys.Z);
            RegisterHotKey(this.Handle, 4 ,MOD_CONTROL,(int)Keys.F1);
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            UnregisterHotKey(this.Handle, 1);
        }

        protected override void WndProc(ref Message m)
        {
            if (m.Msg == WM_HOTKEY && (int)m.WParam == 1)
            {
                //Hier soll Button 1 geklickt werden
                progressBar1.Value=0;
                MessageBox.Show("Hotkey X erhalten.");  
            }
                

            if (m.Msg == WM_HOTKEY && (int)m.WParam == 2)
            {
                //Hier soll Button 2 geklickt werden
                progressBar1.Value = 100;
                MessageBox.Show("Hotkey Y erhalten.");
             
            }
            if (m.Msg == WM_HOTKEY && (int)m.WParam == 3)
                //Code
                {
                MessageBox.Show("Hotkey Z erhalten.");
                
            }
            if (m.Msg == WM_HOTKEY && (int)m.WParam == 4)
                //Code
            { 
                MessageBox.Show("Hotkey F1 erhalten.");
                
        }
            base.WndProc(ref m);
           


        }
    }
}


Ich möchte nun gerne wenn man STRG+X drückt das Button 1 gedrückt wird, nur wie stelle ich das an ?

Oder ist das in diesem fall überhaupt möglich?

Gruß
Lihlu


HeftCD - Mi 01.08.12 11:48


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
if (m.Msg == WM_HOTKEY && (int)m.WParam == 1)
            {
                //Hier soll Button 1 geklickt werden
                progressBar1.Value=0;
//                MessageBox.Show("Hotkey X erhalten.");  <- WEG und dafür:
Button1.click;
            }


so, wäre jetzt meine Idee.

Wobei es glaub ich immer gut ist, die Funktionen in den Buttonprozeduren in eigene auszulagern und in die Button~ nur den Aufruf einbaut, da man da später besser eben auch von anderer Stelle die Funktionen aufrufen kann, auch ohne den Button drücken zu müssen. (z.B. wenn noch weitere/andere Bedingungen mitberücksichtig werden sollen)


Ralf Jansen - Mi 01.08.12 11:57

Du willst nicht das der Button ausgeführt wird sondern das das gleiche passiert das auch passieren würde wenn auf den Button geklickt wird.
Funktionalität gehört in Methoden also pack das was im Click EventHandler steht in eine Methode und rufe die Methode dann einfach von deinem Click EventHandler aus auf und aus deinem HotKey Code in der WndProc.


Palladin007 - Mi 01.08.12 13:28

Schau doch mal hier:

http://msdn.microsoft.com/de-de/library/system.windows.forms.button.performclick.aspx

Ich habs noch nicht getestet, nur fix gegooglet und ich kannte es auch noch nicht, aber es klingt auf jeden Fall interessant.