Witam,
Niedawno zacząłem moją przygodę z WinAPI. Z racji zbliżającej się daty 1.04 postanowiłem zrobić prosty kawał: program, który wyrzuca Blue Screen. Problem w tym, że używając skrótów (np Windows+D) można go zminimalizować lub wyłączyć menadżerem zadań. I tu moje pytanie: jak można zablokować klawiaturę, a przynajmniej skróty do menadżera plus te z Windowsem? (chyba wystarczy zablokować klawisze: Windows i Ctrl, tylko nie wiem jak). W googlach nic nie znalazłem.
Szukaj pod nazwą keyboard hook, te skróty musisz blokować niskopoziomowo. Jak chcesz wywalić bluescreena to możesz go przygotować w bmp, a później rysować w pętli na całym ekranie - zamykasz proces explorer.exe, później w tej samej pętli możesz sprawdzać czy nie pojawiło się okno managera zadań, jak tak to je zamykasz ;P. To taki sposób najszybszy, bardzo prosty :P.
Pomysł dobry, spróbuję, tylko co ze skrótami np. Windows+tab, alt+tab i innymi przełączającymi? próbowałem za pomocą hooków je blokować, ale i tak szły dalej wykonując pożądane zadanie
Ctrl-Alt-Delete nie zablokujesz hookami bo jest obsługiwany dużo wcześniej (bodajże na poziomie Win32k.sys).
Poczytaj o 'HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\system, DisableTaskMgr'
niestety nie jest możliwe, bym tak blokował Menadżera
Chyba by wystarczyło sprawdzanie w pętli, czy nie ma procesu "taskmgr.exe" i go wyłączać - działa skutecznie
Pytanie dodatkowe: jak uzyskać uchwyt do explorer.exe? Co trzeba wpisać do FindWindow()?
Pytanie dodatkowe: jak uzyskać uchwyt do explorer.exe? Google nie wie lub dobrze ukrył
dziękuję, działa poprawnie
właściwie ostatnia rzecz... jak, mając uchwyt przycisku "start", wywołać program po kliknięciu na niego? (to znaczy chodzi w tle, ale uaktywnia się po kliknięciu na "start")
Na te pytanie nie znam odpowiedzi, ale à propos pytania wyżej: jeżeli byś rysował tą bitmapę ciągle w pętli na pobranym hdc pulpitu to nie ma znaczenia czy jakieś okno nowe się pojawi(manager zadan, cokolwiek) bo i tak zostanie zamalowane. Ew dla lepszego efektu możesz sprawdzac czy GetForegroundWindow()!=HWND_DESKTOP, jezeli true to EnableWindow(GetForegroundWindow(), FALSE). Sposób prymitywny, tak jak pisałem wcześniej, ale działa na 100% :P