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
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
20.01.2005 - 15:02
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
20.01.2005 - 16:34
Można również otwierać port TCP lub UDP
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?
Może chce zrobić sobie Remote console
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
20.01.2005 - 17:58
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
20.01.2005 - 18:21
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 :)
pachnie mi tutaj RCON-em
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
24.01.2005 - 09:30
mateuszn0
27.08.2005 - 15:41
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
10.10.2005 - 20:35
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
10.10.2005 - 21:03
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
10.10.2005 - 21:08
ahas, to taka bestia :>
a ja już myślałem, że jakiejś funkcji mi brakuje
dzięki za pomoc
Olórin
10.10.2005 - 22:03
Akurat to już jest w kZmieniaczu, wyprowadzałem dulkowi000 api kiedy robił wtyczke do tych gier
Zapytaj sie jego jak to robil
dulek000
11.10.2005 - 15:08
Ź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.
struthio
18.10.2005 - 12:05
mój plugin też już zmienia
i chyba łatwiej
no ale mimo to mam pytanie, bo czasami mi się nudzi i coś bym popisał
oprócz zmiany statusów jakie inne funkcje były by wykorzystywane przez zewnetrzne aplikacje ?
(pytam się bo może bym dokończył plugina
jak nie to zostanie on do mojego użytku tylko
)
Olórin
18.10.2005 - 19:58
Z pewnością odpalanie akcji (po podaniu parent i id)...
winthux
18.10.2005 - 20:10
jak i wywoływanie IMessage i ICMessage
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.