Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zamknięcie Konnekta
Konnekt | Forum > Developerzy > Tworzenie dodatków
Cezex
Szukam sposobu na zamknięcie Konnekta - niestety próby z wysłaniem komunikatu przez SendMessage(handle, WM_CLOSE, 0, 0) czy też SendMessage(handle,WM_SYSCOMMAND,SC_CLOSE,0) nie przynoszą efektu. Probówałem je wysłać do okien oznaczonych klawami UImain i UItop.d4645930, ale jedyne co udaje mi się uzyskać to schowanie głównego okna.

Czy ktoś zna jakiś trick na ubicie tego procesu ?
skolima
Akcje. Zobacz jak działa np. zamykanie za pośrednictwe skrótu w klavie.
Cezex
Nie za bardzo czaje, mógłbyś trochę jaśniej ? Od razu mówię, że studiowanie kodu wtyczki odpada bo ostatni raz pisałem w C jakieś 7 lat temu i zupełnie nic z tego nie pamiętam. TIA.
Olórin
CODE
#define IMC_SHUTDOWN   10   // Zamyka program

Albo wywołując akcje :-)
CODE
void pokaz (int parent,int id){  
sUIActionNotify_2params akcja = sUIActionNotify_2params();
akcja.act = sUIAction(parent,id);    
akcja.code = ACTN_ACTION;
ICMessage(IMI_ACTION_CALL , (int)&akcja , 0);

}
Cezex
No super, a teraz powtórzę to co napisałem w poprzednim komentarzu:

QUOTE
Od razu mówię, że studiowanie kodu wtyczki odpada bo ostatni raz pisałem w C jakieś 7 lat temu i zupełnie nic z tego nie pamiętam.

Niestety kompletnie nic mi to nie mówi sad.gif Swój soft piszę w Delphi więc pliki nagłówkowe z SDK na za wiele mi się nie zdadzą...
magor
Zdaje sie Cezex chce zamnkac konnekta z zewnatrz, z innej aplikacji. A nie jak od wewnatrz z pozycji wtyczki...
Mozesz sprobowac wykonac na konnekt'cie terminate proccess, ale nie pamietam jak to sie robi przy pomocy WinApi.

edit:

CODE
The OpenProcess function opens an existing process object.

HANDLE OpenProcess(
 DWORD dwDesiredAccess,
 BOOL bInheritHandle,
 DWORD dwProcessId
);

wiecej - msdn


CODE
The TerminateProcess function terminates the specified process and all of its threads.

BOOL TerminateProcess(
 HANDLE hProcess,
 UINT uExitCode
);

wiecej - msdn

i np:
CODE
HANDLE hProc = OpenProcess(1, false, konnektProcId);
TerminateProcess(hProc, -9);
hao
Wyślij komunikat windowsowy WM_ENDSESSION do okna UIMain ...
Oczywiście nie jest to oficjalny sposób zamykania programów (WM_ENDSESSION jest rozsyłany do wszystkich okien podczas zamykania systemu), ale w tym wypadku zadziała...

A jeżeli już mówimy o zamykaniu Konnekta od środka, to służy do tego ICMessage(IMC_SHUTDOWN); Nie trzeba tykać akcji smile.gif
Cezex
Na to nie wpadłem, jednak co dwie głowy to nie jedna smile.gif Działa bez pudła, wielkie dzięki !
alberht
to może pochwal się nad czym pracujesz... biggrin.gif
Cezex
Potrzebne mi to było do softu, który wykrywa przez BT czy komórka jest w zasiegu i w zależności od tego wykonuje różne akcje. Aktualnie już to jest zbędne bo udało mi sie zdalnie zmienić status Konnekta, więc jak wychodzę z domu to aktumatycznie mi przechodzi w tryb niestępny biggrin.gif
Gość
Jak zamknąć Konnekta z linii komend bez "terminowania" procesu, bo wtedy nie sa zapamietywane ustawienia, ktore sa zapisywane przy normalnym zamknieciu?

Do tej pory probowalem zakonczyc Konnekta za pomoca programu PowerPro. Ma on 2 rozne procedury do zamykania aplikacji (window.close() oraz window.close2()) - niestety obie jedynie minimalizuja okienko z kontaktami do traya, choc dzialaja wysmienicie w przypadku innych aplikacji.
Moglbym tez uzyc 3-ciej windows.closeforce(), ale jak pisalem po takim wymuszonym zamknieciu trace wszystkie zmienione ustawienia (np. ustawiony ostatnio opis).

Jakies pomysly?

PS.
Oczywiscie chodzi mi o bezobslugowe zamkniecie konnekta (bez klikania myszka ikonek, itp.)
Gość
QUOTE(hao @ 4.05.2005 - 10:12)
Wyślij komunikat windowsowy WM_ENDSESSION do okna UIMain ...

Moglby mi ktos podpowiedziec jak mam przeslac ten komunikat?

Korzystam z programu PowerPro i niestety nie dziala jak wywoluje to w kazdej ponizszej wersji:
*Window PostMessage WM_ENDSESSION 0 0 c=UImain
*Window PostMessage WM_COMMAND "WM_ENDSESSION" 0 c=UImain
*Window PostMessage WM_COMMAND WM_ENDSESSION 0 c=UImain

Natomiast wysylanie komunikatow do np. Total Commandera dziala:
*Window PostMessage WM_USER+51 540 540 c=TTOTAL_CMD - odswieza liste plikow w TotalCmd

To opis procedury wysylania komunikatow windowsowych z PowerPro:
QUOTE
For PostMessage and SendMessage you can use the string wm_command, wm_app, or wm_user to represent the corresponding message id. You can also use wm_user+n, where n is a number. You can enter a hexadecimal number by preceding it with 0x, e.g. 0x1f0a.

For example, to use SendMessage with WinAmp, use
*Window SendMessage wm_command 40046 0 c=winamp v1.x to pause winamp
*Window SendMessage wm_user 1 105 c=winamp v1.x to set variable SendMessage to length of current track

Moglby mnie ktos oswiecic jak powinienem to wywolac?
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.