Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Nie działa mi klikanie ( _WinAPI_Postmessage )


Rekomendowane odpowiedzi

Opublikowano

Witam. Mimo wielogodzinnych prób nie potrafię wykonać żadnego kliknięcia w okno. Chciałbym uzyskać program który klikałby na nieaktywnym/zminimalizowanym oknie. Podobno taki efekt można uzyskać dzięki _WinApi_PostMessage(). Jednak mi nie działa na niczym. Stąd moja prosba - czy móglby ktos napisac program ktory klikalby w np. przycisk na kalkulatorze systemowym albo cos w notatniku lub paincie?

moj niedziałający program ktory miał klikac na kalkulatorze:

#include <WindowsConstants.au3>
#include <WinAPI.au3>

Local $uchwyt = WinGetHandle("Kalkulator")
;ConsoleWrite("uchwyt = "&$uchwyt)

Local $kordy = _WinAPI_MakeLong(110,370) ;to wspolrzedne przycisku "5" na moim kalkulatorze

_WinAPI_PostMessage($uchwyt,$WM_LBUTTONDOWN,"",$kordy)
_WinAPI_PostMessage($uchwyt,$WM_LBUTTONUP,"",$kordy)
;ConsoleWrite(@CRLF&"koniec")

dodam że wykorzystanie ControlSend() odpada, bo program AutoitWindowInfo nie wykrywa żadnej kontrolki

  • 2 tygodnie później...
Opublikowano

Wszystko działa tak jak powinno. Efekt działanie jest inny niż się spodziewałeś, gdyż źle rozumiesz działanie funkcji.

W postaci jak w twoim przykładzie kliknięcie LKM jest na oknie, a w samym oknie nie ma nic co by dało jakiś widoczny efekt.

Żeby był jakiś efekt dla kliknięcia LKM, trzeba kliknąć na kontrolce jak w poniższym przykładzie:

#include <WindowsConstants.au3>
#include <WinAPI.au3>

Run("calc.exe")
Sleep(1000)
WinSetState("Kalkulator", "", @SW_HIDE)
Sleep(200)

Local $hUchwyt = ControlGetHandle("Kalkulator", "", 135)
Local $iKordy = _WinAPI_MakeLong(10,10)
For $i=1 To 5
   _WinAPI_PostMessage($hUchwyt,$WM_LBUTTONDOWN,"",$iKordy)
   _WinAPI_PostMessage($hUchwyt,$WM_LBUTTONUP,"",$iKordy)
Next
Sleep(1000)
WinSetState("Kalkulator", "", @SW_SHOW)

 

  • 3 tygodnie później...
  • 2 tygodnie później...
Opublikowano

@wastau mnie nadal jest brak jakiejkolwiek reakcji . probowałem jeszcze to przerobić żeby kliknął jakąś liczbę, ale nic z tego nie wyszło. a i jeszcze, napisałeś że klika "na oknie", co to znaczy?

@.Yoshiakidocelowo nie chodzi mi o kalkulator, tylko pewien program w którym "AutoIt Window Info Tool" nie wykrywa żadnych kontrolek. Nie udało się nawet z kalkulatorem więc sobie to odpuszczam narazie.

Opublikowano

GUI składa się z kontrolek. Samo okno w zasadzie też jest kontrolką. Ty klikasz na kontrolce okna, a nie na kontrolce, która się w tym oknie znajduje (tak jakby okno było puste, bez znajdujących się w nim kontrolek).

Jeżeli nie możesz odczytać danych kontrolek wewnątrz okna, to raczej zapomnij o klikaniu w nieaktywnym oknie. Program taki używa własnych kontrolek, których obsługa odbywa się poprzez procedury zawarte w samym programie. Można wtedy użyć albo obiektów COM zawartych w programie, albo dedykowanego UDF'u. Ale to wyższa szkoła jazdy.

UDF są raczej do najpopularniejszych programów, a używanie obiektów COM wymaga nie tylko biegłości w programowaniu, ale także dostępu do ich dokumentacji, co prawdopodobnie jest nierealne.

Jedyne co mi przychodzi do głowy, to odpalenie wirtualnego komputera (np. WirtualBox) i uruchomienie na nim programu i skryptu Autoit działającego na aktywnym oknie. Będziesz mógł wtedy działać swobodnie na fizycznym komputerze, a w tle na wirtualnym będzie działał skrypt.

Oczywiście na wirtualnym komputerze musisz zainstalować system, AutiIt i tem program.

Ma to także taką miłą cechę, że nawet jak coś się nabałagani na wirtualnym, to nie ma to żadnego wpływu na działanie fizycznego komputera, np. nie złapiesz wirusów.

Minusem jest to, że musisz podzielić się zasobami z wirtualnym komputerem.

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...