Deutsch
Forum

Ping-Tool über CMD

 
- Seite 1 -



Penguin
Tux
Hallo,

ich möchte mich ersteinmal vorstellen. Mein Name ist Tony, ich bin 15 Jahre alt und besuche eine Realschule in Chemnitz. Da ich jetzt Sommerferien habe und ich nichts weiter zu tun habe, habe ich mir vorgenommen ein kleines Netzwerkanalysetool zu schreiben. Auf der suche nach einer einfachen Programmiersprache bin ich auf XProfan gestoßen.

Ich habe alles nötige gedownloaded und installiert, anschließen habe ich nach einem Pingcode gesucht und habe diesen:
declare pingstring$,ping$,ping%
********************************************************************

Proc Ping

    Parameters nic$,pingdatei1$,pingdatei2$
    let pingstring$="PING.EXE",nic$,">",pingdatei1$
    Assign #6,pingdatei2$
    Rewrite #6
    Print #6,pingstring$
    Close #6
    WinExecwait(pingdatei2$,0)
    Assign #5,pingdatei2$
    Erase #5
    ASSIGN #3,pingdatei1$
    RESET #3
    Ping%=0

    WHILENOT EOF(#3)

        input #3,ping$
        ping$=mid$(ping$,1,11)
        case equ$(ping$,"Antwort von"):Ping%=1

    WEND

    CLOSE #3
    Assign #1,pingdatei1$
    Erase #1

EndProc

********************************************************************
Beschreibung:
Es gibt zwar schon eine schnelle und schöne Onlineabfrage über API,
aber leider gibt die Funktion nur 1 für Online zurück, wenn
man über ein Standart DFÜ eingewählt ist.
Diese Prozedur ist halt nur etwas langsamer aber man kann sogar DSL
(also - keine DFÜ-Verbindung) oder das alte T-Online u.s.w abfragen!!
alles mit einem Stern umrandete ist wichtig für die Abfrage
Rolf Koch - Rokosoftware - Koblenz 2002
BEISPIEL
WINDOWSTYLE 31
Window 200,200-300,80
Windowtitle "Onlinstatus-Prüfung ohne Api"
TextColor RGB(0,0,255),-1
UseFont "TIMES NEW ROMAN",20,10,0,0,0
DRAWTEXT 40,10,"..moment ermittele!"
HIER JETZT DER AUFRUF DER PROZEDUR:********************
PING ADRESSE,ERGEBNISDATEI,BATCHDATEI
Parameter
1.) Webadresse - eine immer vorhandene wie www.nic.de
2.) Dateiname, in welche Pingergebnis geschrieben wird - wird wieder gelöscht!
3.) Dateiname, um Ping korrekt aufzurufen. - wird wieder gelöscht!
********************************************************
TextColor RGB(255,255,255),RGB(255,255,255)
DRAWTEXT 40,10,"                                "
UseFont "TIMES NEW ROMAN",25,20,1,0,0
TextColor RGB(0,0,255),-1
Ping "192.168.0.7","PINGTEST.TXT","PING.BAT"

if equ(ping%,1)

    DRAWTEXT 25,10,"Erreichbar"

else

    DRAWTEXT 25,10,"Nicht erreichbar"

endif

waitinput

Diesen Code habe ich mir nach meinen Bedürfnissen zurechtgeschnitten und er sieht wie folgt aus. Dazu müsste ich die von mir ausgedachte Funktionsweise erklären.

Es ist geplant, dass ich ein Tool schreibe, welches möglichst einfach eine erste Hilfe für Schüler und Lehrer bietet. Bemerkt ein User das er keinen Internetzugang hat, führt er das Tool aus, welches der Reihe nach erst den Server anpingt, dann einen anderen Client im Netzwerk und dann noch einen Rechner von außerhalb (z.B. Google). Wenn es bei einer der Schritte keine Rückmeldung gibt, soll eine Meldung mit Tips zur Behebung auf dem Bildschrim erscheinen.

Nun zum Code:
declare pingstring$,ping$,ping%

Proc Ping

    Parameters nic$,pingdatei1$,pingdatei2$
    let pingstring$="PING.EXE",nic$,">",pingdatei1$
    Assign #6,pingdatei2$
    Rewrite #6
    Print #6,pingstring$
    Close #6
    WinExecwait(pingdatei2$,0)
    Assign #5,pingdatei2$
    Erase #5
    ASSIGN #3,pingdatei1$
    RESET #3
    Ping%=0

    WHILENOT EOF(#3)

        input #3,ping$
        ping$=mid$(ping$,1,11)
        case equ$(ping$,"Antwort von"):Ping%=1

    WEND

    CLOSE #3
    Assign #1,pingdatei1$
    Erase #1

EndProc

WINDOWSTYLE 31
Window 200,200-500,80
Windowtitle "Onlinstatus-Prüfung ohne Api"
TextColor RGB(0,0,255),-1
UseFont "TIMES NEW ROMAN",20,10,0,0,0
DRAWTEXT 40,10,"..moment ermittele!"
TextColor RGB(255,255,255),RGB(255,255,255)
DRAWTEXT 40,10,"                                "
UseFont "CANDARA",25,20,1,0,0
Ping "127.0.0.1","PINGTEST.TXT","PING.BAT"

if equ(ping%,1)

    TextColor RGB(0,255,0),-1
    DRAWTEXT 25,10,"Server Erreichbar"

else

    TextColor RGB(255,0,0),-1
    DRAWTEXT 25,10,"Server Nicht erreichbar"

endif

Ping "192.168.0.1","PINGTEST.TXT","PING.BAT"

if equ(ping%,1)

    TextColor RGB(0,255,0),-1
    DRAWTEXT 25,10,"Client Erreichbar"

else

    TextColor RGB(255,0,0),-1
    DRAWTEXT 25,10,"Client Nicht erreichbar"

endif

Ping "www.google.de","PINGTEST.TXT","PING.BAT"

if equ(ping%,1)

    TextColor RGB(0,255,0),-1
    DRAWTEXT 25,10,"Google Erreichbar"

else

    TextColor RGB(255,0,0),-1
    DRAWTEXT 25,10,"Google Nicht erreichbar"

endif

waitinput

Ein Problem, welches sich zur Zeit auftut, ist die Tatsache das der Fensterinhalt nicht gelöcht wird. Das heißt das "Server Erreichbar", "Client Erreichbar" und "Google Erreichbar" übereinander geschrieben werden, also brauche ich eine Möglichkeit den Inhalt des Fensters nach jedem Schritt zu löschen. Dabei bin auf

gestoßen. Nutze ich diese Möglichkeit vor bzw. nach "Server Erreichbar" wird "Server Erreichbar" gar nicht angezeigt.

Für eine kleine Hilfestellung wäre ich sehr dankbar.

Danke
Tony
 


OS: Win XP/Debian
XProfan 10
20.07.2008  
 



 
- Seite 8 -



Stefan
Landsberg
%hwnd brauchst du imho nicht deklarieren. bei mir geht jedenfalls auch ohne es vorher zu deklarieren. (zu spät. rolf war schneller)

Ich habe bei meinem programm nochmal ganz von vorn angefangen und habe jetz ein paar fragen.
vorweg erstmal der aktuelle zustand meines programms:
KompilierenMarkierenSeparieren
Declare-Teil:
declare ping%, btn%
Proc-Teil:

Proc Ping

    declare pingdatei1$, pingdatei2$, pingstring$, ping$
    Parameters ip$
    let pingdatei1$="PINGTEST.TXT"
    let pingdatei2$="PING.BAT"
    let pingstring$="PING.EXE",ip$,">",pingdatei1$
    Assign #6,pingdatei2$
    Rewrite #6
    Print #6,pingstring$
    Close #6
    WinExecwait(pingdatei2$,0)
    Assign #5,pingdatei2$
    Erase #5
    ASSIGN #3,pingdatei1$
    RESET #3
    Ping%=0

    WHILENOT @EOF(#3)

        input #3,ping$
        ping$=mid$(ping$,1,11)
        case equ$(ping$,"Antwort von"):Ping%=1

    WEND

    CLOSE #3
    Assign #1,pingdatei1$
    Erase #1

EndProc

Def-Teil:
DEF GetSysColor(1) !"User32","GetSysColor"
Fenster erstellen:
WindowStyle 63
WindowTitle "IP Checker"
Window @SUB(@DIV(%maxX,2),300),@SUB(@DIV(%maxY,2),250) - 600,500
SetTrueColor 1
CLS GetSysColor(15)
@CreateMultiEdit(%HWnd,"",10,50,570,-200)
btn%=@CreateButton(%HWnd,"Überprüfen",250,260,100,30)
WaitInput

in der EditBox soll der User eine liste von IPs bzw deren Aliase durch absätze (zur not auch kommata oder semikola) getrennt eingeben.

mein ziel ist es für jede dieser IPs eine ping abfrage zu machen.

wie mache ich das am besten?

meine idee:
den inhalt der editbox mit @GETLINE$ in eine Bereichsvariable einlesen, und dann irgendwie jede ip in eine string variable schreiben. wo eine neue ip anfäng erkennt man ja an den absätzen (aber wie sage ich das dem programm).

danach einfach mit jeder variable folgende abfrage machen:

ping variable$

wenn die idee gut und umsetzbar ist wäre es nett wenn jemand mir bei der umsetzung helfen würde.
wenn die idee nicht so gut ist, wäre eine neu idee sehr hilfreich
 
22.07.2008  
 




Penguin
Tux
Danke Rolf, das Grundprinziep habe ich langsam gerafft - klar bis ich es wirklich kann dauert es noch eine Weile.

Ich kümmere mich gerade darum das miene Hilfefenster auch einen Hilfetext bekommen, vorerst nur mit "Print", dabei bin ich auf das Problem gestoßen, dass er mir zwar den Text ausgibt, aber dafür den Button nicht.
 


OS: Win XP/Debian
XProfan 10
22.07.2008  
 




Rolf
Koch
Wie sollen wir wissen wo es nicht klappt? Immer ein kurzes Beispiel anhängen.
 
22.07.2008  
 




Penguin
Tux
Oh ja, ich vergaß
KompilierenMarkierenSeparieren
Declare btndlg&,dlgende%,dlg&
dlg&=Create("Window",%hwnd,"Hilfe",10,10,500,250)
btnDlg& = CreateButton(dlg&,"OK",175,150,120,30)
Print "Lorem ipsum dolor sit amet"

WhileNot dlgende%

    WaitInput

    If GetFocus(btnDlg&)

        dlgende% = 1

    EndIf

Endwhile

 


OS: Win XP/Debian
XProfan 10
22.07.2008  
 




Rolf
Koch
Achso du willst auf dlg& printen? Nee das ist nicht möglich, nimm lieber dann wieder drawtext, denn da kannste:
KompilierenMarkierenSeparieren
Startpaint dlg&
Drawtext 1,1,"Lorem ipsum dolor sit amet"
Endpaint

Und lies bitte in der Profanhilfe dann unter startpaint /endpaint nach, denn das Problem für createdialog oder createwindow ist, dass Du dort immer das gedrawte neuzeichnen musst. Siehe dafür %wmpaint in der HIlfe.
Ich plediere dafür lass die print und drawtext weg und lerne create("text".... einzusetzen. Da kannste auch immer schön per
settext variable&,"neuer text" eine aktualisierung des Inhalts machen.
 
22.07.2008  
 




Penguin
Tux
So, danke an alle die mir geholfen haben - die "Alpha-Version" meines Tools ist fertig.
Bis auf die Fehlenden Hilfetexte und die Meldung des Erfolges, welche nicht mehr das Problem sein dürfte, fehlt nicht mehr viel. Vielleicht erweitere ich das ganze noch um eine GUI um beliebige IP´s an zu pingen, aber da warte ich erstmal auf Stefans Tool .

Hier der (fast) fertige Code, der natürlich immernoch die Test-IP´s enthält:
KompilierenMarkierenSeparieren
declare pingstring$, ping$, ping%

Proc Ping

    Parameters nic$,pingdatei1$,pingdatei2$
    let pingstring$="PING.EXE",nic$,">",pingdatei1$
    Assign #6,pingdatei2$
    Rewrite #6
    Print #6,pingstring$
    Close #6
    WinExecwait(pingdatei2$,0)
    Assign #5,pingdatei2$
    Erase #5
    ASSIGN #3,pingdatei1$
    RESET #3
    Ping%=0

    WHILENOT EOF(#3)

        input #3,ping$
        ping$=mid$(ping$,1,11)
        case equ$(ping$,"Antwort von"):Ping%=1

    WEND

    CLOSE #3
    Assign #1,pingdatei1$
    Erase #1

EndProc

WINDOWSTYLE 31
Window 200,200-500,180
Windowtitle "PiRePro by penguin"
TextColor RGB(0,0,255),-1
UseFont "TIMES NEW ROMAN",20,10,0,0,0
DRAWTEXT 40,10,"..moment ermittele!"
TextColor RGB(255,255,255),RGB(255,255,255)
DRAWTEXT 40,10,"                                "
UseFont "CANDARA",25,20,1,0,0
Ping "127.0.0.1","PINGTEST.TXT","PING.BAT"

if equ(ping%,1)

    TextColor RGB(0,255,0),-1
    DRAWTEXT 25,10,"Server Erreichbar"

else

    TextColor RGB(255,0,0),-1
    DRAWTEXT 25,10,"Server Nicht erreichbar"
    Declare btndlg&,dlgende%,dlg&
    dlg&=Create("Window",%hwnd,"Hilfe",10,10,500,250)
    Startpaint dlg&
    UseFont "CANDARA",25,20,1,0,0
    TextColor RGB(0,0,0),RGB(255,255,255)
    Drawtext 1,1,"Lorem ipsum dolor sit amet"
    Endpaint
    btnDlg& = CreateButton(dlg&,"OK",175,150,120,30)

    WhileNot dlgende%

        WaitInput

        If GetFocus(btnDlg&)

            dlgende% = 1

        EndIf

    Endwhile

endif

Ping "192.168.0.1","PINGTEST.TXT","PING.BAT"

if equ(ping%,1)

    TextColor RGB(0,255,0),-1
    DRAWTEXT 25,40,"Client Erreichbar"

else

    TextColor RGB(255,0,0),-1
    DRAWTEXT 25,40,"Client Nicht erreichbar"
    Declare btndlg&,dlgende%,dlg&
    dlg&=Create("Window",%hwnd,"Hilfe",10,10,500,250)
    Startpaint dlg&
    UseFont "CANDARA",25,20,1,0,0
    TextColor RGB(0,0,0),RGB(255,255,255)
    Drawtext 1,1,"Lorem ipsum dolor sit amet"
    Endpaint
    btnDlg& = CreateButton(dlg&,"OK",175,150,120,30)

    WhileNot dlgende%

        WaitInput

        If GetFocus(btnDlg&)

            dlgende% = 1

        EndIf

    Endwhile

endif

Ping "www.google.dev","PINGTEST.TXT","PING.BAT"

if equ(ping%,1)

    TextColor RGB(0,255,0),-1
    DRAWTEXT 25,70,"Extern Erreichbar"

else

    TextColor RGB(255,0,0),-1
    DRAWTEXT 25,70,"Extern Nicht erreichbar"
    Declare btndlg&,dlgende%,dlg&
    dlg&=Create("Window",%hwnd,"Hilfe",10,10,500,250)
    Startpaint dlg&
    UseFont "CANDARA",25,20,1,0,0
    TextColor RGB(0,0,0),RGB(255,255,255)
    Drawtext 1,1,"Lorem ipsum dolor sit amet"
    Endpaint
    btnDlg& = CreateButton(dlg&,"OK",175,150,120,30)

    WhileNot dlgende%

        WaitInput

        If GetFocus(btnDlg&)

            dlgende% = 1

        EndIf

    Endwhile

endif

Hier Code für Meldung des Erfolgs
TextColor RGB(0,0,0),-1
UseFont "CANDARA",15,10,1,0,0
DRAWTEXT 25,120,"Zum Beenden drücken Sie bitte eine beliebige Taste"
waitinput

Falls es Verbesserungsvorschläge gibt - immer her damit. Und wenn es sonst noch Fragen oder ähnliches gibt - fragt.

Also nocheinmal ein Dankeschön an alle die sich an diesem Thread beteiligt haben.
 


OS: Win XP/Debian
XProfan 10
22.07.2008  
 




Rolf
Koch
Ich will ja nicht , dass Du wieder umbaust, da man alles etwas verkürzen könnte weil vieles identisch ist wie else Schleife mit
Whilenot dlgende% - die kann man als Prozedur umbauen (siehe unten)

Wenn Du es so umständlich wie jetzt lassen willst, dann mach wenigstens hinter jedes
dlgende%=1 ein destroywindow(dlg&)

Aber lieber so:
KompilierenMarkierenSeparieren
declare pingstring$, ping$, ping%

Proc Ping

    Parameters nic$,pingdatei1$,pingdatei2$
    let pingstring$="PING.EXE",nic$,">",pingdatei1$
    Assign #6,pingdatei2$
    Rewrite #6
    Print #6,pingstring$
    Close #6
    WinExecwait(pingdatei2$,0)
    Assign #5,pingdatei2$
    Erase #5
    ASSIGN #3,pingdatei1$
    RESET #3
    Ping%=0

    WHILENOT EOF(#3)

        input #3,ping$
        ping$=mid$(ping$,1,11)
        case ping$="Antwort von":Ping%=1

    WEND

    CLOSE #3
    Assign #1,pingdatei1$
    Erase #1

EndProc

Proc Errorhelp

    Parameter 1: Der Text für Hauptfenster,Parameter 2: Text für Hilfenster
    Parameters typtext$,helptext$
    TextColor RGB(255,255,255),RGB(255,255,255) vorher löschen
    DRAWTEXT 25,40,"                                            "
    TextColor RGB(255,0,0),-1
    DRAWTEXT 25,40,typtext$
    Declare btndlg&,dlgende%,dlg&
    dlg&=Create("Window",%hwnd,"Hilfe",10,10,500,250)
    Startpaint dlg&
    UseFont "CANDARA",25,20,1,0,0
    TextColor RGB(0,0,0),RGB(255,255,255)
    Drawtext 1,1,helptext$
    Endpaint
    btnDlg& = CreateButton(dlg&,"OK",175,150,120,30)

    WhileNot dlgende%

        WaitInput

        If GetFocus(btnDlg&)

            dlgende% = 1

        EndIf

    Endwhile

    destroywindow(dlg&)

Endproc

WINDOWSTYLE 31
Window 200,200-500,180
Windowtitle "PiRePro by penguin"
TextColor RGB(0,0,255),-1
UseFont "TIMES NEW ROMAN",20,10,0,0,0
UseFont "CANDARA",25,20,1,0,0
Ping "127.0.0.1","PINGTEST.TXT","PING.BAT"

if ping%=1

    TextColor RGB(255,255,255),RGB(255,255,255) vorher löschen
    DRAWTEXT 25,40,"                                            "
    TextColor RGB(0,255,0),-1
    DRAWTEXT 25,10,"Server Erreichbar"

else

    Errorhelp "Server nicht erreichbar!","Hilfetext Nummer 1"

endif

Ping "192.168.0.1","PINGTEST.TXT","PING.BAT"

if ping%=1

    TextColor RGB(255,255,255),RGB(255,255,255) vorher löschen
    DRAWTEXT 25,40,"                                            "
    TextColor RGB(0,255,0),-1
    DRAWTEXT 25,40,"Client Erreichbar"

else

    Errorhelp "Client nicht erreichbar!","Hilfetext Nummer 2"

endif

Ping "www.google.dev","PINGTEST.TXT","PING.BAT"

if ping%=1

    TextColor RGB(255,255,255),RGB(255,255,255) vorher löschen
    DRAWTEXT 25,40,"                                            "
    TextColor RGB(0,255,0),-1
    DRAWTEXT 25,70,"Extern Erreichbar"

else

    Errorhelp "Extern nicht erreichbar!","Hilfetext Nummer 3"

endif

Hier Code für Meldung des Erfolgs
TextColor RGB(0,0,0),-1
UseFont "CANDARA",15,10,1,0,0
DRAWTEXT 25,120,"Zum Beenden drücken Sie bitte eine beliebige Taste"
waitinput
 
22.07.2008  
 




Penguin
Tux
Mhmm.. Ich lasse es lieber so wie es ist, weil ich da einigermaßen verstehe was ich gemacht habe.

Gleich noch eine Frage hinterher.

Man kann doch mit XProfan sicherlich auch nen COM-Port ansprechen - oder?
 


OS: Win XP/Debian
XProfan 10
22.07.2008  
 



Das hängt unter anderem von der Hilfedatei ab die man hierfür zunächst konsultiert...

Schau nach OpenCom.
 
22.07.2008  
 




Penguin
Tux
Ich hab mal COM eingegeben und bekomme nichts was mir bei diesem Problem helfen könnte.
 


OS: Win XP/Debian
XProfan 10
22.07.2008  
 




Rolf
Koch
Ich sag Dir: Nimm das Beispiel von mir und bau darauf weiter auf. Denn prozedural ist besser. Stell Dir vor Du willst 30 Adressen anpingen und schreibst immer wieder dasselbe. Hier rufst Du immer nur die Prozedur die Du im wesentlichen ja kennst, denn es ist ja das was Du sauoft unten immer wieder stehen hast in der else Anweisung, auf und lernst richtig dabei programmieren.
Glaub mir. Es ist im Endeffekt Dein Code nur Zeit, Nerven, Codesparend.
 
22.07.2008  
 




Penguin
Tux
Wenn du das sagst^^

Ich werd mir das mal alles angucken und mioch melden, wenn ich den neuen Code habe.

Ich hab den Code jetzt einfach erstmal Kopiert und gespeichert. Ich gehe seit drei Tagen um 3 ins Bett und bin hundemüde. Ich hab zwar schon einiges aus deinem Code verstanden, aber um den jetzt Zeile für Zeile durchzugucken fehlt die Lust.
 


OS: Win XP/Debian
XProfan 10
22.07.2008  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

24.045 Betrachtungen

Unbenanntvor 0 min.
Georg Teles01.08.2023
Thomas Freier06.10.2022
Langer30.01.2021
Walter29.01.2019
Mehr...

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie