Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: API - wywoływanie funkcji wtyczek z zewnętrznych programów
Konnekt | Forum > Developerzy > Tworzenie wtyczek
12q12
Załóżmy, że chciałbym zrobić taką rzecz. W konnekcie robię sobię swoją wtyczkę, której działalność będzie banalna - dodajemy na głównym toolbarze jakiś przycisk, którego naciśnięcie będzie wysyłało wiadomość do użytkownika o numerze x.

Napisanie wtyczki banalne, bo nawet taki przykład jest w sdk.

Ale teraz załóżmy, że chce by jakaś zewnętrza aplikacja mogła ten przycisk wywołać. Tzn w moim programie wstawiam sobie inny przycisk, który ma zrobić to co ta napisana przeze mnie wtyczka.

Jak takie coś zrobić?

Dzięki za odpowiedzi
hao
Musisz napisać wtyczkę, która ma "coś" zrobić w Konnekcie, napisać program z przyciskiem i wymyśleć sposób w jaki program miałby dogadać się z wtyczką (to już nie kwestia Konnekta a API windowsa...) ...

Jest jednak alternatywny sposób (mniej polecany, ale na pewno prostszy... nie nadaje się zbytnio, jeżeli miałbyś wywoływać swoją funkcję bardzo często)...

Możesz w swoim programie wywołać konnekta w sposób:
CODE
konnekt.exe -moja_komenda


Zaś we wtyczce w Konnekcie obsłużyć komunikat IM_PLUG_ARGS
CODE

IMessageProc(...) {
...

case IM_PLUG_ARGS:
 sIMessage_plugArgs * pa = static_cast<sIMessage_plugArgs*> (msgBase);
 if (pa->argc < 2) return 0;
 /* tutaj szukamy w pa->argv swojej komendy i zachowujemy się odpowiednio */
 break;

...
}
winthux
Jest 5 sposobów tego co chcesz zrobić:
1. Podał hao
2. Możesz w pluginie stworzyć własne okno (niewidoczne) i wysyłać do niego odpowiednie msg z Twojej aplikacji.
3. Możesz spróbować przez pipes
4. Możesz użyć MapFiles
5. Możesz stworzyć obiekt COM :)

Największe możliwości daje 2 i 5, z czego prostsze jest 2 ale 5 jest lepsze ;]
Olórin
Można również otwierać port TCP lub UDP wink.gif
magor
Nie wiem jak API konnekta zapatruje sie na odbieranie przez wtyczki wiadomosci windowsowych, ale mozna tak:
We wtyczce i zewnetrznej aplikacji zarejestrowac wlasna wiadomosc:
CODE
UINT m_OtherAppMsgId = RegisterWindowMessage("MyMessage");

nastepnie z aplikacji wysylamy wiadomosc do wszystkich windowsowych programow:
CODE
PostMessage(HWND_BROADCAST, m_OtherAppMsgId, 0, 0L);

jedyne co pozostalo to naluchiwanie we wtyczce czy ta wiadomosc zostala wyslana i jezeli tak sie zdarzylo - jej odpowiedne obsluzenie.
Moze by zadzialalo.
12q12 mozna wiedziec co do za wtyczka i do czego? tongue.gif
atol
Może chce zrobić sobie Remote console
12q12
Dzięki za odpowiedzi.

Metodę nr 1 zrozumiałem. A możecie mi dać jakieś bliższe wskazówki odnośnie 2 i 5?

2. Nie zabardzo wiem jak to by miało działać. Jak wysyłać odpowiednie msg z mojej aplikacje, niby co to by miało być. Możesz to bliżej sprecyzować?

5. A od czego by tu zacząć? Tu na razie stoję w miejscu.
zdradzisz nam swoja IDEE ;] coz to bedzie za diabelski soft :]
Olórin
magor - trzeba stworzyć własne okno nasłuchujące... I niekoniecznie trzeba rejestrowac wiadomosc, mozna uzyc swojego ID i wysylac do swojego okna (znaleźć je przez FindWindow), a nie jak proponujesz na broadcast
winthux
QUOTE(12q12)
2. Nie zabardzo wiem jak to by miało działać. Jak wysyłać odpowiednie msg z mojej aplikacje, niby co to by miało być. Możesz to bliżej sprecyzować?

Tworzysz własne okienko we wtyczce przez CreateWindowEx bez stylu WS_VISIBLE. Teraz w aplikacji szukasz uchwytu do okna (FindWindow) i robisz SendMessage( hOkna, msg, ... ) wtedy w WindowProc we wtyczce odbierasz tą wiadomość switch(msg) { case msg: Funkcja(); break; }

QUOTE(12q12)
5. A od czego by tu zacząć? Tu na razie stoję w miejscu.

Najlepiej zacząć od przeczytania trochę materiałów na temat objektów COM, COM+, DCOM :)
atol
pachnie mi tutaj RCON-em smile.gif
12q12
QUOTE(winthux)
wtedy w WindowProc we wtyczce odbierasz tą wiadomość switch(msg) { case msg: Funkcja(); break; }


gdzie jest to WindowProc? To mam umieścić gdzieś w metodzie IMessageProc?
Olórin
Podstawy winapi....
http://216.239.59.104/search?q=cache:cdsGp...lient=firefox-a
mateuszn0
a jeszcze możesz użyć funkcji WaitForSingleObject w wątku żeby czekał na Eventa z funkcji CreateEvent a w twoim programie z SetEvent naprzykład
struthio
a ja mam inne pytanie :>
potrzebna mi byla wtyczka do konnekta .. za pomoca ktorej moglbym z zewnetrznej aplikacji sterowac Statusem konnekta (dostepny/zaraz wracam itd)

i wszystko chodzi ślicznie :> ale mam 1 maly problem :>

w menu wyboru wtyczki (w tym co sie zaznacza zeby ładować wtyczke przy starcie) nie pojawia sie ani nazwa wtyczki ani opis .. ani nic .. tylko nazwa pliku ...

wtyczka jak mowilem dziala wiec poprawnie zwraca informacje na 'IM_PLUG_SIG', 'IM_PLUG_NAME' mimo to nic ...

a w przykladach nie widzialem nic. .. moze ktos poratuje ?
winthux
Nazwa w tym okienku pobierane są nazwy z resource wtyczki.

Musisz do wtyczki dorzucić resource -> version, aby wszystko ładnie wyglądało. W MSVC w okienku resource klikasz ppm i Add->resuorce->version. W borlandzie w opcjach projektu jest version info, zaznaczasz include file version (na podstawie delphi, nie wiem jak w cpp builderze jest).
struthio
ahas, to taka bestia :>
a ja już myślałem, że jakiejś funkcji mi brakuje wink.gif

dzięki za pomoc smile.gif
Olórin
Akurat to już jest w kZmieniaczu, wyprowadzałem dulkowi000 api kiedy robił wtyczke do tych gier wink.gif Zapytaj sie jego jak to robil
dulek000
Źródła i projekt VC++ wtyczki odbierającej informacje i zmieniającej status w załączniku. Nie mam teraz jak skompilować, więc nie jestem pewny, czy zawarłem wszystko co potrzebne.

Załączniki

struthio
mój plugin też już zmienia smile.gif
i chyba łatwiej smile.gif

no ale mimo to mam pytanie, bo czasami mi się nudzi i coś bym popisał smile.gif oprócz zmiany statusów jakie inne funkcje były by wykorzystywane przez zewnetrzne aplikacje ? smile.gif (pytam się bo może bym dokończył plugina smile.gif jak nie to zostanie on do mojego użytku tylko tongue.gif)
Olórin
Z pewnością odpalanie akcji (po podaniu parent i id)...
winthux
jak i wywoływanie IMessage i ICMessage smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2012 Invision Power Services, Inc.