No i Olesio udało Ci się cos stworzyć konkretnego podczas tej zabawy i mogbys sie podzielic ze mna?
Tak, mój sposób z injekcją dllki działa. Tylko po ubiciu okna aplikacja nadal działa, ponieważ nie ruszam ukytrgo okna o klasie TApplication
, które posiadają wszystkie aplikacje VCL pisane w Delphi. I powyżej opisałem wszystko, co jest Tobie potrzebne. Gotowca nie podeśle, bo na prawdę uwierz mi, takimi gotowcami się tylko Was pytających na prawdę krzywdzi. Sam się o tym niedawno przekonałem. Podesłany gotowy kod, rodził mnóstwo kolejnych i często banalnych pytan, ponieważ osoba prowadzona za rączkę nie pomyslała, nie przeanalizowała sobie podesłanego nawet krotkiego kodu, tylko bezmyślnie go kompilowała i tyle. Napisz z czym masz konkretnie problem. Podałem wszystkie informacje jakich potrzeba do podjęcia próby samodzielnego poszukania materiałów. Na tym forum pewnie da się jakoś jeszcze znaleźć wątek gdzie podsyłam gotowy kod do injekcji dllki tym modułem, o którym wspomnialem i blokowania możliwości zamknięcia okna Windows Media Player przyciskiem "X" w okienku. Zasada jest podobna. Tylko, że tam podczepiam się pod okno o konkretnej klasie, a tutaj wystarczy w dllce wykonać EnumWindows
i w funkcji enumerującej sprawdzać funkcją GetWindowThreadProcessId
, które okna należą do procesu i pod nie podczepić się pod funkcję obsługi komunikatów (wiadomo, funkcja SetWindowLong
na uchwyt z drufim parametrem GWL_WNDPROC
). Tylko wiadomo. Albo podczepiasz się pod jedno konkretne okno albo robisz sobie na przykład typ rekordowy z polami jako uchwyt okna HWND i pointerem, który przechowa oryginalną funkcję obslugi komunikatów okna i dodajesz to do tablicy dynamicznej, której rozmiar zwiększasz przy wyszukiwaniu i znalezieniu kolejnego okna. Później można zrobić dodatkową funkcję, która sprawdza w pętli tę tablicę i zwraca eleement o podanym w parametre uchwycie okna. Takie kombinowanie jest konieczne jeżeli chcemy przejąc obsługę komunikatów funkcji więcej niż jednego okna, a wiadomo wywołana pod koniec obsługi funkcja CallWindowProc
musi jako parametr przyjąc Poiner na właściwe okno, a każde okno czy kontrolka, szczegołnie różnego typu powinna mieć inną funkcję obsługi komunikatów aby nie powodować błędów i zawieszenie programu. I jeżeli będziesz miał KONKRETNY problem, to pytaj tutaj. Wszystko elegancko można znaleźć w google i doczytać na MSDnie, jak pisałem.
a jak pobrać uchwyt kontrolki, ktora jest Disabled.
Mam program, ktory pokazuje uchwyty i klasy, ale tylko aktywnych kontrolek.
Zastosuj wspomiane funkcje EnumWindow
, ewentualnie w obrębie samego okna EnumChildWindows
i będziesz miał wszystkie uchwyty. Aktywność typowej kontrolki nie powinna wpłynąc na możłiwość pobrania jej uchwytu. Jeżeli ten program, którego używasz do pobierania uchwytów tego jednak nie potrafi, to według mnie jest po prostu źle napisany.