Konsole und PostMessage



  • Ich habe eine App in einer .dll die einen Hook macht und Messages and das Hostkonsolenfenster schickt. In dem Fall WM_KEYDOWN. Ich will die Tastendrücke die mein Hook empfängt damit auf die Konsole abbilden. Reagieren funktionen wie GetKeyboardState kbhit scanf etc auf WM_KEYDOWN. (Ich habe den KonsolenWindowHandle über FindWindow geholt)



  • Probiers doch einfach aus 🙂 Ich denke schon, immerhin ist die Konsole auch nur ein normales Windows-Fenster.

    Ansonsten benütz auf der Konsole einfach ReadConsoleInput() und prüfe auf Keyboard-Events.

    MfG SideWinder



  • Hi @all,
    ich habe dazu auch mal eine Frage. Zuerst den Code:

    int main(int argc, char *argv[])
    {MSG lpMsg;
    UINT wMsgFilterMin, wMsgFilterMax;
    HWND hCMD = FindWindow(NULL, "D:\\Temp\\temp.exe");
    
    printf("hCMD <%d>\n", hCMD);
    
    while(1){
    BOOL gm = GetMessage ( &lpMsg, hCMD, wMsgFilterMin, wMsgFilterMax );
     sleep(999);
    
     if(gm){
            printf("hWnd <%d>\t wMsgFilterMin <%d> \t , wMsgFilterMax <%d> \n gm <%d>\n"
                                                    ,hCMD ,wMsgFilterMin ,wMsgFilterMax ,gm);
    
            printf("lpMsg.hwnd <%d>\n",lpMsg.hwnd);
            printf("lpMsg.message <%d>\n",lpMsg.message);
            printf("lpMsg.wParam <%d>\n",lpMsg.wParam);
            printf("lpMsg.lParam <%d>\n",lpMsg.lParam);
            printf("lpMsg.time <%d>\n",lpMsg.time);
            printf("lpMsg.pt.x <%d>\n",lpMsg.pt.x);
            printf("lpMsg.pt.y <%d>\n",lpMsg.pt.y);
            };
            };
    system("PAUSE"); return 0; }
    

    Ich wollte mir mal diese MSG's anschauen, bekomme aber nichts angezeigt.
    Kann mir mal jmd. sage wo mein denkfehler ist?? 🙄



  • Hey du "Hackers"-Fan 😉

    #include <stdio.h>
    
    #include <windows.h>
    
    int main( int argc, char *argv[] )
    {
        MSG lpMsg;
        UINT wMsgFilterMin, wMsgFilterMax;
    
        HWND hCMD = FindWindow( NULL, "Unbenannt - Editor" );
        // Ich glaub' dir irgendwie nicht, dass du ein Fenster Namens "D:\Temp\temp.exe" finden willst...
        // und wennschon würd' ich prüfen, ob das Fenster gefunden Wurde:
    
        if( !hCMD ) {
    
            printf( "Das Fenster wurde nicht gefunden!\n" );
            printf( "Starten sie notepad.exe.\n" );
            return 0;
        }
    
        printf( "hCMD <%d>\n", hCMD );
    
        while( true ) {
    
            // BOOL gm = GetMessage( &lpMsg, hCMD, wMsgFilterMin, wMsgFilterMax );
            //
            // und welche werte Haben wMsgFilterMin und wMsgFilterMax!?
            // Bingo: undefiniert.
            //
            // Wo zum Teufel ist gm deklariert!?
            // Bingo: nirgends.
            //
            // also:
    
            BOOL gm;
            wMsgFilterMin = 0;
            wMsgFilterMax = 0;
            gm = GetMessage( &lpMsg, hCMD, wMsgFilterMin, wMsgFilterMax );
    
            // ist aber sowieso alles egal, denn:
            // 
            // MSDN - GetMessage:
            //
            // [...]
            //
            // Parameters
            //
            // lpMsg 
            // [out] Pointer to an MSG structure that receives message information from
            //       the thread's message queue. 
            //
            // hWnd 
            // [in]  Handle to the window whose messages are to be retrieved.
            //       [>] The window must belong to the calling thread. [<] The following
            //       value has a special meaning.
            //
            // Fällt dir was auf!?
    
            // sleep( 999 ); Wo willst du sleep( ) hernehmen? Das ist Sleep( ) aus der <windows.h>
            Sleep( 999 );
    
            if(gm) {
    
                printf( "hWnd <%d>\t wMsgFilterMin <%d> \t , wMsgFilterMax <%d> \n gm <%d>\n",
                        hCMD, wMsgFilterMin, wMsgFilterMax, gm );
    
                printf( "lpMsg.hwnd <%d>\n", lpMsg.hwnd );
                printf( "lpMsg.message <%d>\n", lpMsg.message );
                printf( "lpMsg.wParam <%d>\n", lpMsg.wParam );
                printf( "lpMsg.lParam <%d>\n", lpMsg.lParam );
                printf( "lpMsg.time <%d>\n", lpMsg.time );
                printf( "lpMsg.pt.x <%d>\n", lpMsg.pt.x );
                printf( "lpMsg.pt.y <%d>\n", lpMsg.pt.y );
            }
        }
    
    //  system( "PAUSE" );  Da gibt's elegantere Möglichkeiten...
    //  return 0;           main( ) gibt, wenn es nichts zurückgibt standardmäßig 0 zurück.
    }
    

    RTFM.

    Greetz, Swordfish



  • Hallo 'Swordfish',

    "D:\Temp\temp.exe"

    Das ist meine compilierte EXE. 😃

    Wo zum Teufel ist gm deklariert!?

    BOOL gm = GetMessage
    Hier ^^, oder geht sowas nicht? 😕

    [>] The window must belong to the calling thread. [<]

    Dh, ICH muss das Programm selbst starten. Oda?? 😃

    PS.: Ja, ich finde den Film Klasse!! 👍
    Und Ja, es wurde etwas übertrieben!



  • coolzero0001 schrieb:

    Das ist meine compilierte EXE. 😃

    Was? Die exe, welche du aus deinem zuletzt geposteten Code erstellt hast?
    Willst du die Messages, die dein Konsolenfenster bekommt!?

    coolzero0001 schrieb:

    Swordfish schrieb:

    Wo zum Teufel ist gm deklariert!?

    BOOL gm = GetMessage
    

    Hier ^^, oder geht sowas nicht? 😕

    Sorry, ist mir beim Kopieren irgendwie verunglückt. Natürlich geht das.

    coolzero0001 schrieb:

    Swordfish schrieb:

    [>] The window must belong to the calling thread. [<]

    Dh, ICH muss das Programm selbst starten. Oda?? 😃

    Nein, das bedeutet, dass dein Programm mit GetMessage nur Messages empfangen kann, welche an Fenster gesendet werden, die du selbst (in deinem Thread) selbst erstellt hast.

    Greetz, Swordfish



  • Was? Die exe, welche du aus deinem zuletzt geposteten Code erstellt hast?
    Willst du die Messages, die dein Konsolenfenster bekommt!?

    Ich habe den obigen code compiliert und gestartet und habe gehofft, die Messages welche an dieses Programm gesendet werden anzuzeigen.

    Ja, genau das wollte ich!

    Hintergrund:
    Ich arbeite mit einer Software die es mir erlaubt 'Fenster' zu erstellen.
    Diese hat eine Funktion um DLL's aufzurufen.
    Also dachte ich mir, ich erstelle so eine DLL und übergebe die Werte an mein Programm.
    Um dies im voraus zu testen wollte ich die Console dazu benutzen.



  • @coolzero0001: Ich hab mal (meiner Meinung nach korrekt) versucht, die Messages auszugeben, welche dein Konsolenfenster bekommt. Leider kein Erfolg.

    Mal eine Frage an Jochen:
    Bekommt ein Konsolenfenster überhaupt Messages im herkömmlichen Sinn?
    Irgendwie zweifle ich daran.

    Greetz, Swordfish



  • Habs jetzt mal so versucht, geht aber auch nicht????
    Die EXE welche ich aufrufe ist Von mir erstellt.

    ....
    int main( int argc, char *argv[] ) 
    { 
        MSG lpMsg; 
        UINT wMsgFilterMin, wMsgFilterMax; 
    
        STARTUPINFO si;
        PROCESS_INFORMATION pi;
    
        ZeroMemory( &si, sizeof(si) );
        si.cb = sizeof(si);
        ZeroMemory( &pi, sizeof(pi) );
    
        // Start the child process. 
        CreateProcess( "D:\\Temp\\hwnd.exe", NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi );
    
        Sleep(999); //Sonst findet er das Fenster nicht!!
    
        HWND hCMD = FindWindow( NULL, "Alle Dialoge!" ); 
        if( !hCMD ) printf( "Das Fenster wurde nicht gefunden!\n" );
        printf( "hCMD <%d> \n", hCMD);
    
        while( 1 ) { 
            BOOL gm; 
            wMsgFilterMin = 0; 
            wMsgFilterMax = 0; 
            gm = PeekMessage( &lpMsg, hCMD, wMsgFilterMin, wMsgFilterMax, PM_NOREMOVE ); 
    
            // lpMsg 
            // [out] Pointer to an MSG structure that receives message information from 
            //       the thread's message queue. 
            // 
            // hWnd 
            // [in]  Handle to the window whose messages are to be retrieved. 
            //       [>] The window must belong to the calling thread. [<] The following 
            //       value has a special meaning. 
            Sleep(999);
    
            if(!gm) { 
                printf( "wMsgFilterMin <%d> \t , wMsgFilterMax <%d> \n gm <%d>\n", 
                        wMsgFilterMin, wMsgFilterMax, gm ); 
                printf( "lpMsg.hwnd <%d>\n", lpMsg.hwnd ); 
                printf( "lpMsg.message <%d>\n", lpMsg.message ); 
                printf( "lpMsg.wParam <%d>\n", lpMsg.wParam ); 
                printf( "lpMsg.lParam <%d>\n", lpMsg.lParam ); 
                printf( "lpMsg.time <%d>\n", lpMsg.time ); 
                printf( "lpMsg.pt.x <%d>\n", lpMsg.pt.x ); 
                printf( "lpMsg.pt.y <%d>\n\n\n", lpMsg.pt.y ); 
            } 
        } 
    
    system( "PAUSE" );
    
    }
    

Anmelden zum Antworten