Autor Wątek: [WinApi]Kliknięcie przycisku w innej aplikacji  (Przeczytany 3571 razy)

Offline sqrczybyk

  • Użytkownik

# Październik 20, 2010, 14:21:18
Daj szybki przepis jak wywołać takie okienko, sprawdzę sam czy jest to możliwe.

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline krzyfn

  • Użytkownik

# Październik 20, 2010, 16:10:37
Szybki przepis jest taki, że musisz posiadać niepodpisane cyfrowo sterowniki do czegokolwiek, które chcesz zainstalować. Niestety nie mogę Ci dostarczyć moich sterowników, ponieważ nie będziesz mógł ich zainstalować (mam specyficzną kartę).

Aktualnie instaluję MS Visual Studio na maszynie na której debuguję. Spróbuję uruchomić Spy++ i dowiedzieć się więcej na temat tego okienka.
« Ostatnia zmiana: Październik 20, 2010, 16:22:55 wysłana przez krzyfn »

Offline sqrczybyk

  • Użytkownik

# Październik 20, 2010, 16:24:37
Ściągnij -to-, kliknij Narzędzia => Szpieg => Lista otwartych okien => masz drzewko wszystkich okienek razem z oknami potomnymi. Będziesz wiedział jak dostać się do tych kontrolek.
Przy okazji zareklamowałem swój programik^^.

Offline krzyfn

  • Użytkownik

# Październik 20, 2010, 16:34:52
Ok, mam to. Nie wiem jak wkleić obrazek, więc opiszę co mi pokazał Twój program:

#32770 [Windows Security]
 - Direct UIHWND []
  - CtrlNotifySink []
       Button [&Don't install this driver software]
  - CtrlNotifySink []
       Button [&Install this driver software anyway]
  Button [Start]

W skrócie - najpierw rozwijam [Windows Security] (do tego okna mam już uchwyt przez FindWindow), następnie rozwijam [UIHWND], następnie mam do rozwinięcia 2x CtrlNotifySink i w nich dopiero znajdują się buttony.

Jakieś pomysły jak się do nich dobrać?
Button Start, to pewnie 'See details'.
Dzięki za program.

Offline sqrczybyk

  • Użytkownik

# Październik 20, 2010, 16:47:36
Czyli w takiej kolejności:
1. GW_CHILD
2. GW_CHILD
3. GW_HWNDNEXT
4. GW_CHILD
I masz uchwyt do Button [&Install this driver software anyway].

EDIT
Mam nadzieję że uwzględniłeś ukryte okna i zablokowane.
« Ostatnia zmiana: Październik 20, 2010, 17:16:50 wysłana przez sqrczybyk »

Offline krzyfn

  • Użytkownik

# Październik 20, 2010, 17:25:29
Nie ;). Okazuje się, że "mój CtrlNotifySink" jest 9 w kolejności, a nie 2.
Wreszcie działa. Wielkie dzięki za pomoc - jednak da się.

Tylko zastanawiam się, czy można by jakoś lepiej to zapisać, zamiast 9x kopiować 'GetWindow...'
« Ostatnia zmiana: Październik 20, 2010, 17:32:52 wysłana przez krzyfn »

Offline sqrczybyk

  • Użytkownik

# Październik 20, 2010, 17:55:09
for (int i = 0; i < 9; ++i) GetWindow...^^.
A poważnie, to chyba jest inna wersja FindWindow, w której podajesz uchwyt okna rodzica i wyszukujesz dzieci. Możesz sobie zrobić rekurencyjną funkcję, która iteruje po wszystkich oknach (nie tylko jednego poziomu) za pomocą GW_CHILD i GW_HWNDNEXT, i sprawdza, czy klasa i tytuł okna się zgadza. Można też wykorzystać tę wspomnianą wcześniej funkcję EnumChildWindows.