1. #1

    Registriert seit
    01.12.2011
    Beiträge
    135
    Thanked 75 Times in 53 Posts

    Standard ...............

    Hallo Leute, ich hoffe ihr könnt mir hier weiter helfen.

    ich habe die globalKeyHook-Klasse und den Quelltext von folgender Seite entnommen: A Simple C# Global Low Level Keyboard Hook - CodeProject

    Mein Code ist folgender
    using System;
    using System.Windows.Forms;
    using Utilities;

    namespace Bind
    {
    public partial class Form1 : Form
    {
    public Form1()
    {
    InitializeComponent();

    globalKeyboardHook gkh = new globalKeyboardHook();
    gkh.HookedKeys.Add(Keys.A);
    gkh.KeyPressed += new KeyEventHandler(gkh_KeyPressed);
    }

    void gkh_KeyPressed(object sender, KeyEventArgs e)
    {
    //Folgende Methode funktioniert einwandfrei
    //MessageBox.Show("Du hast etwas gedrueckt");

    //Bei der kopieren()-Methode tritt das Problem auf
    kopieren();
    e.Handled = true;
    }
    }
    }
    }


    Das Problem ist, wenn ich die MessageBox.Show()-Methode ausführe, denn klappt alles wunderbar. Ich kann beliebig oft die A-Taste drücken und immer kommt eine Meldung.

    Wenn ich allerdings die kopieren()-Methode anwende, denn funktioniert der A-Knopf nur einmalig. Sollte ich danach irgendwelche anderen Tasten drücken, so schmiert das Programm ab und ich erhalte eine Fehlermeldung:



    Die Kopieren-Methode macht folgendes:
    1. Sie kopiert eine .LOG-Datei und speichert sie als .txt-Datei.
    2. Die .txt-Datei wird in eine Textbox geladen
    3. Die Textbox wird von unten beginnend auf ein bestimmtes Zeichen untersucht
    4. Wenn das Zeichen auftaucht, denn wird die Zeile, in der das Zeichen auftaucht, im string gespeichert.
    5. Der string (Textzeile) wird in eine zweite Textbox übergeben
    6. Die zweite Textbox wird als .CFG-Datei gespeichert

    Soweit so gut: die kopieren()-Methode funktioniert ohne KeyHook soweit ganz gut...

            private void kopieren()
    {

    //1. Schritt: Datei kopieren und neu speichern
    string fileName = "qconsole.LOG";
    string sourcePath = @"C:\Program Files (x86)\Soldier of Fortune II - Double Helix MP TEST\demo\MP\";
    string targetPath = @"C:\Program Files (x86)\Soldier of Fortune II - Double Helix MP TEST\demo\MP\";
    string sourceFile = System.IO.Path.Combine(sourcePath, fileName);
    string destFile = System.IO.Path.Combine(targetPath, "sbind.txt");
    System.IO.File.Copy(sourceFile, destFile, true);
    //string[] files = System.IO.Directory.GetFiles(sourcePath);

    //2. Schritt: Datei wird in Textbox geladen
    richTextBox1.LoadFile(@"C:\Program Files (x86)\Soldier of Fortune II - Double Helix MP TEST\demo\MP\sbind.txt", RichTextBoxStreamType.PlainText);

    //3. Schritt: Textbox wird von hinten beginnend untersucht
    string temp = "";
    for (int i = richTextBox1.Text.Length - 1; i > 0; i--)
    {
    if (richTextBox1.Text[i] == ':')
    {

    //4. Schritt: Die Zeile in der das Zeichen ":" auftaucht wird im string temp gespeichert
    for (int j = i + 1; j < richTextBox1.Text.Length; j++)
    {
    temp += richTextBox1.Text[j];
    if (richTextBox1.Text[j] == '\n')
    j = richTextBox1.Text.Length;
    }

    //5. Schritt: der string temp wird in der 2. Textbox gespeichert
    i = 0; richTextBox2.Text = "say " + temp;
    }
    }

    //6. Schritt: Die zweite Textbox wird gespeichert
    richTextBox2.SaveFile(@"C:\Program Files (x86)\Soldier of Fortune II - Double Helix MP TEST\demo\output.CFG", RichTextBoxStreamType.PlainText);

    }


    Habt ihr vielleicht eine Ahnung?

    Lieben Gruß
    Geändert von Gast78236 (24.10.2014 um 12:35 Uhr)

  2. #2

    Registriert seit
    01.12.2011
    Beiträge
    135
    Thanked 75 Times in 53 Posts

    Standard AW: C# KeyHook-Fehler: CallbackOnCellectedDelegate

    Push it : ) :
    Geändert von Gast78236 (24.10.2014 um 12:35 Uhr)

  3. #3

    Registriert seit
    12.10.2014
    Beiträge
    23
    Thanked 0 Times in 0 Posts

    Standard AW: C# KeyHook-Fehler: CallbackOnCellectedDelegate

    Hey, ich besuche eine HTL und wir programmieren auch mit C#, ich kann bei dem kleinen Stück code nichts anfangen, aber ich kann dir nur sagen debuggen debuggen debuggen... Oder einen try und catch block um das ganze.

  4. #4

    Registriert seit
    12.12.2011
    Beiträge
    39
    Thanked 24 Times in 16 Posts

    Standard AW: C# KeyHook-Fehler: CallbackOnCellectedDelegate

    Hast du bereits versucht, die Vorschläge aus der Comments Section umzusetzen?
    A Simple C# Global Low Level Keyboard Hook - CodeProject

    Weitere Informationen: callbackOnCollectedDelegate MDA

    Das Problem scheint auch nicht immer aufzutreten, sondern eher zufällig, wodurch ein Reproduzieren des Fehlers schwer ist.
    Geändert von KrT (21.10.2014 um 19:22 Uhr)

  5. The Following User Says Thank You to KrT For This Useful Post:

    Integer (21.10.2014)

  6. #5
    Avatar von patlux
    Registriert seit
    26.10.2011
    Beiträge
    1.195
    Thanked 1.596 Times in 725 Posts
    Blog Entries
    2

    Standard AW: C# KeyHook-Fehler: CallbackOnCellectedDelegate

    Geh mal so vor: Du kommentierst die letzte Codezeile von der "kopieren"-Methode aus. Gehts dann? Wenn nicht, kommentiere die nächste aus usw. Sobald es geht, weißt du so ungefähr an welcher Zeile es hängt. So mach ich das meistens, wenn debuggen nicht hilft.

    Ansonsten, die "Kopieren"-Funktion mal asynchron aufrufen.

    Hat es eigentlich irgendeinen Zweck die Datei erst zu kopieren, dann auszulesen und dann erst auf den Inhalt zu überprüfen? Warum nicht sofort die Sourcedatei auslesen und überprüfen?

  7. #6
    Avatar von Nuebel
    Registriert seit
    23.11.2013
    Beiträge
    446
    Thanked 361 Times in 236 Posts

    Standard AW: C# KeyHook-Fehler: CallbackOnCellectedDelegate

    Zitat Zitat von KrT
    Das Problem scheint auch nicht immer aufzutreten, sondern eher zufällig, wodurch ein Reproduzieren des Fehlers schwer ist.
    Weil die Garbage Collection nicht immer zum selben Zeitpunkt anfängt zu arbeiten.

    @TE
    Du kannst erst einmal das aus der Comment-Section ausprobieren (einen Link dazu hat KrT bereits gepostet), ansonsten kannst du versuchen, mit der KeepAlive-Methode der Klasse GC, das Delegate keyboardHookProc am Leben zu erhalten.

  8. #7

    Registriert seit
    01.12.2011
    Beiträge
    135
    Thanked 75 Times in 53 Posts

    Standard AW: C# KeyHook-Fehler: CallbackOnCellectedDelegate

    Hey, erstmal herzlichen Dank für die zahlreichen Hilfestellungen! Ich werde das an einem anderen Zeitpunkt noch mal prüfen und dann berichten!

    Zitat Zitat von patlux Beitrag anzeigen
    Hat es eigentlich irgendeinen Zweck die Datei erst zu kopieren, dann auszulesen und dann erst auf den Inhalt zu überprüfen? Warum nicht sofort die Sourcedatei auslesen und überprüfen?
    Die Datei wird von anderen Programmen verwendet und ich habe es anders erst mal nicht geschafft, die Datei einzulesen. Darum habe ich sie kopiert und dann eingelesen. Ich glaube aber auch, dass es Probleme gab eine .LOG-Datei in die Textbox zu laden.
    Geändert von Gast78236 (24.10.2014 um 12:35 Uhr)

Ähnliche Themen

  1. [CS:GO] Fehler
    Von Gangstersheep im Forum Counter Strike
    Antworten: 0
    Letzter Beitrag: 03.11.2012, 22:24
  2. SSL-FEHLER
    Von Kingbubi2 im Forum Software
    Antworten: 2
    Letzter Beitrag: 26.06.2012, 21:31
  3. Fehler
    Von helfen im Forum Fragen & Probleme
    Antworten: 6
    Letzter Beitrag: 06.03.2012, 18:13
  4. [Fehler] Aktivitätsbalken?
    Von Invicible im Forum Support
    Antworten: 1
    Letzter Beitrag: 15.02.2012, 17:27
  5. CSS und PHP fehler
    Von AnqeL im Forum Skriptsprachen
    Antworten: 15
    Letzter Beitrag: 21.07.2011, 21:35
Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.