XLTeam – Our World

Windows 7 + AQQ i brak AeroSnap

by rysi3k on maj.24, 2009, under AQQ

Dzisiaj dostałem cynk od foresta że w AQQ nie działa AeroSnap przy przeciąganiu okna do górnej krawędzi okna. Jako, że nie miał się tym kto zająć to powstała wtyczka która emuluje takie zachowanie by przynajmniej tak wyglądało że działa :)

Dlaczego tylko emuluje? Googlając trochę i metodą prób i błędów doszedłem do wniosku że Windows w rzeczywistości nie maksymalizuje przeciąganego okna! On je tylko rozciąga i ustawia flagę że jest zmaksymalizowane – wnioskuje tak po próbie przechwycenia Notyfikacji WinAPI: WM_SIZE, przy próbie normalnego zmaksymalizowania otrzymywałem informacje że notyfikacja wystąpiła, lecz w przypadku próby użycia AeroSnap tej notyfikacji brak. Wniosek chyba jest tylko jeden…

Dlatego spróbowałem obejść to inaczej :) Wykrywam po prostu kiedy okno jest powiększane i zmieniane jego położenie, wtedy ręcznie robię maksymalizację. No i działa :) Jednak czasem obecna wersja algorytmu nie działa poprawnie, trochę muszę dopracować ja – pomysł już XLTeam wymyślił więc myślę, że w ciągu kilku dni pojawi się update działający nieco lepiej :)

Dla dociekliwych nieco kodu z WinAPI w C++:

Samo maksymalizowanie okna:

//hwnd to uchwyt do okna, może być pobrany np za pomocą FindWindow();
ShowWindow(hwnd, SW_MAXIMIZE);

Procedura obsługi okna

//dodajemy nowa funkcje obslugi okna:
WINPROC g_OldWndProc = (WNDPROC)SetWindowLong((Pointer)WindowEvent->Handle, GWL_WNDPROC, (LONG)NewWndProc);
//wylaczamy ja, np przy zamykaniu okna:
if(g_OldWndProc!=NULL) SetWindowLong((Pointer)WindowEvent->Handle, GWL_WNDPROC, (LONG)g_OldWndProc);
 
//funkcja obslugi:
LRESULT CALLBACK NewWndProc(HWND hwnd, UINT mesg, WPARAM wParam, LPARAM lParam)
{
//mozemy nasłuchiwać na rózne notyfikacje systemowe
 if(mesg == WM_WINDOWPOSCHANGED) {
//tutaj umieszczamy kod algorytmu (podam jak dopieszczę go :P)
 
 }
 return CallWindowProc((FARPROC)g_OldWndProc, hwnd, mesg, wParam, lParam);
}

Efekt można zobaczyć w AQQ + wtyczce Win7AeroSnapFix

:, ,

Leave a Reply

Spam Protection by WP-SpamFree Plugin

Archiwum