Komunikat nie działa prawidłowo

0

Pomimo prawidłowego pobrania Handle komunikat

SendMessage(BtnHandle, BM_CLICK, 0, 0); 

nie wykonuje naciśnięcia Buttonu Aplikacji zewnętrznej (akurat tej aplikacji na której mi zależy)
, do innej próbnej aplikacji jest wysyłany prawidłowo i działa
Jaka może być przyczyna, nie mam pojęcia (jak to naprawić), czy ta aplikacja została jakoś celowo napisana aby nie dało się uruchamiać przycisków klawiaturą, tylko myszką?
A może się nie da nic zrobić i należy próbować z komunikatami do przycisków myszy?
Proszę o pomoc

1

Może MSDN

Remarks

If the button is in a dialog box and the dialog box is not active, the BM_CLICK message might fail. To ensure success in this situation, call the SetActiveWindow function to activate the dialog box before > > sending the BM_CLICK message to the button.

1
TaCriTa napisał(a):

[…] czy ta aplikacja została jakoś celowo napisana aby nie dało się uruchamiać przycisków klawiaturą, tylko myszką?

Może tak być – aplikacja mogła zostać napisana w taki sposób, aby nie dało się obsługiwać interfejsu klawiaturą. Jednak nie jest to jakieś zabezpieczenie przed automatami czy botami – po prostu twórcy aplikacji mogli użyć kontrolek dla przycisków, które nie posiadają uchwytu. W Delphi może to być kontrolka pośrednio lub bezpośrednio dziedzicząca np. z klasy TGraphicControl. Tyle że to nieco inny przypadek, dlatego że Ty masz uchwyt przycisku, a więc owy przycisk nie jest kontrolką graficzną.

Jeśli chodzi o faktyczne zabezpieczenia, to takowych się nie implementuje, dlatego że raczej niemożliwe jest odróżnienie komunikatów systemowych (które wysyła system) od tych użytkownika (wysyłanych z tej samej aplikacji lub jakiejkolwiek zewnętrznej). Walka z wiatrakami, a i sensu to nie ma.

A może się nie da nic zrobić i należy próbować z komunikatami do przycisków myszy?

Gdybyś kiedyś miał problem z samym pobraniem uchwytu, to bierz pod uwagę wyżej opisany scenariusz.

To i tak nie zmienia faktu, że możesz klikać w przyciski nawet wtedy, gdy masz do czynienia z kontrolkami graficznymi. Wystarczy ustawić kursor w odpowiednim miejscu i zasymulować kliknięcie, uprzednio upewniając się, że okno zawierające docelowy przycisk faktycznie znajduje się na samej górze stosu okien.

1 użytkowników online, w tym zalogowanych: 0, gości: 1