Piotr Głudkowski

Piotr Głudkowski Rzucam się na
wszystko to, co jest
ciekawe i wymaga
rusze...

Temat: WinApi - hWnd, processId - prośba o wskazówkę :)

Zemściło się wreszcie moje wieloletnie szczekanie na Win GUI i obchodzenie go bokiem :) - przytrafiło mi się nieszczęście polegające na konieczności pobiegania po oknach :(

Mam w związku z tym wielką prośbę do kolegów i koleżanek "oblatanych" w WinApi o pomoc - dla Was będzie to pewnie banalne.

Muszę w pewnym programie (gotowym), który odpalam (poprzez dedykowane, gotowe API) ze swojego programu, wpisać coś w jedno z jego okien i "nacisnąć" Enter.
Do programu nie mam źródeł i nie będę miał, więc pozostaje jedyna droga poprzez wysłanie komunikatu do okna.
I teraz: mam jedynie uchwyt do głównego okna tego programu.
Niestety, formatka z dialogiem, w którym w jedno z pól chcę coś wpisać, otwierana jest w innym wątku - czyli okno dialogu nie jest oknem potomnym w stosunku do okna głównego.
Tytuł okna dialogu zaczyna się od "Zapisz" i jest jedynym dialogiem otwartym przez ten program.
Co do pola, w które mam to coś wpisać: wiem jedynie, że jest ono obiektem klasy Edit i jest to jedyne takie pole w tym oknie.

Wymyśliłem więc sobie to tak:
1. Na podstawie uchwytu okna głównego określam processId (pewnie poprzez GetWindowThreadProcessId())
2. Dla tego processId wyszukuję okno, którego tytuł zaczyna się od "Zapisz"
3. W tym oknie znajduję okno potomne, które jest obiektem klasy Edit
4. Ustawiam Caption tego okna na to, co chcę w nim wpisać
5. Wysyłam do tego okna komunikat, że nacisnąłem Enter.

Moja prośba brzmi: podpowiedzcie, proszę, które funkcje WinAPI muszę użyć, żeby zrealizować kroki 2...5? Resztę sobie znajdę i zrobię bez problemu - po prostu tematyka jest dla mnie mocno nowa, a ilość funkcji w user32.dll jest tak duża, że przekopanie się przez nie w rozsądnym czasie wydaje się awykonalne:)

Pomocy!
Jerzy M.

Jerzy M. C#/JavaScript
Developer

Temat: WinApi - hWnd, processId - prośba o wskazówkę :)

Może programik WinDowse trochę pomóc - kiedyś próbowałem jakieś takie dziwne rzeczy robić, to w.w program był strasznie pomocny. Ale nie jestem zbytnio pewien czy tutaj się aż tak przyda.
Piotr Głudkowski

Piotr Głudkowski Rzucam się na
wszystko to, co jest
ciekawe i wymaga
rusze...

Temat: WinApi - hWnd, processId - prośba o wskazówkę :)

Nie bardzo chyba :( - w zasadzie uzyskałem to samo ze Spy++.
Tak naprawdę, te funkcje z WinAPI muszę odpalać przez PInvoke z C# - po prostu muszę "owrapować" ten gotowy programik tak, żebym mógł z poziomu C# przekazać mu wartość do dialogu i pogonić go dalej.
Ale z PInvokami sobie poradzę - natomiast nie mam zielonego pojęcia, których funkcji WinAPI użyć :(
Konkretnie chodzi o zrzut trasy jako punkty z GPS w AutoMapie - chłopaki w API do AutoMapy nie dali gotowego wywołania, którym można by to zrobić - a z poziomu user interface się da. Stąd koncepcja zrobienia tego właśnie via user interface AutoMapy - po prostu muszę przekazać nazwę pliku, w którym zrzut ma zostać zapisany, i nacisnąć [Enter] :)Piotr Głudkowski edytował(a) ten post dnia 03.11.10 o godzinie 19:33

konto usunięte

Temat: WinApi - hWnd, processId - prośba o wskazówkę :)

#3. http://msdn.microsoft.com/en-us/library/ms633500
#4. http://msdn.microsoft.com/en-us/library/ms633546
#2. Nie wiem czy nie wystarczy to samo co w #3, tzn. przeszukanie okien bez id procesu. Jeśli koniecznie z id to można pokombinować z
http://msdn.microsoft.com/en-us/library/ms633497 i przekazywać id procesu do callbacka.
#5. http://msdn.microsoft.com/en-us/library/ms644950 z wiadomością WM_KEYDOWN/WM_KEYUPKrzysztof Kawa edytował(a) ten post dnia 03.11.10 o godzinie 19:43
Piotr Głudkowski

Piotr Głudkowski Rzucam się na
wszystko to, co jest
ciekawe i wymaga
rusze...

Temat: WinApi - hWnd, processId - prośba o wskazówkę :)

Wygląda na to, że to wystarczy :) Dzieki wielkie!

Jakbyś mógł jeszcze podpowidzieć, jak wyciągnąć tytuł okna, mając hWnd?
(potrzebuję tego do zrealizowania kroku 2. - okien może być kilka, interesuje mnie to, którego tytuł zaczyna się od konkretnego stringu).

konto usunięte

Temat: WinApi - hWnd, processId - prośba o wskazówkę :)

http://msdn.microsoft.com/en-us/library/ms633520
Piotr Głudkowski

Piotr Głudkowski Rzucam się na
wszystko to, co jest
ciekawe i wymaga
rusze...

Temat: WinApi - hWnd, processId - prośba o wskazówkę :)

Dzięki jeszcze raz :)
(Wygląd jednak na to, że będę musiał użyć WM_GETTEXT)
Marek Dąbek

Marek Dąbek Software Engineer,
Intel Technology
Poland

Temat: WinApi - hWnd, processId - prośba o wskazówkę :)

Kiedyś napisałem automatyczny potwierdzacz ;) (klikał OK w dialog box) w C#. O ile dobrze pamiętam, to pobrałem wszystkie okna, następnie odczytywałem ich tytuły i jeśli znalazłem to, co mnie interesuje, to trawersowałem po oknach potomnych danego okna aż znalazłem interesujący mnie przycisk (miał tekst "OK").

Poniżej pobieranie wszystkich okien: http://pinvoke.net/default.aspx/user32.EnumDesktopWindowsMarek Dąbek edytował(a) ten post dnia 04.11.10 o godzinie 14:45

Następna dyskusja:

WinApi




Wyślij zaproszenie do