jak zmienic opis gg?? Chodzi mi oto ze mam wlaczonego gg i chce zmienic programowo status. nie chce robic komunikatora.
http://dev.null.pl/ekg/docs/protocol.html poczytaj sobie
http://dev.null.pl/ekg/docs/protocol.html poczytaj sobie
Bełdzio Karolaq chce zmienić status w programie Gadu-Gadu, a nie pisać nowy komunikator. [glowa]
Spróbuj poudawać naciśniecią klawiszy przez użytkownika itp.
Próbowałbym jakimiś uchwytami... Tj. łapiesz uchwyt ikonki w tray'u, udajesz naciśnięcie prawego przycisku myszy, on Ci wyświetla popupa, wtedy wywołujesz w nim zdarzenie odpowiadające za kliknięcie w 8 pozycję (status opisowy) i potem zmieniasz ComboBox.Text na wybrany opis... No i oczywiście "Klikasz" w OK. Kodem nie zarzucę, bo się na tym specjalnie nie znam (nigdy nie bawiłem się w "zaglądanie" do innych programów), ale tak mniejwięcej zarys rozwiązania chyba jest...
Próbowałbym jakimiś uchwytami... Tj. łapiesz uchwyt ikonki w tray'u,
to ikonka ma uchwyt??
chyba nie z tego co pamietam.
wiec trza zlapac okno glowne potem wcisnac przycisk na dole i kliknac w menu.
hehe, pobawiłem się troszke tym i dowiedziałem się, że to okienko z opisem to dialogbox i jest on generowany dynamicznie, więc zmiana opisu przez setwindowtext i udawanie wciśnięcia OK raczej się nie powiodą bo najpierw trzeba będzie utworzyć ten dialog :/
Wydaje mi się, że można to zrobić jakoś poprzez jeden z plików konfiguracyjnych. Przeglądałem je kiedyś i tam jest coś takiego jak aktualny status, czy coś. Tylko niestety należałoby znać strukturę plików.
Wydaje mi się, że można to zrobić jakoś poprzez jeden z plików konfiguracyjnych. Przeglądałem je kiedyś i tam jest coś takiego jak aktualny status, czy coś. Tylko niestety należałoby znać strukturę plików.
Oprócz tego, że odczytasz status z pliku, czy też go tam zapiszesz, to musisz jeszcze wysłać go do serwera GG.
Zaciekawiło mnie to ... :]
type
TStatus = (ggOpis = 2, ggNiedostepny = 3, ggNiewidoczny = 4, ggZarazWracam = 5, ggDostepny = 6); // ustalenie statusu
procedure MakeStatus(Status: TStatus); // procedura ładująca status
var
ggHdn: THandle;
i: Integer;
begin
// trzeba to upgradowac na uniwersalke:)
ggHdn := FindWindow(nil, 'Ja (2849811)');
SetActiveWindow(ggHdn);
BringWindowToTop(ggHdn);
keybd_event(Vk_MENU, 1, 0, 0);
keybd_event(VkKeyScan('M'), 1, 0, 0);
keybd_event(Vk_MENU, 1, KEYEVENTF_KEYUP , 0);
for i := 0 to Ord(Status) do
keybd_event(VK_UP, 0, 0, 0);
keybd_event(VK_RETURN, 1, 0, 0);
end;
Wywołanie:
procedure TForm1.Button1Click(Sender: TObject);
begin
MakeStatus(ggZarazWracam);
end;
Jednak nie działa jak należy.. - strzałki nie chcą się naciskać dalej niż jedna.. nie wiem dlaczego :-/ .. - no i działa tylko jeśli GG jest pokazane - też trzeba dopracować.. nie zadziała jeśli GG jest niewidoczne [ siedzi w trayu ].
Jak chodzi o to naciskanie strzałek, to może próbujesz je "nacisnąć" zbyt szybko? Może GG wtedy wykonuje daną operację i czyści bufor, a tamte "naciśnięcia" były już w buforze? Spróbowałbym odczekiwać jakąś 1/10 sekundy między poszczególnymi naciśnięciami...
Natomiast jak chodzi o siedzenie w tray'u, to pytanie do kogoś znającego się na WinApi, jak wywołać OnNotifyEvent (czy jakoś tak) dotyczące danej ikonki w tray'u z odpowiednimi parametrami (odpowiadającymi kliknięciu lewym przyciskiem myszki)? Ja niestety niewiele o WinApi wiem, więc chyba za dużo w tej materii nie zdziałam...
u mnie na gg 6.0 build 142 klasa okna gg ( tego z userami etc ) to Afxb00000005:000052DF
starczy tylko dac showwindow i juz sie pokazuje
taka poprawka powinna pomoc:
type
TStatus = (ggOpis = 4, ggNiedostepny = 3, ggNiewidoczny = 2, ggZarazWracam = 1, ggDostepny = 0);
i jeszcze to:
for i := 0 to Ord(Status) do
begin
keybd_event(VK_DOWN, 0, 0, 0);
keybd_event(VK_DOWN, 0, KEYEVENTF_KEYUP, 0);
end;
A ja musze was zmartwić... widzieliście nowy build gg? 154?Tam są troche inaczej poustawiane te itemy z menu..
Ale znowu poprawka w
type
zadziała:
type
TStatus = (ggOpis = 6, ggNiedostepny = 5, ggNiewidoczny = 4, ggZarazWracam = 3, ggDostepny = 2);