<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Tasten-Hook, kurze Beschreibung für mich...]]></title><description><![CDATA[<p>Hallo Winapi-Forum,</p>
<p>Ich programmiere eigentlich C++/CLI aber nun brauch ich auch eure Hilfe... Ich möchte das mein Programm Tasten abfängt und sie in eine .txt schreibt. Mit C++/CLI klappt es Prima doch leider gibts da ein kleines Problem undzwar wenn meine Form inaktiv ist fängt sie die Tasten nicht ab... Deswegen will ich eine Winapi nebenbei laufen lassen die dies dann übernimmt. Ich hab mir schon im FAQ den Eintrag gesehen doch versteh ich nur Bahnhof und ich möchte mich mit WinApi auch nicht weiter auseinandersetzen.</p>
<pre><code class="language-cpp">#include &lt;windows.h&gt;
#include &quot;hookdll.h&quot;    /* -&gt; Siehe Oben */

// Weise den Compiler an, die Variable hWindow in einem
// separaten Abschnitt namens Shared unterzubringen
// Darüber hinaus ist dann auch noch dem Linker mitzuteilen,
// dass die Daten in diesem Abschnitt von allen Instanzen
// dieser Anwendung gemeinsam verwendet werden sollen.
// Ganz wichtig dabei ist, dass die Variablen initialisiert
// sein müssen.

#pragma data_seg (&quot;Shared&quot;)
HWND hWindow = 0 ;
#pragma data_seg ()

// Weise den Compilern, den Abschnitt Shared als lesbar,
// beschreibbar und zur gemeinsamen Verwendung zu deklarieren - &quot;RSW&quot;.

#pragma comment (linker, &quot;/section:Shared,RWS&quot;)

LRESULT CALLBACK KeyboardHookProc (int, WPARAM, LPARAM) ;
// Der Prototyp der Funktion KeyboardHookProc

HHOOK       hhkHook ;
HINSTANCE   hDllInstance ;
// Definition globaler Variablen

/************************************************************************/
/* DllMain: wird automatisch aufgerufen, wenn die DLL mit LoadLibrary() */
/*          geladen, oder mit FreeLibrary wieder freigegeben wird.      */
/* Eingabe Parameter: Systemspezifische Daten                           */
/* Return-Wert: TRUE                                                    */
/************************************************************************/

int APIENTRY DllMain (HINSTANCE hInstance, DWORD fdwReason, PVOID pvReserved){
    switch (fdwReason){
        case DLL_PROCESS_ATTACH :
            // Die DLL wird in den Adressraum des aktuellen Prozesses
            // eingeblendet.
            hDllInstance = hInstance ;
            // Initialisierung der globalen Variable
            break ;
    }  
    return TRUE ;
}

/***********************************************************/
/* SetupHook: EXPORT Funktion, setzt den Keyboardhook      */
/* Eingabe Parameter: HWND des aufrufenden Fensters        */
/* Return-Wert: TRUE                                       */
/***********************************************************/

EXPORT BOOL CALLBACK SetupHook (HWND hParent){
    hWindow = hParent ;
    // Initialisierung der globalen Variable mit dem Eingabe Parameter
    hhkHook = SetWindowsHookEx (WH_KEYBOARD, KeyboardHookProc, hDllInstance, NULL) ;
    // Keyboardhook setzen und das Ergebnis in der globalen Variable
    // hhkHook speichern.
    return TRUE ;
}

/*******************************************************************/
/* KeyboardHookProc: wird jedes mal aufgerufen, wenn eine Taste    */
/*                   betätigt wird                                 */
/* Eingabe Parameter: Systemspezifische Daten                     */
/* Return-Wert: s. u.                                              */
/*******************************************************************/

LRESULT CALLBACK KeyboardHookProc (int nCode, WPARAM wParam, LPARAM lParam){
    if (nCode == HC_ACTION){
    // Verhindern das eine Nachricht mehrmals verarbeitet wird.
        if ((lParam &amp; 1073741824) != 1073741824){
        // Überprüfen ab vor dem Aufruf dieser Funktion die Taste bereits gedrückt war
            SendMessage ((HWND) hWindow, (WM_USER + 2), (WPARAM) wParam, (LPARAM) lParam) ;
            // Senden der Nachricht (WM_USER + 2) und den Tastencode der gedrückten
            // Taste (gespeichert in &quot;wParam&quot;) an das in der globalen Variable
            // hWindow gespeicherte Fensterhandle.
        }
    }
    return CallNextHookEx (hhkHook, nCode, wParam, lParam) ;
    // Die Nachrichten an den nächsten Hook weiterreichen.
}

/*********************************************************************/
/* UninstalHook: EXPORT Funktion, löscht den über die Funktion       */
/*               SetupHook gesetzten Hook                            */
/* Eingabe Parameter: keine                                          */
/* Return-Wert: TRUE                                                 */
/*********************************************************************/

EXPORT BOOL CALLBACK UninstallHook (void){
    UnhookWindowsHookEx (hhkHook) ;
    // den in der globalen Variable hhkHook gespeicherten Hook löschen.
    return TRUE ;
}

/////////////////////////////////////////////////////////////////////
</code></pre>
<p>Wie ich hier sehe sind das nur Funktionen, ohne der Hauptfunktion. Wenn ich jetzt die Hauptfunktion schreiben würde wie würde es dann aussehen? Das er in die Txt die Taste schreibt. Reinschreiben werde ich mit fstream. Nur bräuchte ich den Namen der Taste. Könnt ihr mir weiter Helfen?</p>
<p>danke für Antworten <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/182307/tasten-hook-kurze-beschreibung-für-mich</link><generator>RSS for Node</generator><lastBuildDate>Tue, 07 Jul 2026 15:52:43 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/182307.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 23 May 2007 15:07:10 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Tasten-Hook, kurze Beschreibung für mich... on Wed, 23 May 2007 15:07:10 GMT]]></title><description><![CDATA[<p>Hallo Winapi-Forum,</p>
<p>Ich programmiere eigentlich C++/CLI aber nun brauch ich auch eure Hilfe... Ich möchte das mein Programm Tasten abfängt und sie in eine .txt schreibt. Mit C++/CLI klappt es Prima doch leider gibts da ein kleines Problem undzwar wenn meine Form inaktiv ist fängt sie die Tasten nicht ab... Deswegen will ich eine Winapi nebenbei laufen lassen die dies dann übernimmt. Ich hab mir schon im FAQ den Eintrag gesehen doch versteh ich nur Bahnhof und ich möchte mich mit WinApi auch nicht weiter auseinandersetzen.</p>
<pre><code class="language-cpp">#include &lt;windows.h&gt;
#include &quot;hookdll.h&quot;    /* -&gt; Siehe Oben */

// Weise den Compiler an, die Variable hWindow in einem
// separaten Abschnitt namens Shared unterzubringen
// Darüber hinaus ist dann auch noch dem Linker mitzuteilen,
// dass die Daten in diesem Abschnitt von allen Instanzen
// dieser Anwendung gemeinsam verwendet werden sollen.
// Ganz wichtig dabei ist, dass die Variablen initialisiert
// sein müssen.

#pragma data_seg (&quot;Shared&quot;)
HWND hWindow = 0 ;
#pragma data_seg ()

// Weise den Compilern, den Abschnitt Shared als lesbar,
// beschreibbar und zur gemeinsamen Verwendung zu deklarieren - &quot;RSW&quot;.

#pragma comment (linker, &quot;/section:Shared,RWS&quot;)

LRESULT CALLBACK KeyboardHookProc (int, WPARAM, LPARAM) ;
// Der Prototyp der Funktion KeyboardHookProc

HHOOK       hhkHook ;
HINSTANCE   hDllInstance ;
// Definition globaler Variablen

/************************************************************************/
/* DllMain: wird automatisch aufgerufen, wenn die DLL mit LoadLibrary() */
/*          geladen, oder mit FreeLibrary wieder freigegeben wird.      */
/* Eingabe Parameter: Systemspezifische Daten                           */
/* Return-Wert: TRUE                                                    */
/************************************************************************/

int APIENTRY DllMain (HINSTANCE hInstance, DWORD fdwReason, PVOID pvReserved){
    switch (fdwReason){
        case DLL_PROCESS_ATTACH :
            // Die DLL wird in den Adressraum des aktuellen Prozesses
            // eingeblendet.
            hDllInstance = hInstance ;
            // Initialisierung der globalen Variable
            break ;
    }  
    return TRUE ;
}

/***********************************************************/
/* SetupHook: EXPORT Funktion, setzt den Keyboardhook      */
/* Eingabe Parameter: HWND des aufrufenden Fensters        */
/* Return-Wert: TRUE                                       */
/***********************************************************/

EXPORT BOOL CALLBACK SetupHook (HWND hParent){
    hWindow = hParent ;
    // Initialisierung der globalen Variable mit dem Eingabe Parameter
    hhkHook = SetWindowsHookEx (WH_KEYBOARD, KeyboardHookProc, hDllInstance, NULL) ;
    // Keyboardhook setzen und das Ergebnis in der globalen Variable
    // hhkHook speichern.
    return TRUE ;
}

/*******************************************************************/
/* KeyboardHookProc: wird jedes mal aufgerufen, wenn eine Taste    */
/*                   betätigt wird                                 */
/* Eingabe Parameter: Systemspezifische Daten                     */
/* Return-Wert: s. u.                                              */
/*******************************************************************/

LRESULT CALLBACK KeyboardHookProc (int nCode, WPARAM wParam, LPARAM lParam){
    if (nCode == HC_ACTION){
    // Verhindern das eine Nachricht mehrmals verarbeitet wird.
        if ((lParam &amp; 1073741824) != 1073741824){
        // Überprüfen ab vor dem Aufruf dieser Funktion die Taste bereits gedrückt war
            SendMessage ((HWND) hWindow, (WM_USER + 2), (WPARAM) wParam, (LPARAM) lParam) ;
            // Senden der Nachricht (WM_USER + 2) und den Tastencode der gedrückten
            // Taste (gespeichert in &quot;wParam&quot;) an das in der globalen Variable
            // hWindow gespeicherte Fensterhandle.
        }
    }
    return CallNextHookEx (hhkHook, nCode, wParam, lParam) ;
    // Die Nachrichten an den nächsten Hook weiterreichen.
}

/*********************************************************************/
/* UninstalHook: EXPORT Funktion, löscht den über die Funktion       */
/*               SetupHook gesetzten Hook                            */
/* Eingabe Parameter: keine                                          */
/* Return-Wert: TRUE                                                 */
/*********************************************************************/

EXPORT BOOL CALLBACK UninstallHook (void){
    UnhookWindowsHookEx (hhkHook) ;
    // den in der globalen Variable hhkHook gespeicherten Hook löschen.
    return TRUE ;
}

/////////////////////////////////////////////////////////////////////
</code></pre>
<p>Wie ich hier sehe sind das nur Funktionen, ohne der Hauptfunktion. Wenn ich jetzt die Hauptfunktion schreiben würde wie würde es dann aussehen? Das er in die Txt die Taste schreibt. Reinschreiben werde ich mit fstream. Nur bräuchte ich den Namen der Taste. Könnt ihr mir weiter Helfen?</p>
<p>danke für Antworten <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1290805</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1290805</guid><dc:creator><![CDATA[Frager]]></dc:creator><pubDate>Wed, 23 May 2007 15:07:10 GMT</pubDate></item></channel></rss>