Strona 1 z 2

Sterowanie inną aplikacją - brak klasy obiektu

Nowy postNapisane: niedziela, 21 listopada 2010, 20:06
przez majkel
Używam Borlanda C++ Bulider 6 i zajmuję się sterowaniem inną aplikacja . Pobieram nazwy klasy za pomocą WinID. Problem jest w tym dla każdego elementu tego okna ( programu) nazwa klasy i tytuł jest taki sam. Jak dobrać się do np. elementu zaznaczonego na załączniku.
Proszę o pomoc.

control.jpg

Re: Sterowanie inną aplikacją - brak klasy obiektu

Nowy postNapisane: niedziela, 21 listopada 2010, 22:46
przez Cyfrowy Baron
Miałem podobny problem z Firefox 3.x. Niestety nie da się tego obejść. Jeżeli wskazujesz wybrany element a WinID pokazuje tylko nazwę klasy okna, to nie da się pobrać uchwytu do jego kontrolek.
Podobny temat był już poruszany w wątku: Wysyłanie adresu URL do tego samego okna przeglądarki.

Ten program wygląda jakoś dziwnie, jak dla Windows 3.1 i nie wydaje się być zbudowany w oparciu o API systemu Windows. Co to za program?



PS. Wrzuciłeś na forum plik graficzny w formacie *.BMP. By obejść zabezpieczenie forum zmieniłeś mu rozszerzenie na JPG i za to dostajesz ostrzeżenie. Nie rób tak więcej, bo zablokuję Tobie konto.
Podmieniłem już plik na JPG, a Ty zaopatrz się w jakiś darmowy program do obsługi grafiki, może irfanView. Program potrafi konwertować pliki graficzne między różnymi formatami.

Program IrfanView 4.27
Spolszczenie do IrfanView 4.27

Re: Sterowanie inną aplikacją - brak klasy obiektu

Nowy postNapisane: poniedziałek, 22 listopada 2010, 10:34
przez majkel
Jeżeli nie mogę otrzymać uchwytu do kontrolki podobnej do "UpDownClick" obok zaznaczonego tekstu to czy da radę np przechwycić np proces który generuje ta kontrolka ?. Prosił bym o jakąś wskazówkowe (podpowiedź).
ps. Z plikiem *.BMP nie miałem złych intencji

Re: Sterowanie inną aplikacją - brak klasy obiektu

Nowy postNapisane: poniedziałek, 22 listopada 2010, 11:30
przez Cyfrowy Baron
czy da radę np przechwycić np proces który generuje ta kontrolka ?.

Chodzi o komunikaty. Można przechwytywać komunikaty systemowe montując haki, ale ta kontrolka chyba nie wysyła żadnych komunikatów do systemu, lecz tylko w obrębie aplikacji, więc raczej nie da się tego komunikatu przechwycić. No chyba, że chodzi Tobie o czytanie z procesu aplikacji, ale to wymaga znajomości assemblera, a ja niewiele o tym wiem, więc tutaj nie pomogę.

Gdybyś podał co to za program i skąd go można pobrać to sam bym to sprawdził.

Re: Sterowanie inną aplikacją - brak klasy obiektu

Nowy postNapisane: poniedziałek, 22 listopada 2010, 13:24
przez majkel
Ta kontrolka na bieżąco musi wysyłać dane gdyż używając połączenia na kablu eternetowym steruję urządzeniem

Re: Sterowanie inną aplikacją - brak klasy obiektu

Nowy postNapisane: poniedziałek, 22 listopada 2010, 13:56
przez Cyfrowy Baron
No ale co mam Tobie odpowiedzieć, nie wiedząc z jakim programem mam do czynienia. Skoro wysyła do systemu jakiś komunikat, to trzeba sprawdzić jakiego rodzaju to jest komunikat. Potem trzeba w programie zamontować haka i przechwytywać komunikaty. Przykład montowania haka, do przechwytywania komunikatów wysyłanych z klawiatury do systemu znajdziesz w serwisie Cyfrowy Baron w dziale: porady -> api -> Keyloger, czyli przechwytywanie wciśnięcia klawiszy we wszystkich programach. Wystarczy w tym kodzie zmienić rodzaj przechwytywanych komunikatów na te które wysyła program i już masz to czego potrzebujesz. W podanej poradzie program przechwytuje komunikat WM_KEYDOWN, czyli wciśnięcie przycisku klawiatury na dół. Listę komunikatów, które można przechwycić znajdziesz w pliku pomocy. Na zakładce Index w polu Look for wpisz WM_

help.png


Czy ten program wymaga do działania JAVA lub .Net Framework?

Re: Sterowanie inną aplikacją - brak klasy obiektu

Nowy postNapisane: poniedziałek, 22 listopada 2010, 23:52
przez majkel
Program nie wymaga JAVA ani Net Framework.
Spróbuje skorzystać z Twojej ostaniej rady o efektach poinformuje.
Dziękuję

Re: Sterowanie inną aplikacją - brak klasy obiektu

Nowy postNapisane: wtorek, 23 listopada 2010, 09:45
przez Cyfrowy Baron
Program nie wymaga JAVA ani Net Framework.


Jak to sprawdziłeś, czy wogóle sprawdziłeś?! Jeżeli korzystasz z WinXP to jedno i drugie masz zainstalowane. Chodziło mi o to czy ten program jest oparty na Javie już .NETFramework.

Re: Sterowanie inną aplikacją - brak klasy obiektu

Nowy postNapisane: wtorek, 30 listopada 2010, 13:44
przez Cyfrowy Baron
Sprawę utrudnia fakt, że nie wiem co to za program i nie mogę go sprawdzić. Jeżeli program posiada klasę okna, a jego elementy mają tą samą nazwę klasy #32770, to można by się dobrać do tego komponentu po jego nazwie.

Zapoznaj się z tym postem: http://programowanie.cal.pl/forum/viewtopic.php?f=2&t=1151#p7952

Re: Sterowanie inną aplikacją - brak klasy obiektu

Nowy postNapisane: wtorek, 30 listopada 2010, 14:36
przez majkel
Dzięki za pamięć dziś wieczorem się tym zajmę .

Re: Sterowanie inną aplikacją - brak klasy obiektu

Nowy postNapisane: czwartek, 2 grudnia 2010, 13:49
przez majkel
Mam dalej problem gdyż dalej nie mogę dobrać się do zaznaczonego elementu . Program Total Commander Ultimate Prime w wtyczce procesy pokazuje mi następujące rzeczy: Obrazek.
Program sterowany działa tak że jeżeli jest fokus na obiekcie (zaznaczonym czarną linia poście na początku) można kursorami Up Down zmieniać wartości . Czy można wykorzystać ten fakt tak żeby fokus był na innym programie. Proszę o jakąś podpowiedź .

Re: Sterowanie inną aplikacją - brak klasy obiektu

Nowy postNapisane: czwartek, 2 grudnia 2010, 14:22
przez Cyfrowy Baron
Czy można wykorzystać ten fakt tak żeby fokus był na innym programie.


W jednej chwili focus może być tylko na jednym oknie na raz. Chcesz przenieść focus na inne okno to kliknij na to okno lub za pomocą kodu przywołaj okno na pierwszy plan.

Co do tego programu to sytuację dodatkowo komplikuje fakt, że jest to aplikacja typu MDI, czyli okno w oknie, by dobrać się do okna wtórnego (MDIChild) trzeba najpierw pobrać uchwyt do okna głównego (MDIForm). Jednak okno wtórne nie wydaje się być zbudowane w oparciu o API systemu Windows. Nie widzę tutaj żadnych klas, to nie jest standardowa aplikacja okienkowa i nie wydaje mi się by można było dobrać się do jej kontrolek.

Re: Sterowanie inną aplikacją - brak klasy obiektu

Nowy postNapisane: czwartek, 2 grudnia 2010, 15:45
przez majkel
Czyli nie ma już żadnej możliwości (sposobu) żeby moc wpłynąć na naciskanie przycisków obiektu ? A sposób żeby podawać współrzędne okna (tylko i tak fokus nie może być nawet na oknie programu którego chce napisać ) ?

Re: Sterowanie inną aplikacją - brak klasy obiektu

Nowy postNapisane: czwartek, 2 grudnia 2010, 19:37
przez Cyfrowy Baron
Czyli nie ma już żadnej możliwości (sposobu) żeby moc wpłynąć na naciskanie przycisków obiektu ?


Możesz zasymulować kliknięcie myszką w wybranej pozycji, ale okno programu w których chcesz kliknąć musi być na wierzchu. Opisałem to w tym poście: http://programowanie.cal.pl/forum/viewtopic.php?f=2&t=1084&p=7583&hilit=MozillaUIWindowClass#p7583



A sposób żeby podawać współrzędne okna


Nie rozumiem! Chcesz zmienić współrzędne okna, czy je pobrać. Jeżeli pobrać to przykład jest w przytoczonym wyżej poście, ale jeszcze powtórzę.

KOD cpp:     UKRYJ  
  HWND hWnd = FindWindow(NULL, L"Capsto");

 if(hWnd == NULL)
 {
  ShowMessage("Nie odnaleziono okna programu");
  return;
 }

 TRect wRect;
 GetWindowRect(hWnd, &wRect);

 int wLeft = wRect.Left;
 int wTop = wRect.Top;

Re: Sterowanie inną aplikacją - brak klasy obiektu

Nowy postNapisane: środa, 29 grudnia 2010, 13:05
przez majkel
Witam Szanownego Kolegę. Jeżeli to możliwe chciałem odgrzać temat. Z gonie z Kolegi zaleceniami skorzystałem z poleceń " keybd_event ". Niestety takie rozwiązanie łączy się z utratą fokusa. Przeglądając program odkryłem takie okienko. Chce zeby do podkreślonego czarną linią TextEdita można było wpisywać automatycznie tekst z mojej aplikacji. Obok pokazane są właściwości tego programu używając WinID. Czy da się z tym coś zrobić . Proszę o pomoc.