Minimieren und Schließen Deaktivieren



  • Na klar. Kann auch ned. <VergissEs> hat falschen Code gepostet. So gehts:

    // Header:
    //---------------------------------------------------------------------------
    #ifndef Unit1H
    #define Unit1H
    //---------------------------------------------------------------------------
    #include <Classes.hpp>
    #include <Controls.hpp>
    #include <StdCtrls.hpp>
    #include <Forms.hpp>
    //---------------------------------------------------------------------------
    HHOOK ghhookKB;
    LRESULT CALLBACK CheckKey(int, WORD,LONG);
    //---------------------------------------------------------------------------
    class TForm1 : public TForm
    {
    __published:    // Von der IDE verwaltete Komponenten
            void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
    
    private:    // Anwender-Deklarationen
    
    protected:
        void __stdcall SetHook(void);
        void __stdcall RemoveHook(void);
    
    public:     // Anwender-Deklarationen
            __fastcall TForm1(TComponent* Owner);
    };
    //---------------------------------------------------------------------------
    extern PACKAGE TForm1 *Form1;
    //---------------------------------------------------------------------------
    #endif
    
    // CPP
    //---------------------------------------------------------------------------
    #include <vcl.h>
    #pragma hdrstop
    
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
       SetHook();
    }
    //---------------------------------------------------------------------------
    
    void __stdcall TForm1::SetHook(void)
    {
        ghhookKB = SetWindowsHookEx(WH_KEYBOARD_LL, (HOOKPROC)CheckKey, HInstance, NULL);
    }
    //---------------------------------------------------------------------------
    
    void __stdcall TForm1::RemoveHook(void)
    {
        UnhookWindowsHookEx(ghhookKB);
    }
    //---------------------------------------------------------------------------
    
    LRESULT CALLBACK CheckKey(int nCode, WORD wParam, LONG lParam)
    {
    
        bool bEatKeyStroke = false;
        if (nCode == HC_ACTION)
        {
            switch (wParam)
            {
                case WM_KEYDOWN:
                case WM_SYSKEYDOWN:
                case WM_KEYUP:
                case WM_SYSKEYUP:
    
                    PKBDLLHOOKSTRUCT p = (PKBDLLHOOKSTRUCT) lParam;
                    bEatKeyStroke =
                        ((p->vkCode == VK_LWIN)) ||
                        ((p->vkCode == VK_RWIN)) ||
                        ((p->vkCode == VK_TAB) && ((p->flags & LLKHF_ALTDOWN) != 0)) ||
                        ((p->vkCode == VK_ESCAPE) && ((p->flags & LLKHF_ALTDOWN) != 0)) ||
                        ((p->vkCode == VK_ESCAPE) && ((GetKeyState(VK_CONTROL) & 0x8000) != 0));
                    break;
            }
        }
        return(bEatKeyStroke ? 1 : CallNextHookEx(ghhookKB, nCode, wParam, lParam));
    }
    void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
    {
       RemoveHook();
    }
    //---------------------------------------------------------------------------
    


  • Er compiliert es zwar aber da tut sich nix 😕
    Ich kann ALT+TAB und CTRL+ESC immernoch benutzen (WINTASTE auch)



  • Huups... hab grad in der MSDN nachgeschaut. Ist nur für Win NT/XP/2000 - der low level KeyboardHook.



  • Dass der ganze Schnodder auch in der FAQ steht (unter "Tasten") wisst ihr aber, oder?



  • Jetzt schon. 😉



  • Ok thx ich brauchs auch für Win2k hab aber immoment nur WinMe und XP zur Hand ich prob das gleich ma aufm XP Rechner *g*



  • Es funzt fast perfekt, aber das prog is noch im Taskmanager.
    Kann man das da irgendwie verbergen oder die Tasten kombination CTRL+ALT+ENTF deaktivieren?



  • Original erstellt von quizzmaster:
    Kann man das da irgendwie verbergen oder die Tasten kombination CTRL+ALT+ENTF deaktivieren?

    Letzteres: Nein!
    Ersteres: Ja. Stichwort: Dienst. Gibts 1000fach hier im Forum.



  • Ich hab das hier gefunden kann damit aber nix anfangen. Wo soll ich das hinpacken?

    typedef DWORD (WINAPI *tdRegisterServiceProcess) (DWORD, DWORD) ;
    HMODULE hLibrary ;
    ...
    tdRegisterServiceProcess fnRegisterServiceProcess ;
    hLibrary = LoadLibrary ("kernel32.dll") ;
    fnRegisterServiceProcess =(tdRegisterServiceProcess) GetProcAddress(hLibrary, "RegisterServiceProcess") ;
    fnRegisterServiceProcess (NULL, 1) ;
    FreeLibrary (hLibrary) ;

    Nachtrag: Hat sich erübrigt, das geht nur unter Win9x

    [ Dieser Beitrag wurde am 09.04.2003 um 18:15 Uhr von quizzmaster editiert. ]



  • OK. Dass ist nur für Win 9x funzt da aber perfekt.
    Gibts sowas, wie das von WebFrizi, auch für Win9x?



  • Hat sich erledigt hab auf bytesandmore was gefunden.

    [ Dieser Beitrag wurde am 09.04.2003 um 18:51 Uhr von quizzmaster editiert. ]


Anmelden zum Antworten