GG aplet

0

Witajcie!
Jak można otworzyć aplet rozmowy (okienko) dowolnego numeru GG np. 1111 poprzez Button? Np. mam formę, na niej Button a pod niego podpięty kod do otworzenia okienka rozmowy. Właśnie, jak taki kod by wyglądał? Dziękuję za podpowiedź lub odpowiedź, miło widziane jakieś linki do tego.

0
uses ShellAPI;

procedure TForm1.Button1OnClick(Sender: TObject);
var
  GG_numer: String;
begin
  GG_numer := 'gg:xxxxxx'; //xxxxxx to numer gg
  shellexecute(0, 'open', PChar(GG_numer), nil, nil, SW_SHOWNORMAL);
end;

Pisane z głowy, ale powinno działać...

0

a jak nie ma zainstalowanego gg to dupa.

0

d[AvE] fajny kodzik tylko nie wykonuje ort! operacji:( Kompiluje się cacy to fakt, ale nic nie wykonuje. Nie otwiera okienka niestety:( Oczywiście podałem jakiś nr GG. Czy ktoś potrafi nanieść korektę na ten kodzik?

d[AvE] i tak nieźle :):)

0

a moze winexec('gg:123456789',SW_SHOWNORMAL);
a jak nie tak to najprosciej przez IE -
winexec('iexplore.exe gg:123456789',SW_SHOWNORMAL)

0

N_A_V niestety tego też próbowałem i nic:( Nie mam już siły, ale nie poddaję się.
Wszystko się kompiluje czyli jest OK lub też kompilator nie reaguje na taki kod :) Nie wiem.

<url>http://www.gadu-gadu.pl/users/status.asp?id=nr_uzytkownika&styl=1/ 2</url>

status: 1=Niedostępny, 2=Dostępny, 3=Zaraz wracam

A czy to może coś dać? Jak tak to jak takie coś wykorzystać w Delphi?

0

ale te kody zadziałają tylko jeżeli masz zainstalowane gg, inaczej musiałbys pokombinowac moze coś z TGadu-Gadu...

0

Cześć

ten kodzik na 100% uruchamia okienko gg na wskazany numer
Jedynie do zmiennej "sciezkaGG" musisz pobrać ścieżkę gdzie znajduje się gg.exe
Pobierz ją z rejestru a jeśli nie zainstalowane gg, to zrób procedurkę z wywołaniem
okienka wyboru katalogu. (potem scieżkę zapisz np. w rejestry)

 
  
sciezka:= sciezkaGG +' /ggurl:"%'+ nrGG +'"';
WinExec( PChar(sciezka), SW_Normal);

0

No, bo moim celem było napisać to wszystko pod warunkiem że jest zainstalowane GG na kompie i że użytkownik też będzie miał GG u siebie. Nie chcę kombinować z komponentami typu TGaduGadu.
Inter to co mi podałeś to chyba nie jest cały kod do otwarcia okienka?:) Jeśli tak to zaraz będe kombinował. Dzięki wielkie :)

0

U mnie działa zarówno:
shellexecute(0, 'open', PChar('gg:1234567'), nil, nil, SW_SHOWNORMAL);end;
jak i:
sciezka:='d:\Program Files\Gadu-Gadu\gg.exe /ggurl:"%'+ '1234567' +'"';
WinExec( PChar(sciezka), SW_Normal);
(oczywiście d:\Program Files\Gadu-Gadu\gg.exe to ścieżka dostępu do GG na moim kompie. U każdego może być inaczej, a w 90% będzie na C:, nie na D: )

0
procedure TForm1.Button2Click(Sender: TObject);
var
sciezka:string;
begin
 sciezka:='d:\Gadu-Gadu\gg.exe /ggurl:"%'+ '1234567' +'"';
WinExec( PChar(sciezka), SW_Normal);
end;

To działa rewelacyjnie:) a jak np. odczytać status tej osoby i wpisać go do Labela?

0

ściągnij plik "http://www.gadu-gadu.pl/users/status.asp?id=NR_GG&styl=2" np na c: i go odczytaj jeśli będzie 1 to niedostępny, 2 to dostępny a 3 to zaraz wracam. pobierz najlepiej funkcją URLDownloadToFile z unitu UrlMon.

masz tu przykładowy kod jak chcesz:

uses UrlMon;

var numer,status:integer;plik:textfile;temp:string;
begin
  numer:=5555698;
  if URLDownloadToFile(nil,PChar('http://www.gadu-gadu.pl/users/status.asp?id='+IntToStr(numer)+'&styl=2') ,'c:\stat.dat', 0, nil)<>0 then status:=1 else begin
     AssignFile(plik,'c:\stat.dat');
     Reset(plik);
     ReadLn(plik,temp);
     if not TryStrToInt(temp,status) then status:=1;
     CloseFile(plik);
     DeleteFile('c:\stat.dat');
  end;
  case status of
    2:Label1.Caption:=IntToStr(numer)+' jest teraz dostępny';
    3:Label1.Caption:=IntToStr(numer)+' zara wraca';
  else
    Label1.Caption:=IntToStr(numer)+' ist nicht da';
  end;
end;
0

Super wszystko działa tylko szkoda, że nie pobiera statusów napisanych przez Usera. Da się takie coś zrobić? Ale to i tak fajnie. Tylko mam problem, bo jak np. się zmieni status u kogoś to mi nie chce zmienić w programie, a mam podpięty pod Timer'a :) Jeszcze będę kombinował z tym. Ogólnie fajnie to wszystko wygląda. :) [browar]

0

nie zmienia się bo status na servie gg odświeża się co 5 min, a da się pobierać opis ale to jest bardziej skomplikowane i nie chce mi sie tu pisać.

0

Adamo to napisz chociaż wskazówki, jakąś podpowiedź jak to zrobić i ja to będę już robił. Dzięki :)

0

dobra to znaj moją dobroć. napisałem ci cały kod. znaczy ułatwiłem sobie znacznie pracę bo skorzystałem z gotowego skryptu pobranego ze strony http://gg.siedziba.pl/

Oto ten kod:

(*

 Kod do odczytywania statusu i opisu użytkownika GG by Adamo

*)
uses UrlMon;

function Heks(c:char):byte;
(* Funkcja zamiany liczby Hexadecymalnej
 na decymalną napisana na szybko przez Adamo
*)
var l1:byte;
begin
 case Ord(UpCase(c)) of
  48..57:l1:=Ord(UpCase(c))-48; // cyfry (0-9)
  65..70:l1:=Ord(UpCase(c))-55; // litery (A-F)
 else
  l1:=0; // jeśli jest to inny znak to przypisz 0
 end;
 Result:=l1;
end;

function HexToInt(Hex:string):Integer;
var i,wsp:byte;liczba:integer;
begin
  wsp:=0;
  liczba:=0;
  for i:=Length(Hex)-1 downto 1 do begin
    Inc(wsp);
    Inc(liczba,Heks(Hex[i])*(wsp*16));
  end;
  Inc(liczba,Heks(Hex[Length(Hex)]));
  Result:=liczba;
end;

function dekoduj(text:string):string;
var temp,ch:string;i:byte;
begin
  temp:='';
  for i:=0 to (length(text)-1) div 6 do begin
    ch:=Copy(text,i*6+1,6);
    ch:=Copy(ch,5,2);
    ch:=Chr(HexToInt(ch));
    temp:=temp+ch;
  end;
  Result:=temp;
end;

procedure statusGG(numer:string;var status:integer;var opis:string);
var plik:textFile;linia:string;
begin
  if URLDownloadToFile(nil,PChar('http://gg.siedziba.pl/status.php?uid='+numer+'&js=2') ,'c:\stat.dat', 0, nil)<>0 then
    begin
      status:=1;
      opis:='Brak opisu';
      exit;
    end;
  AssignFile(plik,'c:\stat.dat');
  Reset(plik);
  ReadLn(plik,linia);
  linia:=Copy(linia,Pos('=',linia)+1,1);
  if not TryStrToInt(linia,status) then status:=1;
  ReadLn(plik,linia);
  linia:=Copy(linia,Pos('"',linia)+1,Length(linia));
  linia:=Copy(linia,1,Pos('"',linia)-1);
  if length(linia)<6 then opis:='Brak opisu' else
    opis:=dekoduj(linia);
  CloseFile(plik);
  DeleteFile('c:\stat.dat');
end;

i przykład użycia:

procedure TForm1.Button1Click(Sender: TObject);
var opis:string;statusik:integer;
begin
 statusGG('5555698',statusik,opis);
 case statusik of
   2:Label1.Caption:='Dostępny :)';
   3:Label1.Caption:='Zaraz wracam :|';
 else
   Label1.Caption:='Niedostępny :(';
 end;
 Label2.Caption:=opis;
end;

Pozdrawiam.
aha dodam że to działa szybciej niż tamten kod wyżej.

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