Fragen Packet 1:Tastendruck, Radio, Dirbox



  • Ah gut jetzt hab ich die lib. Er kompiliert [...].
    Jetzt muss ich mich leider wieder zu Wort melden, denn ich bekomme kein Event.
    Was kann ich denn jetzt noch falsch machen ? Egal was ich drück, nothing happens.
    nicht mal die Box erscheint bei einem Klick belibieger Taste.

    void __fastcall TForm1::KeyHook(TMessage &Message)
    {
    	/*
    	VK_MEDIA_NEXT_TRACK (B0)
    	Windows 2000/XP: Next Track key
    
    	VK_MEDIA_PREV_TRACK (B1)
    	Windows 2000/XP: Previous Track key
    
    	VK_MEDIA_STOP (B2)
    	Windows 2000/XP: Stop Media key
    
    	VK_MEDIA_PLAY_PAUSE (B3)
    	Windows 2000/XP: Play/Pause Media key
    	*/
    	ShowMessage("On Click Event");
    	switch (Message.WParam)
    	{
    		case VK_VOLUME_DOWN:
    		{
    			break;
    		}
    		case VK_VOLUME_UP:
    		{
    			break;
    		}
    		case VK_MEDIA_PLAY_PAUSE:
    		{
    			if (paused == 1 || (playing == 0 && paused == 0))
    				CLONE1->Click();
    			else
    				CLONE2->Click();
    			break;
    		}
    		default:
    		break;
    	}
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
    	SetHook();
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::FormDestroy(TObject *Sender)
    {
    	RemoveHook();
    }
    //---------------------------------------------------------------------------
    

    Header:

    private:
    void __fastcall MPSetVolume(TMediaPlayer* MP, int Volume);
    int __fastcall  MPGetVolume(TMediaPlayer* MP);
    MESSAGE void __fastcall KeyHook(TMessage &Message);
    BEGIN_MESSAGE_MAP
        MESSAGE_HANDLER(WM_KEYHOOK, TMessage, KeyHook);
    END_MESSAGE_MAP(TForm);
    

    Ich weiß nicht.
    Dummerweise ist das ein wichtiger Bestandteil des Programms.
    Was kann ich denn noch falsch gemacht haben ?



  • Muss die Lib so ins Projekt wie eine bereits existierende Form ?
    Also mit "Hinzufügen" -> Dateityp = ".lib" -> Starten.
    So habs ich dann gemacht, scheint ja falsch zu sein ?



  • Moment...

    1. Projekt Formular und Projekt DLL einzeln erstellen.

    2. Projekt Formular öffnen. Dort Projektverwaltung anklicken, ganz oben der Prjektgruppe hinzufügen:
    das Projekt keydll hinzufügen. Projektgruppe namentlich speichern und dem Formular-Projekt die keydll.lib hinzufügen.

    In der Projektgruppe hast du jetzt zwei Projekte, die du einzeln aktivieren, bearbeiten und compilieren kannst.

    3. Alle Projekte erstellen.



  • http://img38.imageshack.us/img38/2901/projectr.jpg

    so sieht das Proj aus.
    aber ich fühl mich etwas ratlos.



  • So dürfte es aber korrekt sein.

    Wichtig: In der DLL-Funktion CheckKey muss der Klassenname des Formulares, das die Hooks empfängt, korrekt
    aufgeführt sein, sonst wird es nicht angesprochen!

    // Test in CheckKey einfügen
       HWND ghAppWnd = NULL;
       ghAppWnd = FindWindow("THauptformular", "Hauptformular");   
       if (ghAppWnd == NULL)
          ShowMessage("kein Formular gefunden");
       else
          ShowMessage("Gruss aus der DLL");
    

    So siehst du auch gleich, ob die DLL mitarbeitet.



  • Die Dll grüßt mich herzlich, nachdem ich ein paar änderung vorgenommen hab, nur
    leider ist es zu höflich (ich nehm die Messages wieder raus ZUUU VIELLE BEI JEDDER TASTE).
    Jetzt werde ich erstmal die Tastenaufrufe prüfen
    (Beep bei Tastendetect, sonst muss ich ja OK drücken)



  • Kpeter du bist mehr als Genial, ich glaub ich mach daraus ne Beepmachine Piep bei jeder Taste auch in diesem Text cool.
    und natürlich funktionierts hahahahaha das ist super lustig 🙂
    Piep Piep Piep.

    Ich hätte mich einfach nur mehr mit der Dll befassen sollen (schäm)



  • Wenn du mich als Beta-Tester engagierst machen wir erst mal einen richtigen
    Sound-Check 😃



  • wo versteck ich denn mal die checkbox als verstecktes feature 😃 ?



  • Tim06TR schrieb:

    wo versteck ich denn mal die checkbox...

    hab ich was verpasst? Welche checkbox ?



  • ne ne das war nur ein Witz.

    btw: Was mach ich wenn mein Programm abschmiert (Das passiert eh nicht :D)
    Was macht dann die Dll ? Ich meine das meine Explorer dann immer auch abgeschmiert ist.



  • Tim06TR schrieb:

    Was mach ich wenn mein Programm abschmiert (Das passiert eh nicht :D)
    Was macht dann die Dll ?

    Hmm,

    Hilfe zur WinAPI schrieb:

    Before terminating, an application must call the UnhookWindowsHookEx function to free system resources associated with the hook.

    Das machen wir im Destruktor des Hauptformulares.
    Sicherlich kannst du dieses Unhook... in jeder Fehlerbehandlungsroutine setzen, wo du glaubst, das Programm macht den >>Abflug<<.



  • kpeter schrieb:

    Tim06TR schrieb:

    (btw: keydll.i = 50 MB 😮 was zur Hölle macht die denn ???)

    ***.ilc, *.ild, .ilf, .ils- Dateien

    Findest du unter Projektoptionen->Linker: Keine Status-Dateien generieren

    *.i-Dateien haben mit dem Linker nichts zu tun. Gewöhnlich sind das vorverarbeitete .c- oder .cpp-Dateien. Zum Debuggen von Problemen mit Makros ist das gelegentlich recht nützlich.



  • "il" steht aber für "incremental linker"...



  • Davon ging ich auch aus...
    Diese Datei hat wirklich nur die Extension i und meint das

    Borland C++ intermediate preprocessor output file...

    edit : Link


Anmelden zum Antworten