Autor Beitrag
Hm...
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Do 26.03.09 23:07 
Hallo, ich habe ein Problem. Und zwar habe ich Globale Hooks in meinem Programm. Diese werden mit dieser Klasse erstellt. Wenn ich jedoch auf einen Button klicke und dann irgendeine Taste drücke, bekomme ich eine "CallBackOnCollectedDelegate wurde gefunden!"-Meldung. Woran liegt das? Hier der Code:
ausblenden C#-Quelltext
1:
2:
3:
        public bool IsActive = false
        ...
        globalKeyboardHook gkh = new globalKeyboardHook();

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
        private void Form1_Load(object sender, EventArgs e)
        {
            ...
            gkh.HookedKeys.Add(Keys.F1);
            gkh.HookedKeys.Add(Keys.F2);
            gkh.HookedKeys.Add(Keys.F3);
            gkh.HookedKeys.Add(Keys.F4);
            gkh.HookedKeys.Add(Keys.F5);
            gkh.HookedKeys.Add(Keys.F6);
            gkh.HookedKeys.Add(Keys.F7);
            gkh.HookedKeys.Add(Keys.F8);
            gkh.HookedKeys.Add(Keys.F9);
            gkh.HookedKeys.Add(Keys.F10);
            gkh.HookedKeys.Add(Keys.F11);
            gkh.HookedKeys.Add(Keys.F12);
            gkh.KeyDown += new KeyEventHandler(gkh_KeyDown);
            gkh.KeyUp += new KeyEventHandler(gkh_KeyUp);
            ...
        }

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
        private void button2_Click(object sender, EventArgs e)
        {
            if (string.Equals(button2.Text, "Hotkeys aktivieren"))
            {
                button2.Text = "Hotkeys deaktivieren";
                IsActive = true;
            }
            else
            {
                button2.Text = "Hotkeys aktivieren";
                IsActive = false;
            }
        }

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
        void gkh_KeyUp(object sender, KeyEventArgs e)
        {
                if (e.KeyCode == Keys.F1 && IsActive)
                {
                    F1.Send();
                    e.Handled = true;
                }
                if (e.KeyCode == Keys.F2)
                {
                    F2.Send();
                    e.Handled = true;
                }
                ... //Geht dann genauso gleich bis F12 weiter
        }

Jemand eine Idee? Liegt's an der Klasse oder eher an mir?

Moderiert von user profile iconChristian S.: Code- durch C#-Tags ersetzt
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4807
Erhaltene Danke: 1061

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Fr 27.03.09 11:23 
Scheint das selbe Problem zu sein wie bei www.codeproject.com/...=2143152#xx2143152xx
d.h. man muß verhindern, daß der GC die Instanz löscht.

Die Lösung scheint die Änderung des Original-Source-Codes zu sein:
www.codeproject.com/...=2183087#xx2183087xx