I nie zrobili tego, więc po to, co chciałbym zbadać gdybym spróbować:
- Dla każdej aplikacji/each top-level window:
- Tworzenie pływającego okna i umieszczenie go na pasek tytułu, gdzie chcesz usiąść. Set up the parent/child relationship, ale to okno jest częścią twojego własnego procesu. (Czasami pojawiają się problemy z rodzicielstwem okna z jednego procesu do jednego z innego procesu, ale spróbuj. Uniknęłoby to wstrzyknięcia do innych procesów, jeśli to możliwe.)
- Możesz zbadać flagi okien, aby sprawdzić, czy okno ma pasek tytułu (jeśli powinieneś dodać przycisk) przez
GetWindowLong
z GWL_STYLE
looking for WS_CAPTION
. To samo połączenie pozwoli ci zobaczyć typ podpisu/ramki, który możesz połączyć z GetSystemMetrics
za pomocą, na przykład, SM_CYDLGFRAME
, aby znaleźć odpowiedni rozmiar dla przycisku na pasku tytułowym tego okna.
- To okno jest teraz przyciskiem: maluj, obsługij kliknięcia itp.
- Ustaw to okno, w którym nie można ustawić ostrości, aby kliknięcia nie odrywały się od okna, znajduje się na pasku tytułu. Nie chcesz klikać, aby na przykład zmienić kolor paska tytułu. Zrób to, ustawiając flagę okna
WS_EX_NOACTIVATE
, coś w stylu: SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or
WS_EX_NOACTIVATE
)
.
- Głównym problemem jest utrzymanie go prawidłowo ustawionego przy przesuwaniu okna, zmianie rozmiaru itp. Aby to zrobić, install a hook for the system move events. Możesz także przechwycić minimalizację i przywrócić za pomocą
EVENT_SYSTEM_MINIMIZESTART
and EVENT_SYSTEM_MINIMIZEEND
. Umożliwi to śledzenie wszystkich okien poruszających się na ekranie, tak aby w razie potrzeby można było dostosować położenie okna przycisku.
To daje okno, które można malować jako przycisk (i reaguje na kliknięcia itp), że wizualnie jest „przywiązany” do innych okien, tak że pozostaje w tym samym miejscu, gdy użytkownik przeciągnie pasek tytułowy, minimalizuje lub maksymalizuje aplikację, itp., i to w twoim własnym procesie bez problemów z procesem krzyżowym.
Czy możesz rozwinąć "dodatkowe punkty"? Przyznacie nagrodę za kogoś, kto napisze dla was kod? Jeśli chodzi o te narzędzia, dlaczego nie znajdziesz źródła dla jednego i pracy z tego. A jakie wersje systemu operacyjnego masz nadzieję obsłużyć? –
@DavidHeffernan To typowe wyrażenie - "punkty bonusowe za ..." oznacza w tym kontekście ideał, a PO byłby z tego zadowolony. Czy znasz jakieś programy OS, które to robią? Ja nie. Widziałem Skype'a, Chrome itp. - ale nie znam wielu innych. Jeśli znasz jakieś, możesz napisać, czym one są? –
Zażywasz to zbyt dosłownie. To tylko figura mowy. Chciałbym wesprzeć Windows 8.x i Windows 10. – dummzeuch