Entwickler-Ecke
Freeware Projekte - Simples Multi und Dauerping tool
Danny W. - Do 11.01.07 17:23
Titel: Simples Multi und Dauerping tool
Hi Gemeinde :)
ich habe für die Arbeit ein gaaanz simpel gestriktes progrämmchen geschrieben, welches entweder eine IP permanent anpingt oder mehrere nacheinander durchgeht. Ein Memo zeigt dabei die Ergebnisse.
WICHTIG: Im Multiping die IP's einfach !untereinander! schreiben, ohne trennzeichzen usw.
Vielleicht könnt ihr es ja gebrauchen.
LG,
Danny
Jakob Schöttl - Do 11.01.07 18:11
AAAAAAAHHHHHH, ich find dein programm gar nicht gut :?
ich hab grad keine ip eingegeben und auf "Dauerping starten" gedrückt. jetzt bin ich bei 105 ping.exe, weil ich mit dem beenden nicht nachkomme und der computer ist abgestürzt. da muss du noch was machen!
Ach ja, und in der LogListe steht gar nichts drin
Danny W. - Fr 12.01.07 10:47
Die überprüfung habe ich garnicht erst gemacht.. hups :P Naja es steht was drinne wenn man eine IP angibt ^^
freak4fun - Fr 12.01.07 10:55
Bei mir kommen auch lauter Kopien - sogar bei einer richtigen IP. :evil:
MfG
freak
Danny W. - Fr 12.01.07 10:55
Also ich habs nochmal geprüft. Wenn ich nichts eingebe, passiert auch nichts. aber zu einem Absturz führt es nicht.
Danny W. - Fr 12.01.07 10:56
vielleicht liegt es daran das ich es mit Win2000 kompiliert hab. Ich mach das zuhause nochmal mit XP.
freak4fun - Fr 12.01.07 10:59
*lol* Was hat das den damit zu tun? Kannste mal den Quellcode geben, würd mich mal interessieren. ;)
MfG
freak
ZeitGeist87 - Fr 12.01.07 11:02
danny!
I KILL YOU..aber nur virtuell..wohnst zu weit weg :)
Ich hab Win98..dacht mir ich teste das mal..
klick auf starten...
Delphi-Quelltext
1: 2: 3:
| REPEAT öffeneNeuesFenster UNTIL StefanSchnauzeVollUndNeustart; |
Ich hab jetzt 10 Minuten damit verbracht alle Fenster zu schließen :(
Also..ähm tjoa..Ergebnis hab ich auch keins gesehen =)
LG
Stefan
Danny W. - Fr 12.01.07 11:21
hmm..wieso hab ich damit keine Probleme? ^^
freak4fun - Fr 12.01.07 11:28
Mantis1987 hat folgendes geschrieben: |
hmm..wieso hab ich damit keine Probleme? ^^ |
Weil du es programmiert hast, Entwickler haben _NIE_ Probleme mit dr eigenen Software. :mrgreen: Was ist mit dem QC? ;)
MfG
freak
Danny W. - Fr 12.01.07 11:33
Der Quellcode is aber häßlich ^^ Ich hab ein verstecktes memo um die abfragen zu prüfen.
Ich hatte dieses erst genommen weil ich den aktuellen ping anzeigen lassen wollte, später aber nichtmehr, deswegen habe ich es versteckt und ich war daraufhin zu faul auf eine Stringliste zurückzugreifen.
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: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200: 201: 202: 203: 204: 205: 206: 207: 208: 209: 210: 211: 212: 213: 214: 215: 216: 217: 218: 219: 220: 221: 222: 223: 224: 225: 226:
| unit Unit3;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Unit1, XPMan;
type TForm3 = class(TForm) Memo1: TMemo; Timer1: TTimer; Memo2: TMemo; Edit1: TEdit; Timer2: TTimer; Panel1: TPanel; Memo3: TMemo; Panel2: TPanel; Panel3: TPanel; XPManifest1: TXPManifest; procedure Panel3Click(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure Panel2Click(Sender: TObject); procedure FormShow(Sender: TObject); procedure Panel1Click(Sender: TObject); procedure Timer2Timer(Sender: TObject); procedure Timer1Timer(Sender: TObject); private public end;
var Form3: TForm3; sl,hf : Tstrings;
implementation
{$R *.dfm}
procedure RunConsoleApp(const CommandLine: string; AStrings: TStrings); type TCharBuffer = array[0..MaxInt - 1] of Char; const MaxBufSize = 1024; var I: Longword; SI: TStartupInfo; PI: TProcessInformation; SA: PSecurityAttributes; SD: PSECURITY_DESCRIPTOR; NewStdIn: THandle; NewStdOut: THandle; ReadStdOut: THandle; WriteStdIn: THandle; Buffer: ^TCharBuffer; BufferSize: Cardinal; Last: WideString; Str: WideString; ExitCode: DWORD; Bread: DWORD; Avail: DWORD; begin GetMem(SA, SizeOf(TSecurityAttributes)); case Win32Platform of VER_PLATFORM_WIN32_NT: begin GetMem(SD, SizeOf(SECURITY_DESCRIPTOR)); SysUtils.Win32Check(InitializeSecurityDescriptor(SD, SECURITY_DESCRIPTOR_REVISION)); SysUtils.Win32Check(SetSecurityDescriptorDacl(SD, True, nil, False)); SA.lpSecurityDescriptor := SD; end; else SA.lpSecurityDescriptor := nil; end; SA.nLength := SizeOf(SECURITY_ATTRIBUTES); SA.bInheritHandle := True; SysUtils.Win32Check(CreatePipe(NewStdIn, WriteStdIn, SA, 0)); if not CreatePipe(ReadStdOut, NewStdOut, SA, 0) then begin CloseHandle(NewStdIn); CloseHandle(WriteStdIn); SysUtils.RaiseLastWin32Error; end; GetStartupInfo(SI); SI.dwFlags := STARTF_USESTDHANDLES or STARTF_USESHOWWINDOW; SI.wShowWindow := SW_HIDE; SI.hStdOutput := NewStdOut; SI.hStdError := NewStdOut; SI.hStdInput := NewStdIn; if not CreateProcess(nil, PChar(CommandLine), nil, nil, True, CREATE_NEW_CONSOLE, nil, nil, SI, PI) then begin CloseHandle(NewStdIn); CloseHandle(NewStdOut); CloseHandle(ReadStdOut); CloseHandle(WriteStdIn); SysUtils.RaiseLastWin32Error; end; Last := ''; BufferSize := MaxBufSize; Buffer := AllocMem(BufferSize); try repeat SysUtils.Win32Check(GetExitCodeProcess(PI.hProcess, ExitCode)); PeekNamedPipe(ReadStdOut, Buffer, BufferSize, @Bread, @Avail, nil); if (Bread <> 0) then begin if (BufferSize < Avail) then begin BufferSize := Avail; ReallocMem(Buffer, BufferSize); end; FillChar(Buffer^, BufferSize, #0); ReadFile(ReadStdOut, Buffer^, BufferSize, Bread, nil); Str := Last; I := 0; while (I < Bread) do begin case Buffer^[I] of #0: inc(I); #10: begin inc(I); AStrings.Add(Str); Str := ''; end; #13: begin inc(I); if (I < Bread) and (Buffer^[I] = #10) then inc(I); AStrings.Add(Str); Str := ''; end; else begin Str := Str + Buffer^[I]; inc(I); end; end; end; Last := Str; end; Sleep(1); Application.ProcessMessages; until (ExitCode <> STILL_ACTIVE); if Last <> '' then AStrings.Add(Last); finally FreeMem(Buffer); end; CloseHandle(PI.hThread); CloseHandle(PI.hProcess); CloseHandle(NewStdIn); CloseHandle(NewStdOut); CloseHandle(ReadStdOut); CloseHandle(WriteStdIn); end;
procedure TForm3.Timer1Timer(Sender: TObject); begin memo1.clear; RunConsoleApp('ping '+edit1.text+' -n 1', Memo1.Lines); timer2.Enabled:=true; end;
procedure TForm3.Timer2Timer(Sender: TObject); begin if pos('Antwort von ',memo1.text) <> 0 then begin memo2.Clear; memo2.Lines.add(Edit1.text+' war zuletzt erreichbar am '+datetostr(date)+' um '+timetostr(time)); end; timer2.Enabled:=false; end;
procedure TForm3.Panel1Click(Sender: TObject); begin if timer1.Enabled then timer1.Enabled:=false else timer1.Enabled:=true;
if panel1.Caption='Start' then panel1.Caption:='Stop' else panel1.Caption:='Start'; end;
procedure TForm3.FormShow(Sender: TObject); begin edit1.setfocus; end;
procedure TForm3.Panel2Click(Sender: TObject); var i : integer; begin warten.visible:=true; sl := Tstringlist.create; sl.text := memo3.text; hf := Tstringlist.create;
memo1.clear;
for i := 0 to sl.count-1 do begin RunConsoleApp('ping '+sl.strings[i]+' -n 1', Memo1.Lines); if pos('Antwort von ',memo1.text) <> 0 then begin memo2.Lines.add(sl.strings[i]+' war zuletzt erreichbar am '+datetostr(date)+' um '+timetostr(time)); memo1.clear; end;
end; hf.text := memo2.text; warten.visible:=false;; showmessage('Aktive Clients: '+inttostr(hf.count)); memo1.clear; end;
procedure TForm3.FormDestroy(Sender: TObject); begin sl.free; hf.free; end;
procedure TForm3.Panel3Click(Sender: TObject); begin Memo2.clear; end;
end. |
Und das Lade-Formular
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: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, ComCtrls, Gauges, XPMan;
type Twarten = class(TForm) Panel2: TPanel; Timer1: TTimer; Gauge1: TGauge; XPManifest1: TXPManifest; procedure FormHide(Sender: TObject); procedure FormShow(Sender: TObject); procedure Timer1Timer(Sender: TObject); private public end;
var warten: Twarten;
implementation
{$R *.dfm}
procedure Twarten.Timer1Timer(Sender: TObject); begin Gauge1.Progress:=Gauge1.Progress+2;
if (gauge1.progress >= 100) and (Gauge1.Forecolor = clSilver) then begin Gauge1.Forecolor := clWhite; Gauge1.Backcolor := clSilver; Gauge1.Progress:=0; end;
if (gauge1.progress >= 100) and (Gauge1.Forecolor = clWhite) then begin Gauge1.Forecolor := clSilver; Gauge1.Backcolor := clWhite; Gauge1.Progress:=0; end;
end;
procedure Twarten.FormShow(Sender: TObject); begin timer1.enabled := true; doublebuffered := true; end;
procedure Twarten.FormHide(Sender: TObject); begin timer1.enabled := false; end;
end. |
mfG,
Danny
Kroko - Fr 12.01.07 12:01
(1) ich habe Window's beenden müssen, weil nur noch neue Fenster kamen, trotz richtiger IP
:?
(2) start überarbeitunswürdiges Programm
:?
Danny W. - Fr 12.01.07 12:06
hmm ^^ bei euch stürzen überall die Computer ab :)
Bin ich der einzige bei dem es richtig läuft?! Ich teste es mal eben beim kollegen der is eh grad in der kantine...
mfG,
Danny
freak4fun - Fr 12.01.07 12:10
Mantis1987 hat folgendes geschrieben: |
hmm ^^ bei euch stürzen überall die Computer ab :)
Bin ich der einzige bei dem es richtig läuft?! Es teste es mal eben beim kollegen der is eh grad in der kantine...
mfG,
Danny |
Der wird sich freuen. :lol: Hab leider keine Zeit dein Programm zu testen, muss andere Bugs jagen. :?
MfG
freak
Chryzler - Fr 12.01.07 12:25
Ist doch ganz klar warum. Ihr müsst die EXE erst umbennen. Sonst ruft sein Programm nicht ping.exe von Windows auf, sondern sich selbst (weil es auch ping.exe heißt).
ZeitGeist87 - Fr 12.01.07 12:32
hey oh wunder..es geht...
hmm...immer wenn ich auf start klick um zu stoppen steht stop da..klick ich dann auf stop startet er wieder...
führe ich multiping durch, macht er zwar richtig, allerdings summiert er das in der anzeige/ausgabe immer auf und gibt dann immer an beim 1. mal 3 beim 2. mal 6 beim 3. mal 9..
Joa ich schaus mir daheim mal an
Danny W. - Fr 12.01.07 12:33
HA! Da ist der Fehler :) Da hätte ich aber auch erstmal drauf kommen müssen :)
Narses - Fr 12.01.07 12:34
Moin!
Wie wäre es denn, auf die ICMP-API von Windows zurückzugreifen, statt (sinnlos) Konsolenanwendungen zu starten und dann Probleme mit den EXE-Namen zu bekommen... :nut: ;)
Delphi-Wrapper gibt´s doch genug. ;)
cu
Narses
Danny W. - Fr 12.01.07 12:39
wäre eigentlich einfacher :/ dann bräuchte ich diese elendig lange funktion auch nicht ^^
Danny W. - Fr 12.01.07 12:42
ZeitGeist87 hat folgendes geschrieben: |
...allerdings summiert er das in der anzeige/ausgabe immer auf und gibt dann immer an beim 1. mal 3 beim 2. mal 6 beim 3. mal 9.. |
Kann doch eigentlich garnicht sein. Was du rechts ins Memo schreibt wird gleichzeitig in eine Stringliste geschrieben. Davon gebe ich nur den Count aus, dieser wird bei mir auch richtig dargestellt
jakobwenzel - Fr 12.01.07 16:31
Position bitte auf ScreenCenter und nicht auf DesktopCenter, sonst liegts so unschön zwischen den Monitoren...
Ansonsten kann man die Buttonschrift bei meinem Vista-Style überhaupt nicht lesen...
Abgesehen davon isses ganz gut. :wink:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 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!