Do Visty jednym ze sposobów było użycie SetWindowsHookEx
i podpięcie haka WH_CBT
lub WH_CALLWNDPROC
, a następnie podjęcie odpowiednich działań po wykryciu zmiany Z. Jednak to nie działa z Vistą (o ile mogę powiedzieć z google).
Jedyne inne rozwiązanie, jakie mogę sobie wyobrazić, to ustawienie czasomierza na uruchamianie co kilka sekund, a kiedy otrzymasz WM_TIMER
, przesłuchasz system, używając GetNextWindow
, aby dowiedzieć się, które okno znajduje się za twoim. Jeśli to nie jest IE, to zadzwoń pod numer SetWindowPos
, aby ustawić swoje okno powyżej IE (zakładam, że masz okno HWND
dla wybranego okna IE - pamiętaj, że może istnieć wiele okien IE).
Spowoduje to problemy, jeśli ludzie będą próbować doprowadzić okno do przodu - odwróci się ono do poziomu znajdującego się tuż nad IE. W tym przypadku w swoim kodzie możesz obsłużyć numer WM_ACTIVATE
i spróbować zmienić kolejność Z okna IE, tak aby znajdował się pod twoim oknem (wywołaj SetWindowPos
, aby przenieść okno IE, aby znalazł się nad oknem, które znajduje się pod twoim oknem). To rozwiązanie może być obarczone problemami, ponieważ system Windows może próbować uniemożliwić korzystanie z okien innego procesu, ze względów bezpieczeństwa. Z drugiej strony, dokumenty MSDN dla SetWindowPos
nie są jawnie wspomnieć, że nie można manipulować oknami innego procesu.Mogą jednak istnieć niejasne ograniczenia.
Nawet z tego czasomierza siekać, masz zamiar skutecznie mieć pętlę zajęty-oczekujących w aplikacji (z częstych komunikatów WM_TIMER) i jest to ogólnie złe rzeczą do zrobienia, szczególnie dla żywotności baterii laptopów itp. (ponieważ uniemożliwiasz CPU przejście w stan uśpienia itd.).
Powiedziałbym, że nie ma dobrego sposobu na zrobienie tego, a wszystko, co prawdopodobnie będzie działać, będzie kruche i spowoduje problemy. Gorąco polecam, nie próbując tego robić. Czy można zamiast tego zrobić program w jakiejś wtyczce lub pasku narzędzi dla IE?
NB Bądź szczególnie świadomi, że SetWindowsHookEx
nakłada karę wydajności na poziomie całego systemu, jeśli podążać tą drogą.
Niestety, nie sądzę, że istnieje sposób, aby to zrobić. – Charlie