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.
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ć...
a jak nie ma zainstalowanego gg to dupa.
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 :):)
a moze winexec('gg:123456789',SW_SHOWNORMAL);
a jak nie tak to najprosciej przez IE -
winexec('iexplore.exe gg:123456789',SW_SHOWNORMAL)
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?
ale te kody zadziałają tylko jeżeli masz zainstalowane gg, inaczej musiałbys pokombinowac moze coś z TGadu-Gadu...
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);
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 :)
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: )
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?
ś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;
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]
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ć.
Adamo to napisz chociaż wskazówki, jakąś podpowiedź jak to zrobić i ja to będę już robił. Dzięki :)
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.