Entwickler-Ecke
Internet / Netzwerk - Vom Clienten eine URL aufrufen lassen ?!
ex4ct - Mo 10.04.06 18:09
Titel: Vom Clienten eine URL aufrufen lassen ?!
Hallo an alle!
Dies ist mein erster Beitrag hier im Forum.
Ich habe ein Client/Server(Remote Administration Tool) programmiert.
Da sind paar Funktionen wie CD-ROM Laufwerk öffnen und schliessen oder Sound abspielen u.a.!
Jetzt wollte ich eine Funktion hinzufügen, mit dem ich eine Internetseite aufrufen lassen kann.
Ich habe es mit(server):
Delphi-Quelltext
1: 2:
| else if MyString ='InternetadresseAufrufen' then begin StrPCopy(TMP, edit3.text); ShellExecute(0,NIL,TMP,NIL,NIL,SW_Normal); end; |
Das,üsste eigentlich so gehen aber da ich
"edit3.text"(die eingegebene URL) nur mein Client kennt, kann die Server.exe damit nichts anfangen.
Wie kann ich dem Server sagen dass edit3.text die eingegebene URL bei dem Client ist? Übrigens "MyString" ist(server):
Delphi-Quelltext
1:
| myString := Socket.ReceiveText; |
Der Befehl was welches Wort MyString hat ist das(client):
Delphi-Quelltext
1: 2: 3: 4:
| procedure TForm1.Button40Click(Sender: TObject); begin ClientSocket1.Socket.SendText('InternetadresseAufrufen'); end; |
MFG!
Marco D. - Mo 10.04.06 18:16
Wenn ich das richtig verstanden habe, dann weiß der Server die Adresse nicht?
Dann musst du sie im String mitsenden.
Fighter#1 - Mo 10.04.06 18:17
Send doch beim Befehl Internetadresseausführn ( oder wie der heißt ) noch die URL mit.
Das sähe dann so aus ( ungetestet )
Delphi-Quelltext
1: 2: 3: 4:
| If Copy(MyStr,1,Pos(':',Mystr))='Internetadresseausführen' Then begin Delete(myStr,0,Pos(':',Mystr)); end; |
F34r0fTh3D4rk - Mo 10.04.06 18:22
fangen strings net bei 1 an ?
Fighter#1 - Mo 10.04.06 18:25
Bei Copy schon
Marco D. - Mo 10.04.06 18:38
Liegt edit3 in der Client oder der Serverapplikation?
ex4ct - Mo 10.04.06 18:39
Marco D. hat folgendes geschrieben: |
| Liegt edit3 in der Client oder der Serverapplikation? |
In der Client-Applikation! :-)
Will ja die URL selber eingeben^^
Marco D. - Mo 10.04.06 18:46
Na dann so:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| clientsocket1.socket.sendtext('InternetAdressenAufrufen#'+edit3.text); var url,s:string; s:=socket.receivetext; for i := pos('#',s) to length(s) do begin url:=url+s[i]; end; showmessage(url); |
ex4ct - Mo 10.04.06 18:49
Vielen Dank Marco, werde ich gleich probieren !!
Fighter#1 - Mo 10.04.06 19:07
@Marco ist das nicht das selbe, was ich ihm geschickt habe?, nur das ich ihm gleich den Einabu in sein Script ermöglicht habe?
ex4ct - Mo 10.04.06 19:16
Es geht leider nicht!
Server:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37:
| procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); var myString,url,s: String; buff : array[0..MAX_COMPUTERNAME_LENGTH] of char; TMP: Array[0..255] of char; nsize : DWORD; rc : hwnd; i:integer; begin nsize := SizeOf(buff); myString := Socket.ReceiveText; s:=socket.receivetext; Randomize(); if MyString = 'CDRomOeffnen' then mciSendString('Set cdaudio door open wait', nil, 0, handle) else if MyString = 'CDRomSchliessen' then mciSendString('Set cdaudio door closed wait', nil, 0, handle) else if MyString = 'Neustarten' then ExitWindowsEx(EWX_REBOOT,0) else if MyString = 'Herunterfahren' then ExitWindowsEx(EWX_SHUTDOWN,0) else if MyString = 'BenutzerAbmelden' then ExitWindowsEx(EWX_LOGOFF,0) else if MyString = 'schnellHerunterfahren' then ExitWindowsEx(EWX_FORCE,0) else if MyString = 'StrgAltEnfFreigeben' then SystemParametersInfo(SPI_SCREENSAVERRUNNING,0,0,0) else if MyString = 'StrgAltEnfSperren' then SystemParametersInfo(SPI_SCREENSAVERRUNNING,1,0,0) else if MyString = 'MonitorStandby' then SendMessage(Application.Handle, wm_SysCommand, SC_MonitorPower, 0) else if MyString = 'MauspositionAendern' then SetCursorPos(Random(800),Random(600)) else if MyString = 'StartbuttonLoeschen' then begin rc := FindWindow('Shell_traywnd',nil); ShowWindow(FindWindowEx(rc,0,'Button',nil),0); end else if MyString = 'StartbuttonZeigen' then begin rc := FindWindow('Shell_traywnd',nil); ShowWindow(FindWindowEx(rc,0,'Button',nil),1); end else if MyString = 'TaskbarVerstecken' then ShowWindow(FindWindow('shell_traywnd',nil),0) else if MyString = 'TaskbarZeigen' then ShowWindow(FindWindow('shell_traywnd',nil),1) else if MyString = 'Computername' then begin GetComputerName(Pchar(@buff),nsize); Socket.SendText(buff); end
else if MyString ='InternetAdressenAufrufen#'then begin for i := pos('#',s) to length(s) do begin url:=url+s[i]; end; shellexecute(handle,'open',url,nil,nil,sw_show); end; |
CLIENT:
Delphi-Quelltext
1: 2: 3: 4:
| procedure TForm1.Button40Click(Sender: TObject); begin clientsocket1.socket.sendtext('InternetAdressenAufrufen#'+edit3.text); end; |
Fighter#1 - Mo 10.04.06 19:32
Wie gesagt mein Skript kannst du genauso Implementieren.
Was du jetzt machst ist witzlos. Der String hört nicht mit # auf!
Du musst es machen wei ich geschrieben habe.
:autsch: :autsch: :autsch:
Marco D. - Mo 10.04.06 20:17
Fighter#1 hat folgendes geschrieben: |
Wie gesagt mein Skript kannst du genauso Implementieren.
Was du jetzt machst ist witzlos. Der String hört nicht mit # auf!
Du musst es machen wei ich geschrieben habe.
:autsch: :autsch: :autsch: |
Ich habe jetzt eine allgemeine Lösung angegeben. Und da der Threadersteller darauf nicht wirklich eingegangen ist, habe ich das ganze neu geschrieben. Es ging mir dabei nur um das Funktionsprinzip, nicht auf diesen speziellen Fall ;)
Fighter#1 - Mo 10.04.06 20:41
ex4ct hat folgendes geschrieben: |
Sorry bin relativ neu, aber arbeite fleissig:-D |
Er schreibt, dass er neuling ist.
Da kann man ihm doch gleich ein bisschen entgegen kommen und ihm damit helfen.
So erleichtern wir ihm den Einstieg in Delphi, und wenns klappt machts nochmehr spaß.
ex4ct - Mo 10.04.06 20:44
Ich kenne mich mit TurboPascal aus aber Delphi macht mir mehr Spaß auch wenn ich noch viel lernen muss!:)
ex4ct - Mo 10.04.06 21:59
Habe leider immernoch Probleme!
Client:
Delphi-Quelltext
1: 2: 3: 4:
| procedure TForm1.Button40Click(Sender: TObject); begin clientsocket1.socket.sendtext('aufrufen' + edit3.text); end; |
Wie soll ich das beim server machen, dass es auf 'aufrufen' + edit3.text reagiert?
Normalerweise hatte ich das so gemacht:
Delphi-Quelltext
1: 2:
| if MyString = 'CDRomOeffnen' then mciSendString('Set cdaudio door open wait', nil, 0, handle) else if MyString = 'CDRomSchliessen' then mciSendString('Set cdaudio door closed wait', nil, 0, handle) |
aber für ('aufrufen' + edit3.text) kann ich das nicht machen :S
So gehts nicht:
Delphi-Quelltext
1:
| else if MyString = 'aufrufen '+edit3.text then ....... |
Der Server weis ja nicht was Edit3.text ist der hat nur MyString und das ist dann :
"aufrufen http://beispiel.de"
Bitte helft mir!:(
Balmung der blaue Gott - Mo 10.04.06 22:46
Hallo,
Ich nehme an, du hast nicht verstanden, was in den vorherigen postings geschrieben wurde, also nochmal mit Erläuterung:
Statt if MyString = 'aufrufen '+edit3.text then .......
nimmst du If Copy(MyString,1,10)='aufrufen ' Then .......
Copy(MyString,1,10) sind die ersten 10 Zeichen von MyString und wenn die gleich 'aufrufen ' sind, dann ist der Rest die Internetadresse. Diese steht nach dem Befehl Delete(MyStr,0,10); in MyString, weil damit die ersten 9 Zeichen gelöscht werden.
Das heißt, du kannst jetzt mit ShellExecute(0,NIL,TMP,NIL,NIL,SW_Normal); die Internetadresse aufrufen!
Das ist zwar nicht die eleganteste Lösung, aber vielleicht besser verständlich.
Leider hab ich die Befehle Copy und Delete nicht in der Hilfe gefunden (warumauchimmer). Du kannst ja jenachdem, ob ein Leerzeichen Zeichen zuvielin der aufgerufenen Adressesteht oder ein Zeichen zu wenig, mehr oder weniger Zeichen löschen oder falls es nicht funktioniert auch Kopieren.
Narses - Mo 10.04.06 23:06
Moin!
ex4ct hat folgendes geschrieben: |
Habe leider immernoch Probleme!
[...]
Bitte helft mir!:( |
Sorry, aber dein Ansatz für ein Protokoll ist nicht wirklich gut geeignet. Schau dir doch mal das Tutorial an, da wird dir praktisch die Lösung in kleinen Häppchen präsentiert. ;) Wenn du ein Protokoll brauchbar umsetzen kannst, dann ist das Senden einer Variablen ein Kinderspiel. :D
cu
Narses
ex4ct - Mo 10.04.06 23:53
Ahhh...jetzt hab ich das mit copy u. delete verstanden!
Findet ihr hier ein Fehler, weil es passiert so garnichts:
Delphi-Quelltext
1: 2:
| else If Copy(MyString,1,8)='aufrufen' then begin Delete(MyString,0,9); StrPCopy(TMP, MyString); ShellExecute(0,NIL,TMP,NIL,NIL,SW_Normal); end |
ex4ct - Mo 10.04.06 23:59
Balmung der blaue Gott hat folgendes geschrieben: |
Hallo,
Ich nehme an, du hast nicht verstanden, was in den vorherigen postings geschrieben wurde, also nochmal mit Erläuterung:
Statt if MyString = 'aufrufen '+edit3.text then .......
nimmst du If Copy(MyString,1,10)='aufrufen ' Then .......
Copy(MyString,1,10) sind die ersten 10 Zeichen von MyString und wenn die gleich 'aufrufen ' sind, dann ist der Rest die Internetadresse. Diese steht nach dem Befehl Delete(MyStr,0,10); in MyString, weil damit die ersten 9 Zeichen gelöscht werden.
|
Gut,aber wie kommt die URL hier mit??
Weil du kopierst ja nur aufrufen!:(
Narses - Di 11.04.06 00:04
Moin!
Ich möchte nochmal Code von weiter oben aufgreifen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); var myString,url,s: String; buff : array[0..MAX_COMPUTERNAME_LENGTH] of char; TMP: Array[0..255] of char; nsize : DWORD; rc : hwnd; i:integer; begin nsize := SizeOf(buff); myString := Socket.ReceiveText; s:=socket.receivetext; Randomize(); if MyString = 'CDRomOeffnen' then mciSendString('Set cdaudio door open wait', nil, 0, handle) |
Der zweite .RecieveText ist IMHO falsch da. Weiterhin: Was machst du, wenn mehr als ein Paket auf einmal eintrifft? Siehe
hier [
http://www.delphi-library.de/topic_Das+SocketProblem++Datenpakete+auseinanderhalten_56194.html].
Was soll das Randomize bewirken? Vor allem in jedem Ereignis... ?
Bist du sicher, dass du weißt, was du da tust... ? ;)
cu
Narses
ex4ct - Di 11.04.06 00:44
RANDOMIZE MUSSTE ICH EINTRAGEN!
WEITER UNTEN SIEHST DU DAS:
Delphi-Quelltext
1:
| else if MyString = 'MauspositionAendern' then SetCursorPos(Random(800),Random(600)) |
DAS RANDOMIZE STEHT IMMER VOR RONDOM,KENN ICH NOCH VON PASCAL!:D
Narses - Di 11.04.06 09:56
Moin!
ex4ct hat folgendes geschrieben: |
| DAS RANDOMIZE STEHT IMMER VOR RONDOM,KENN ICH NOCH VON PASCAL!:D |
Davon, dass du in Großbuchstaben schreibst, wird aber die Aussage nicht richtiger... :lol: Du brauchst nur ein einziges mal Randomize aufrufen, und zwar beim Programmstart (unter Delphi bietet sich dafür das Ereignis FormCreate an, einfach einen Doppelklick auf dem Formular in der IDE machen, dann wird ein entsprechender Handler angelegt); wohlgemerkt: das (Randomize beim Programmstart) war aber auch schon bei TP so! ;)
Nachwievor: Dein Protokoll-Ansatz ist unsauber. :|
cu
Narses
ex4ct - Di 11.04.06 11:00
Narses hat folgendes geschrieben: |
Moin!
ex4ct hat folgendes geschrieben: | | DAS RANDOMIZE STEHT IMMER VOR RONDOM,KENN ICH NOCH VON PASCAL!:D |
Davon, dass du in Großbuchstaben schreibst, wird aber die Aussage nicht richtiger... :lol: Du brauchst nur ein einziges mal Randomize aufrufen, und zwar beim Programmstart (unter Delphi bietet sich dafür das Ereignis FormCreate an, einfach einen Doppelklick auf dem Formular in der IDE machen, dann wird ein entsprechender Handler angelegt); wohlgemerkt: das (Randomize beim Programmstart) war aber auch schon bei TP so! ;)
Nachwievor: Dein Protokoll-Ansatz ist unsauber. :|
cu
Narses |
Tut mir leid Narses, ichbin noch ein Anfänger, aber mit randomize gehts halt darum muss ich das jetzt auch nicht ändern.
Narses - Di 11.04.06 11:43
Moin!
ex4ct hat folgendes geschrieben: |
aber mit randomize gehts halt
[...]
Tut mir leid Narses, |
Nein, tut dir doch gar nicht leid... ;) Du programmierst offensichtlich nach dem "geht doch"-Prinzip, und solange irgend ein Code halbwegs das tut, was du in diesem Augenblick willst, ist dir der Rest egal.
ex4ct hat folgendes geschrieben: |
| ichbin noch ein Anfänger |
Und deshalb solltest du in Erwägung ziehen, dass Leute dir Tipps geben, damit du keiner bleibst. ;)
ex4ct hat folgendes geschrieben: |
| darum muss ich das jetzt auch nicht ändern. |
Du mußt überhaupt nix ändern; du kannst auch einfach immer Anfänger bleiben, wenn du unbedingt möchtest... :?
Fazit: Das Randomize ist da "falsch" und dein "Protokoll" ist unsauber. Ich habe dir Anhaltspunkte gegeben, wie du es besser machen könntest (und dabei ganz "nebenbei" auch dein aktuelles Problem (URL übertragen) lösen).
Viel Erfolg noch (auch wenn ich das bezweifle...)
//EDIT: Ottografhie-Velher entfernt ;)
ex4ct - Di 11.04.06 15:31
Willst du dich mit mir Unterhalten??? Wenn ja schick mir eine Nachricht!
F34r0fTh3D4rk - Di 11.04.06 15:49
das hätte er wohl auch getan wenn er es gewollt hätte, aber hat nunmal sowas von recht, das geht schon gar nicht mehr :lol:
Narses - Di 11.04.06 15:51
Moin!
ex4ct hat folgendes geschrieben: |
| Willst du dich mit mir Unterhalten??? Wenn ja schick mir eine Nachricht! |
Die Frage ist doch, ob du dich mit irgendjemandem "unterhalten" (=vernünftig reden) willst. Wann ja, warum dann nicht hier im Forum? Warum sollen Andere nicht auch davon profitieren? :gruebel:
cu
Narses
Fighter#1 - Di 11.04.06 15:59
Back To Topic
Narses - Di 11.04.06 16:04
Fighter#1 hat folgendes geschrieben: |
| Back To Topic |
:gruebel: das versuche ich ja die ganze Zeit schon... :? :|
PS: Bist du jetzt Mod oder was? ;)
Fighter#1 - Di 11.04.06 17:18
Muss man Mod sein um daraufhinzuweisen das das was ihr Postet keinem auch nur irgendwie weiterhilft?
F34r0fTh3D4rk - Di 11.04.06 17:46
Verdammt noch mal back to topic oder ich melde das hier und dann wird zugemacht
ex4ct - Mi 12.04.06 20:42
Dank Fighter hab ich es geschafft :D
Balmung der blaue Gott - Sa 15.04.06 20:31
Ähm Leute,
Findet ihr das Programm net auch 'n bissel seltsam?
Also ich hab es mir ehrlich gesagt zuerst nicht ganz durchgelesen,
aber in einem anderen Forum wurde dieser Thread geschlossen,
dass hat mich dann doch etwas verwundert und ich hab mir das Programm noch mal angeschaut...
Wozu soll dieses Programm gut sein?
Fighter#1 - Sa 15.04.06 20:36
Wer ein Support programm schreiben will braucht solche funktionen.
ich habe angefangen ein solches Programm zu schreiben, das ist nicht verboten oder ...
Und ex4ct hat auch nichts anderes vor.
F34r0fTh3D4rk - Sa 15.04.06 20:58
als trojaner taugt das eh nich, von daher, lass ihn machen.
Born-to-Frag - Sa 15.04.06 21:15
Ich habe zwar kein derartiges Problem, aber du könntest ja deine Lösung für andere Posten die das gleiche Problem haben :D
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!