Jak sprawdzić czy string w schowku to URL czy nie ? Jeśli tak to w jaki sposób dopisać coś na początku i na końcu tego stringa ?

- Rejestracja:ponad 20 lat
- Ostatnio:13 dni
- Postów:1030
Nie wiem gdzie szukać spakowanej wersji, to sobie skleisz do pliku DPR i skompilujesz:
{ Skleił oraz modyfikacji dokonał
(c)2003 netvalker
netvalker@wp.pl
Programik siedzi sobie ukryty w systemie i podgląda schowek.
Gdy w schowku znajdzie się adres strony www lub adres email
pyta czy otworzyć nową stronę za pomocą explorera lub napisać
list. Programik się zamknie gdy w schowku pojawi się tekst - exit -.
Procedura sprawdza tylko pierwsze znaki adresu :
www.
http:
Więc jeśli w schowku pojawi się jakikolwiek tekst rozpoczynający
się tymi znakami zostanie rozpoznany jako adres strony internetowej.
Podobna zasada dotyczy adresu Email - sprawdzane jest występowanie
tylko i wyłącznie znaku - @ - taka sama zasada jak w adresie www.
}
program Url;
uses
Clipbrd, Windows, Forms, Dialogs, ShellApi;
Label Loop, Loops;
{$R *.res}
var
Ex : Integer;
Hm : HDC;
Ul : String;
Begin
Ul := '';
// ukryj belkę
{ * http://4programmers.net/view_faq.html?id=37 * }
Ex := GetWindowLong(Application.Handle, GWL_EXSTYLE);
SetWindowLong(Application.Handle,GWL_EXSTYLE,
Ex or WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW);
// nie pozwól uruchomić ponownie
{ * http://4programmers.net/view_faq.html?id=38 * }
Hm := CreateFileMapping(THANDLE($FFFFFFFF),nil,
PAGE_READONLY,0,32,'ApplicationTestMap');
If GetLastError=ERROR_ALREADY_EXISTS then
Begin
ShowMessage('Nie można uruchomić tego samego programu drugi raz.');
Goto loops;
CloseHandle(Hm);
End;
MessageBox(0,'ABY ZAMKNĄĆ PROGRAM SKOPIUJ DO SCHOWKA TEKST - exit -','Utl-informacje',MB_IconeRROR);
// sprawdź schowka zawartość
{ * http://4programmers.net/view_faq.html?id=81 * + własna inwencja twórcza ;) * }
Loop:
Try
If Clipboard.HasFormat(CF_TEXT) then
Begin
If Not (Ul = ClipBoard.AsText) then
Begin
If ClipBoard.AsText = 'exit' then Ex := 1; // exit w schowku aplikacja się zamknie
If ((Copy(ClipBoard.AsText,1,4)= 'www.') Or (Copy(ClipBoard.AsText,1,5)= 'http:')) Then
If MessageBox(0,PAnsiChar(
'W schowku prawdopodbnie znajduje się adres strony www :'+ #13 +#13
+ ClipBoard.AsText + #13 +#13
+ 'Czy chcesz uruchomić stronę w nowym oknie?'),PAnsiChar('Url-przechwyciłem adres strony www'),MB_YesNo) = ID_Yes Then
ShellExecute(0,'Open',PAnsiChar('iexplore.exe'),PAnsiChar(ClipBoard.AsText),nil,Sw_ShowDefault);
If Not(pos('@',ClipBoard.AsText) = 0) then
If MessageBox(0,PAnsiChar(
'W schowku prawdopodbnie znajduje się adres Email :'+ #13 + #13
+ ClipBoard.AsText + #13 + #13
+ 'Czy chcesz napisać do : ' + (Copy(ClipBoard.AsText,1,Pos('@',ClipBoard.AsText)-1))+' ?'),PAnsiChar('Url-przechwyciłem adres email'),MB_YesNo) = ID_Yes Then
ShellExecute(0,'open',PAnsiChar('mailto:' + ClipBoard.AsText),nil,nil,SW_ShowDefault);
End;
Ul := ClipBoard.AsText;
End
Else
Ul:='';
Finally
end;
If Ex = 1 then Goto loops;
Sleep(1000); // Sprawdzaj raz na sekundę
Goto Loop;
Loops:
ShowMessage('Skleił oraz modyfikacji dokonał' + #13 +
'(c)2003 netvalker' + #13 +
'netvalker@wp.pl' + #13 + #13 +
'Nastąpi zamknięcie programu...');
Application.Terminate;
End.
- Rejestracja:ponad 22 lata
- Ostatnio:około miesiąc
- Postów:37
Dzięki... a teraz trudniej... Mam stringa powiedzmy: 'Zajrzyj na stronę www.xxxxxx.pl i wejdź na forum.'. Jak wykryć czy w tym stringu jest adres URL i jak na początku i końcu URLa coś dopisać ?
- Rejestracja:prawie 20 lat
- Ostatnio:minuta
- Lokalizacja:Gorlice
wala napisał(a)
Dzięki... a teraz trudniej... Mam stringa powiedzmy: 'Zajrzyj na stronę www.xxxxxx.pl i wejdź na forum.'. Jak wykryć czy w tym stringu jest adres URL i jak na początku i końcu URLa coś dopisać ?
Jeżeli w stringu jest 1 adres to sprawa prosta:
const
urlconst: array [0..2] of string[10] = ('http://', 'ftp://', 'www.');
var
i, p1, p2: integer;
s, s1, s2: string;
begin
s:= 'Zajrzyj na stronę www.xxxxxx.pl i wejdź na forum.';
s1:= 'tekst pierwszy';
s2:= 'tekst drugi';
for i:=Low(urlconst) to High(urlconst) do
begin
p1:= Pos(urlconst[i], s);
if (p1 > 0) then
begin
p2:= p1;
while ((s[p2] <> ' ') and (p2 <= Length(s))) do
Inc(p2);
Insert(s1, s, p1);
p2:= p2 + Length(s1);
Insert(s2, s, p2);
break;
end;
end;
ShowMessage(s);
end;
EDIT//
Adam.Pilorz napisał(a)
drobne sprostowanie: http://, nie http:\
Dzięki, poprawiłem.

- Rejestracja:prawie 22 lata
- Ostatnio:ponad 14 lat
- Postów:2998
drobne sprostowanie: http://, nie http:\
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.