Waga najazdowa, aplikacja sygnalizująca moment ważenia.

0

Witajcie,

na wstępie zaznaczę, że jestem automatykiem i na co dzień pracuję z innymi językami programowania. Zakładam wątek dotyczący języka Java, ponieważ tworząc wizualizacje przemysłowe mamy z nim dużo do czynienia i napisanie prostego programu będzie dla nas najłatwiejsze.

Przechodząc do problemu, posiadam aplikację obsługującą wagę najazdową dla pojazdów ciężarowych. Napisana jest nie wiadomo w czym, nie posiadam kodu źródłowego. Jest po prostu zainstalowana. Pytanie jest takie czy dam radę przejąc kliknięcie myszki w przycisk "Warzenie" i wykorzystać to w oddzielnej aplikacji, która będzie odpowiadać za zapalanie fizycznych lampek na sygnalizatorach świetlnych? Czy prościej będzie napisać nową aplikację, która pobierze po RS232 dane z tensometrów wagi?

0

Nie jestem specjalistą w tym, to są jedynie moje spostrzeżenia.

Myślę, że przechwytywanie klikanego przycisku w innej apce, z poziomu javy może być trudne. Dlaczego?
Po pierwsze apka javowa musiałaby być cały czas uruchomiona w tle.
Po drugie przycisk w apce głównej musiałby być cały czas w tym samym miejscu (współrzędne do klikania) - czyli brak możliwości zmniejszania wielkości okna, myślę, że zmiana rozdzielczości też ma znaczenie.

Jeśli to by było zapewnione to wtedy można by było przechwycić klikanie kursora w odpowiednim obszarze.

Ale tak jak mówię, poczekaj jeszcze na wypowiedź kogoś bardziej ogarniętego, może są jakieś mechanizmy o których nie słyszałem ;)

0

Dzięki za odpowiedź, kiedyś robiłem przyciski unvisible na wizualizacji ale użytkownik nie mógł zmieniać wielkości okna i nie ingerował w dosłownie nic. Miał dostęp jedynie do aplikacji. A tutaj mogą zrobić wszystko :)

0

rsmc dasz radę udostępnić taką aplikacje?

ewentualnie będe w olsztynie we wrześniu

1

Z tymi przyciskami to może być nie taka prosta sprawa, zwłaszcza jak nie wiesz, na czym to stoi. Jak dobrze kojarzę, to kiedyś po WinApi dało się zapiąć do procesu i odczytywać eventy, ale jak jest to technologia, nieoparta na natywnych kontrolkach to będzie lipa. Ja bym jednak próbował to zrobić na podstawie komunikacje na RS - chyba że potrzebujecie dużo funkcjonalności i bez sensu jest to dublować.

0
dżałamadze napisał(a):

rsmc dasz radę udostępnić taką aplikacje?

ewentualnie będe w olsztynie we wrześniu

Z udostępnieniem będzie duży problem, klient nie bardzo się na to zgadza :( ale postaram się coś ogarnąć.

Tomek Pycia napisał(a):

Z tymi przyciskami to może być nie taka prosta sprawa, zwłaszcza jak nie wiesz, na czym to stoi. Jak dobrze kojarzę, to kiedyś po WinApi dało się zapiąć do procesu i odczytywać eventy, ale jak jest to technologia, nieoparta na natywnych kontrolkach to będzie lipa. Ja bym jednak próbował to zrobić na podstawie komunikacje na RS - chyba że potrzebujecie dużo funkcjonalności i bez sensu jest to dublować.

Właśnie nie chce za bardzo pisać tego od podstaw bo ma dużo operacji na bazie danych, którą trzeba będzie też postawić. Do tego jakieś funkcjonalności pozwalające pobierać dane po sieci z innej aplikacji. Ale jak będzie mus to trudno, napiszemy. Ale tak jak napisałem powyżej, spróbuję zgrać i udostępnić aplikację jak klient się zgodzi.

0

Wprawdzie ten wątek dotyczy innego języka, ale zasada powinna być taka sama. Rzuć proszę okiem na Uruchomienie aplikacji wewnątrz innej aplikacji - jest tam podany sposób, żeby osadzić okno jakiejś aplikacji nie na pulpicie/explorerze (w sumie to zakładam, że apka do ważenia pracuje pod Windowsem, aczkolwiek nie napisałeś tego nigdzie wprost), ale w oknie swojej apki. Może to jest jakaś opcja - stworzyć apkę "ramkę", która obejmie sobą program ważący, a następnie monitorować wciśnięcia klawiszy/myszki. W ten sposób odpadają nam dwa problemy - nie musimy się obawiać tego, że użytkownik przesunie okno i monitorowany przez nas obszar nie będzie się pokrywać z lokalizacją przycisku, a także nie musimy śledzić wszystkich kliknięć/zdarzeń w ramach systemu, tylko te, które się dzieją na obszarze naszego okna (w którym to sobie osadziliśmy aplikację obsługującą wagę).

0

W Javie to chyba nie za bardzo jest jak ze standardowych bibliotek nasłuchiwać kliknięć poza elementami swing ale w c można nasłuchiwać kliknięcia lewym, prawym przyciskiem i jeśli będzie w obszarze jakichś współrzędnych jak między 500 a 600 w X i Y, wtedy można właśnie w tym warunku dodać nasłuchiwanie kliknięcia i potem uruchamiać z tego program do zapalania tych lampek.

Nie wyjaśniłem jak to można wykorzystać ;p Jeśli to masz zainstalowane na windowsie, i nie zmieniasz rozmiaru okna, tylko ta aplikacja jest cały czas włączona to wtedy możesz określić jakie są współrzędne tego przycisku, i po to są te współrzędne myszki. I potem kliknięcie w tym obszarze obsługiwać. Toporne ale zawsze to jakieś rozwiązanie.

#include <stdio.h>
#include <windows.h>
#include <winuser.h>

int main(){
    POINT p;    
    while(1){
        if (GetAsyncKeyState(VK_LBUTTON)){
            printf("%d ", 1);
        }
        if(GetAsyncKeyState(VK_RBUTTON)){
            printf("%d ", 2);
        }
        if (GetCursorPos(&p)){
            if (p.x >= 500 && p.x <= 600 && p.y >= 500 && p.y <= 600) {
                printf("%d \n", p.x);
            }
        }
    }
    return 0;
}

Kompilowanie komenda

gcc main.c -o out.exe

Źródło: https://stackoverflow.com/questions/10817860/c-how-to-catch-mouse-clicks-wherever-they-happen

1

Kiedyś w delphi napisałem podobną nakładkę na aplikację. Musisz użyć z WinApi ChildWindowFromPoint (chyba tak się to nazywało) pobrać uchwyt do kontrolki i sprawdzić jeżeli został kliknięty button z tekstem (Caption) "Ważenie" (albo inny unikalny identyfikator jak Control id, instance handle) to wykonujesz jakąś akcję.

0
cerrato napisał(a):

Wprawdzie ten wątek dotyczy innego języka, ale zasada powinna być taka sama. Rzuć proszę okiem na Uruchomienie aplikacji wewnątrz innej aplikacji

Dokładnie tak, apka pracuje pod Windows XP chyba. Zainteresowałeś mnie tym rozwiązaniem, muszę zobaczyć czy będziemy w stanie coś takiego zrobić. Dzięki za pomoc.

goose_ napisał(a):

W Javie to chyba nie za bardzo jest jak ze standardowych bibliotek nasłuchiwać kliknięć poza elementami swing ale w c można nasłuchiwać kliknięcia lewym, prawym przyciskiem i jeśli będzie w obszarze jakichś współrzędnych jak między 500 a 600 w X i Y, wtedy można właśnie w tym warunku dodać nasłuchiwanie kliknięcia i potem uruchamiać z tego program do zapalania tych lampek.
Źródło: https://stackoverflow.com/questions/10817860/c-how-to-catch-mouse-clicks-wherever-they-happen

Tutaj pomysł też nie jest zły, muszę się upewnić czy w ogóle apka ma możliwość zmiany rozmiaru okna. Twoją aplikacje można wtedy odpalać wraz programem od wagi.

0

Czyli jak nic pozostaje mi Delphi przez co nie będę pisać wszystkiego od apki. Jak zaczniemy to na pewno pojawią się pytania. Dzięki

2

Ale czemu Delphi? Sam tego używam i lubię, ale przecież podane rozwiązania bazują na API Windowsa, więc da się to wykonać w czymkolwiek, co jest zdolne do pisania aplikacji Windowsowych. Aczkolwiek - z racji sympatii do Pascala, zachęcam do Delphi ;)

1
rsmc napisał(a):

Czyli jak nic pozostaje mi Delphi przez co nie będę pisać wszystkiego od apki. Jak zaczniemy to na pewno pojawią się pytania. Dzięki

Nie koniecznie, piszą że z javy da się wołać do api windowsa Java Win API
Po prostu ja pisałem to w Delphi bo było mi najłatwiej, równie dobrze mozna w C C# czy jakimś innym

0
cerrato napisał(a):

Ale czemu Delphi? Sam tego używam i lubię, ale przecież podane rozwiązania bazują na API Windowsa, więc da się to wykonać w czymkolwiek, co jest zdolne do pisania aplikacji Windowsowych. Aczkolwiek - z racji sympatii do Pascala, zachęcam do Delphi ;)

Pisząc to w Delphi otworzę trochę drzwi w tym kierunku i zespół pozyska wiedzę.

hzmzp napisał(a):
rsmc napisał(a):

Czyli jak nic pozostaje mi Delphi przez co nie będę pisać wszystkiego od apki. Jak zaczniemy to na pewno pojawią się pytania. Dzięki

Nie koniecznie, piszą że z javy da się wołać do api windowsa Java Win API
Po prostu ja pisałem to w Delphi bo było mi najłatwiej, równie dobrze mozna w C C# czy jakimś innym

A po za wszystkim wydaje mi się, że w Delphi może być to prostsze.

0

A słyszeliście o czymś takim jak AutoHotKey?

https://www.autohotkey.com/

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