Klient w Delphi i Server JavaScript?

0

Witam, pisze program do obsługi kontrolerów midi który ma za zadanie sterować zewnętrznym programem.
Obsługę urządzeń midi i ich komunikatów już mam zrobioną tylko teraz nie wiem jak sterować zewnętrznym programem.
Zewnętrzny program ma uruchomiona usługę web serwera na porcie 80, po wejściu przez przeglądarkę trzeba podać hasło i dalej można klikać już na dane funkcje.
Potrzebuje jakiś informacji lub kierunku jak to zrealizować (logowanie, klikanie na przyciski, suwaki?) czy możne wysyłać jakieś komunikaty ale jak, czym?
Na JavaScript, ajax, jquery się kompletnie nie znam. chciałbym tez zrobić jakiś feedback z tej strony bo program zmienia to ze przycisk jest wciśnięty lub nie i to informacje wysyłać do urządzeń midi.

W załączniku wygląd web serwera

0

Jeśli zewnętrzny program nie ma wystawionego api i musisz programowo odtworzyć klikanie po nim i lub czytanie z niego zmian to najlepsze prawdopodobnie będzie Selenium do tego

0

najpewniej było by podejrzeć całą komunikację między przeglądarką a programem i zaimplementować ją po stronie delphi, ale to żmudna robota będzie

0

o "klikaniu" na stronie było kilka dni temu
TWebBrowser - GetElementsByTagName - uniwersalna metoda dla kazdego obiektu/znacznika
jeśli to wystarczy to ok, ale wydaje mi się że to mało elegancka metoda. Na twoim miejscu jednak przejrzałbym te pliki js na stronie i zastanowił się jak to przeportować na delphi. Może się okazać że jest tam zwykła metoda POST a to załatwisz przez IdHTTP.
Niestety też nie mam wiedzy o javascript ale na pewno na forum ktoś coś poradzi.

0

Jeśli zewnętrzny program nie ma wystawionego api i musisz programowo odtworzyć klikanie po nim i lub czytanie z niego zmian to najlepsze prawdopodobnie będzie Selenium do tego

Bardzo ciekawe narzędzie, nie znałem tego

najpewniej było by podejrzeć całą komunikację między przeglądarką a programem i zaimplementować ją po stronie delphi, ale to żmudna robota będzie

Chyba właśnie o to mi chodzi, z tym ze nie mam koncepcji jak to podejrzeć i ogarnąć po stronie Delphi

o "klikaniu" na stronie było kilka dni temu
TWebBrowser - GetElementsByTagName - uniwersalna metoda dla kazdego obiektu/znacznika
jeśli to wystarczy to ok, ale wydaje mi się że to mało elegancka metoda.

Czytałem ten wątek i zgadzam się jest to mało elegancja metoda ale jak nie wymyśle nic lepszego to skorzystam z tego

Poniżej kawałki kodu które sobie zaznaczyłem

(window.ui, jQuery);
! function() {
    function e(e) {
        return "administrator" !== e.toLowerCase()
    }
    var o = null,
        t = function() {
            function e() {
                var e = n.GetCachedUsername(),
                    o = n.GetCachedPassword();
                isDot2() && (e = "remote"), o = o === md5("") ? "" : r, e ? o || (o = "") : (e = "", o = "");
                var u = 0;
                s ? ($("#" + a, s).val(e), $("#" + l, s).val(o), u = {
                    overlay: i,
                    control: s,
                    modalWindow: !0
                }) : u = isDot2() ? {
                    overlay: i,
                    title: "Login",
                    modalWindow: !0,
                    textboxes: [{
                        id: l,
                        text: "Password:",
                        type: "password",
                        value: o,
                        focused: !0,
                        autoSelect: !0
                    }],
                    buttons: [{
                        id: "loginSubmit",
                        type: "custom",
                        text: "Login"
                    }],
                    formSubmitHandler: function(e, o) {
                        e.preventDefault();
                        var r = "remote",
                            i = t(o[l]);
                        return n.SetUserData(r, i), n.sendLoginRequest(r, i), !1

Tu raczej jest logowanie no ale to i tak mam za mało wiedzy o javascript

 c.prototype.__sliderMoved = function(e, t) {
                    this.m_commandExecutor.send({
                        requestType: Server.requestTypes.playbacks_userInput,
                        execIndex: t.execIndex,
                        pageIndex: this.pagesNavigationBar.getPagesData().index,
                        faderValue: t.value,
                        type: 1
                    }), log("Slider " + t.execIndex + " was moved. Value: " + t.value)
                }, c.prototype.__buttonPressed = function(e, t) {
                    this.m_commandExecutor.send({
                        requestType: Server.requestTypes.playbacks_userInput,
                        cmdline: this.m_commandLine.getText(),
                        execIndex: t.execIndex,
                        pageIndex: this.pagesNavigationBar.getPagesData().index,
                        buttonId: t.buttonId,
                        pressed: t.pressed || !1,
                        released: t.released || !1,
                        type: 0
                    }), log("Button " + t.buttonId + "." + t.execIndex + " pressed")

a tutaj raczej jest obsługa przycisków i suwaków.

W załączniku pliki js dla chcących podejrzeć i coś podpowiedzieć w jakim kierunku iść, albo co przeanalizować

0

Za pomoca fiddlera lub wiresharka podejrzyj co przeglądarka wysyła podczas klikania. Pewnie będzie to coś ala request http get/post - no to tylko skopiować request i tyle. Jeśli będzie to WebSocket to musisz nawiązać połączenie http i przejsć na niższy protokół i dalej się wymieniać. Jesli natomiast komunikacja idzie po https lub wss to będzie ciężko podglądnąć - wtedy warto debuggować przycisk w debuggerze chromowym, żeby podejrzeć co on tam wysyła.

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