Autor Beitrag
Lihlu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 53



BeitragVerfasst: Di 31.07.12 13:54 
Hallo alle zsm,

Zuerst mein HotKey Script:

ausblenden volle Höhe 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 91
Erhaltene Danke: 9

Win2k, WinXP, Win7, Win8
Delphi 3 Pro, Delphi 5, Delphi 7, Turbo Delphi, BC1
BeitragVerfasst: Mi 01.08.12 11:48 
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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.

Für diesen Beitrag haben gedankt: Lihlu
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: Mi 01.08.12 13:28 
Schau doch mal hier:

msdn.microsoft.com/d...on.performclick.aspx

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