Minimieren und Schließen Deaktivieren
-
Ok habe verstanden.
Ich habe es auch mitlerweile geschafft, dass sich das prog über die taskleiste legt, aber die Start Taste funzt noch. Kann man die irgendwie abschalten?
-
ALT+F4 verhintern:
in FormCloseAction = caNone;
Tasten sperren
im Header
private: static HHOOK ghhookKB; static void __stdcall SetHook(void); static void __stdcall RemoveHook(void); static LRESULT CALLBACK CheckKey(int, WORD,LONG);
im Code
//--------------------------------------------------------------------------- __fastcall TForm_Main::TForm_Main(TComponent* Owner) : TForm(Owner) { SetHook(); } //--------------------------------------------------------------------------- void __stdcall TForm_Main::SetHook(void) { ghhookKB = SetWindowsHookEx(WH_KEYBOARD_LL, (int(__stdcall*)())CheckKey, HInstance, NULL); } //--------------------------------------------------------------------------- void __stdcall TForm_Main::RemoveHook(void) { UnhookWindowsHookEx(ghhookKB); } //--------------------------------------------------------------------------- LRESULT CALLBACK TForm_Main::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)); }
-
Also der gibt mir nen Linker Error.
[Linker Error] Unresolved external 'TForm1::ghhookKB' referenced from C:\blabla
Was mach ich falsch?
[ Dieser Beitrag wurde am 08.04.2003 um 14:19 Uhr von quizzmaster editiert. ]
-
Lass mal die statics weg.
-
Kann das leider net prüfen hab das aber schon mal probiert.
Das funzt auch net. leider...
Da gibts noch mehr Fehler
-
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. ]