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 6 -



Penguin
Tux

KompilierenMarkierenSeparieren
Benutze ich ja nicht mehr, aber wenn müsst es doch
KompilierenMarkierenSeparieren
heißen?
 


OS: Win XP/Debian
XProfan 10
21.07.2008  
 




Rolf
Koch
Tony? Was genau willst Du zerstören?
Genau den Dialog!
Wenn Du sagst:
DLG&=Create("DIALOG".... , dann speichert Windows das Handle in DLG&
Dies ist eine eindeutige Nummer wie 127222 oder so, welche von Windows vergeben wird.
Was soll also bei Dir zerstört werden? 1 oder 0?
Nein! Es soll der Dialog zerstört werden. Bedeutet:
Wie ich oben schon geschrieben habe: DESTROYWINDOW(DLG&)
Genauso verhält es sich mit SHOWWINDOW
SHOWWINDOW(BUTTON1&,0) versteckt ein Objekt
SHOWWINDOW(BUTTON1&,1) bringt es wieder zum Vorschein.
Aber wenn Du DLG& per Destroywindow wieder zerstört hast, dann kannst Du es natürlich nicht mehr mit SHOWWINDOW anzeigen, da es das Handle nicht mehr gibt. Also dann wieder neu erstellen und daran denken in Deinem Fall wieder
DIALOGENDE%=0 zu setzen, damit die Schleife nicht wieder direkt beendet wird.
Du kannst aber anstatt DESTROYWINDOW wirklich
SHOWWINDOW(DLG&,0) nach dem Dialogerstellen setzen um es zu verstecken und wenn Klick auf Hilfebutton das Hilfefenster per SHOWWINDOW(DLG&,1) wieder anzeigen. Nach Klick auf HILFE SCHLIESSEN einfach wieder SHOWWINDOW(DLG&,0) und schon wird es wieder versteckt.

P.S.: iF hat Recht, lese Dir bitte genau jeden Satz in der Hilfe durch, denn Du benötigst kein DEF....
Ausschnitt Hilfe zu SHOWWINDOW:


N1 : LongInt - Fenster-Handle

N2 : Integer - Abbildungsmodus (1 .. 9)

Das Fenster mit dem Handle N1 wird im Modus N2 angezeigt. Das Ergebnis ist 1 wenn das Fenster vorher sichtbar war oder 0, wenn es vorher versteckt (unsichtbar) war.


Darunter stehender Text ist nur zur Erklärung der passenden API, welche Du in Deiner Profanversion nicht benötigst.
 
21.07.2008  
 




Penguin
Tux
Ich komme gerade echt nicht hinterher

Also, mein Code für das Programm selbst sieht jetzt so aus:
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"

endif

Hier Code für Fehlermeldung/Tipbox
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"

endif

Hier Code für Fehlermeldung/Tipbox
Ping "www.google.y","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"

endif

Hier Code für Fehlermeldung/Tipbox
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

...und der für das Fenster:
KompilierenMarkierenSeparieren
>>>>> AB HIER KOPIEREN UND IN EIGENEN CODE EINBINDEN <<<<<<<<<<<<
DEF GETSYSCOLOR(1) !"USER32","GetSysColor"
SET("TRUECOLOR",1)
 $I C:DOKUMENTE UND EINSTELLUNGENTONYDESKTOPROCLIBUSER.INC (Für WIN32 OBJEKTE)

PROC DIALOG  ---------------------------------------------------------------------------> Dialoganfang

    DECLARE DLG&, DIALOGENDE%
    DECLARE TEXT1&
    DECLARE BUTTON1&

    PROC BUTTON1_ONCLICK

        GETMESSAGE
        DIALOGENDE%=1

    ENDPROC

    DLG&=CREATE("DIALOG",%HWND,"Neues Fenster",236,32,640,500)
    USEFONT "MS Sans Serif",13,0,0,0,0
    SETDIALOGFONT 1
    TEXT1& =@CREATE("TEXT",DLG&,"...Hilfetext...",0204,0101,0070,0020)

    PROC DLG_REFRESH

        SET("AUTOPAINT",1)
        STARTPAINT DLG&
        DRAWFRAME 0130,0080,0200,0120,2,15
        ENDPAINT

    ENDPROC

    BUTTON1& =@CREATE("BUTTON",DLG&,"OK",0200,0133,0070,0030)
    SETFOCUS(DLG&)
    DLG_REFRESH
    DIALOGENDE%=0

    WHILENOT DIALOGENDE%

        WAITINPUT

        If %KEY=2

            DIALOGENDE%= 1

        ELSEIF %WMPAINT

            DLG_REFRESH

        ELSEIF GETFOCUS(BUTTON1&) BUTTON

            BUTTON1_ONCLICK

        ENDIF

    ENDWHILE

    DESTROYWINDOW(DLG&)
    ENDPROC --------------------------------------------------------------------------------> Dialogende
    SET("AUTOPAINT",2)
    >>>>> HIER KOPIERENDE FÜR EIGENEN CODEEINBAU <<<<<<<<<<<<<<<<<<<<

Also muss ich weder 1 noch 0 zerstören.
 


OS: Win XP/Debian
XProfan 10
21.07.2008  
 



Du musst zumindest vor dem Programmende alle Controls zerstören, welche Du auch erstellt hast. Das verlangt nicht z.B. Windows XP, aber das gute Programm!

erstellst du also eins

a%=createText(...

musst Du es vor dem Programmende auch wieder

destroyWindow(a%)

zerstören.

Ich habe jetzt nicht nachgesehen ob Du Controls verwendest!

Nur das %hWnd musst/solltest Du nicht zerstören, das hat hier und da ne Sonderbehandlung.

Nachtrag: Du erstellst mindestens ein text ein dlg und ein button, spätestens vor Programmende sollten diese erzeugten Controls auch wieder über Ihr Handle per destroyWindow entfernt werden.
 
21.07.2008  
 




Jörg
Sellmeyer

erstellst du also eins

a%=createText(...

musst Du es vor dem Programmende auch wieder


Das halte ich aber für ein Gerücht! Wenn das Elternfenster zerstört wird reicht das völlig. Nur wenn man ein Control mit der gleichen Varablenbezeichnung neu erstellen will muß man es vorher zerstören, da sonst der Zugriff darauf nicht mehr möglich ist. Obwohl selbst dann beim Programmende die Zerlegung von Windows übernommen wird.
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
21.07.2008  
 




Penguin
Tux
Sry Leute, aber könntet ihr mal wieder Klartext, ich komm da ganz einfach noch nciht so schnell mit. Mir würde es recihen wenn ich weiß, wie ich das fenster erscheinen lasse und durch das klicken von ok wieder verschwinden lasse.
 


OS: Win XP/Debian
XProfan 10
21.07.2008  
 




Jörg
Sellmeyer
Hallo Pingu,
Vielleicht hilft Dir das hier ja erstmal weiter:
KompilierenMarkierenSeparieren
Declare btn1&,dlg&,ende%

Proc Dialog

    Declare btnDlg&,dlgende%
    dlg& = CreateDialog(%hwnd,"Fenster",40,40,300,400)
    btnDlg& = CreateButton(dlg&,"verschwinden",10,10,120,30)

    WhileNot dlgende%

        WaitInput

        If GetFocus(btnDlg&)

            dlgende% = 1
            DestroyWindow(dlg&)

        EndIf

    Wend

EndProc

WindowTitle "Buttontest"
Window 10,10,500,400
btn1& = CreateButton(%hwnd,"zeigen",10,10,60,30)

WhileNot ende%

    WaitInput

    If GetFocus(btn1&)

        Dialog

    EndIf

Wend

 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
21.07.2008  
 




Penguin
Tux

KompilierenMarkierenSeparieren
Declare btn1&,dlg&,ende%
WindowTitle "Hilfe"
Window 10,10,500,400
btnDlg& = CreateButton(dlg&,"OK",10,10,120,30)

WhileNot dlgende%

    WaitInput

    If GetFocus(btnDlg&)

        dlgende% = 1
        DestroyWindow(dlg&)

    EndIf

Wend


Der speckert jetzt bei Zeile 5 rum. Ich habe mir den geposteten COde einfach mal angeguckt und bin nur so weit gekommen.

Edit: Ich habe jetzt ein "Proc Dialog" an den Anfang gesetzt und ein "EndProc" ans Ende, die Fehlermeldung ist jetzt zwar weg, das Fenster dafür auch.
 


OS: Win XP/Debian
XProfan 10
21.07.2008  
 




Rolf
Koch
Du hast ende% declariert, aber nutzt unten dlgende% darum meckert er. Also
declare dlgende% anstatt ende% - ach und noch viel mehr Variablen welche garnicht
benutzt werden und so weiter. Schau und vergleiche:
KompilierenMarkierenSeparieren
Declare btndlg&,dlgende%
WindowTitle "Hilfe"
Window 10,10,500,400
btnDlg& = CreateButton(%hwnd,"OK",10,10,120,30) Hier HWND wo ist denn DLG&

WhileNot dlgende%

    WaitInput

    If GetFocus(btnDlg&)

        dlgende% = 1
        DestroyWindow(dlg&) wo ist denn ein Hanlde mit DLG&?

    EndIf

Wend

 
21.07.2008  
 




Penguin
Tux
Ok, ich habe jetzt aus "ende%" "dlgende%" femacht, aber der Fehler in der Zeile ist immer noch nicht behoben.

Er sagt "Variable nicht declariert: BTNDLG&"

Interessant... mache ich aus
KompilierenMarkierenSeparieren
Declare btn1&,dlg&,dlgende%

KompilierenMarkierenSeparieren
Declare btndlg&,dlg&,dlgende%

äffnet sich mein Fenster, aber ohne Button.
 


OS: Win XP/Debian
XProfan 10
21.07.2008  
 




Rolf
Koch
Hab mein obiges Posting erweitert da siehste es. Siehst Du irgendwo DECLARE BTNDLG& in Deinem Code? Deswegen wird gemeckert.
 
21.07.2008  
 




Penguin
Tux
Danke, jetzt Funktioniert es. Ich hatte ja garnicht so viel falsch, wenn man bedenkt das ich das erst seit gestern machen. Logisches denken hilft eben doch.

Wo wir gerade dabei sind. Wie schlage ich mich eigentlich? Ich frage zwar viel, aber dazu seit ihr ja da
 


OS: Win XP/Debian
XProfan 10
21.07.2008  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

23.740 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