Announcement

Collapse
No announcement yet.

gui monitor network connection up/down

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • #16
    please see Dave Bigg's post here on pinging with pbwin10
    http://www.powerbasic.com/support/pb....php?p=403698#

    i will try his code merged into the internet.bas source code.

    a short test seem to get things going with one exception that i am not clear on as yet
    and that is in using the icmp.dll file or using the Iphlpapi.dll file for icmp functions
    p purvis

    Comment


    • #17
      in the program below, if you replace icmp.dll with Iphlpapi.dll in the declare functions then you can only run this program with xp or better
      i am using icmp.dll with this program


      after working with the code to make it pbwin10 compatible, i went ahead and used of Dave Biggs code with some slight adjustments.
      thanks Dave for responding to Russ Scole's post with a way to ping, see the above posting for a link

      i also want to mention that if i read right on the internet, 1000 milliseconds is standard timeout period for pinging although this program has a default timeout much lower
      unless you changed it in the command tail, but even though i have shortened it in practice, i cannot actually get the icmpsendecho to timeout when i think it should timeout.


      Code:
      'Internet.bas
      'program pings sites to see if the internet is up or down using ICMP
      'compiled with pbwin 10.03
      #COMPILE EXE
      #DIM ALL
      #INCLUDE ONCE "WIN32API.INC"
      GLOBAL g_hDlg   AS DWORD
      GLOBAL g_slocation() AS STRING
      GLOBAL g_slocationstring AS STRING
      GLOBAL g_smessagetext0 AS STRING ' message goes on the top of the log report in the msgbox
      GLOBAL g_smessagetext1 AS STRING ' holds the log report header plus the locations pinged
      GLOBAL g_smessagetext2 AS STRING ' holds the log on pinging locations being up or down as a group
      GLOBAL g_smessagetext3 AS STRING ' holds the log report ending
      
      GLOBAL g_itimeout AS LONG
      GLOBAL g_iloopdelay AS LONG
      GLOBAL g_itdelay AS LONG
      GLOBAL g_ispaceingoficmp AS LONG
      GLOBAL g_iicmplocations  AS LONG
      GLOBAL g_iicmpmade AS QUAD
      GLOBAL g_iloopsmade AS QUAD
      GLOBAL g_beepit AS LONG
      GLOBAL g_beepitc AS LONG
      GLOBAL g_beepitsignal AS LONG
      GLOBAL g_itextchange AS LONG
      GLOBAL g_stextchange AS STRING
      
      
      
      '%IDD_DIALOG1  =  101
      %IDC_LABEL1   = 1001
      
      DECLARE FUNCTION IcmpCreateFile LIB "icmp.dll" ALIAS "IcmpCreateFile" () AS DWORD
      DECLARE FUNCTION IcmpSendEcho   LIB "icmp.dll" ALIAS "IcmpSendEcho" ( _
          BYVAL IcmpHandle         AS DWORD, _
          BYVAL DestinationAddress AS DWORD, _
          RequestData              AS ANY, _
          BYVAL RequestSize        AS WORD, _
          RequestOptions           AS IP_OPTION_INFORMATION, _
          ReplyBuffer              AS ANY, _
          BYVAL ReplySize          AS DWORD, _
          BYVAL Timeout            AS DWORD _
          ) AS DWORD
      DECLARE FUNCTION IcmpCloseHandle LIB "icmp.dll" ALIAS "IcmpCloseHandle"(BYVAL IcmpHandle AS DWORD) AS LONG
      
      FUNCTION PingIpAddress(BYVAL sHost AS STRING) AS LONG
        LOCAL hPort AS DWORD, dwAddress AS DWORD,iret AS DWORD
        LOCAL ECHO AS ICMP_ECHO_REPLY
        LOCAL sRqData AS STRING
        FUNCTION = 0
        IF LEN(TRIM$(shost))=0 THEN EXIT FUNCTION
        HOST ADDR sHost TO dwAddress
        IF dwAddress= 165795656 THEN EXIT FUNCTION ' not good
            hPort = IcmpCreateFile()
         IF hPort = 0 THEN EXIT FUNCTION ' not good
      
         sRqData = "abcdefghijklmnop" '"Playback"
         iret = IcmpSendEcho( _
                   hPort, _
                   dwAddress, _
                   sRqData, _
                   LEN(sRqData), _
                   BYVAL 0, _
                   ECHO, _
                   LEN(ECHO)+LEN(sRqData), _       ' < NB buffer size plus len of "Request Data"
                   BYVAL 0) 'g_itimeout)                     ' use 1000. ret = 11010 (IP_REQ_TIMED_OUT) if 100ms
      
         CALL IcmpCloseHandle(hPort)
                   ' if echo.status it's not zero then it didn't ping
         IF echo.status=0 THEN FUNCTION=1   'success
      END FUNCTION
      
      
      'DECLARE CALLBACK FUNCTION ShowDIALOG1Proc()
      DECLARE FUNCTION ShowDIALOG1(BYVAL hParent AS DWORD) AS LONG
      
      
      THREAD FUNCTION beepit(BYVAL x AS LONG) AS LONG
      DO
      IF g_beepit=2 THEN EXIT DO
      IF g_beepitsignal THEN
          IF g_beepit=1 THEN
              IF g_beepitsignal=2 THEN WinBeep 5000,50
              IF g_beepitsignal=1 THEN WinBeep 100,50
              g_beepitsignal=0
          END IF
      END IF
      SLEEP 1
      
      
      LOOP
      END FUNCTION
      
      THREAD FUNCTION beepitc(BYVAL x AS LONG) AS LONG
      DO
      IF g_beepitc=2 THEN EXIT DO
      IF g_beepitsignal THEN
         IF g_beepitc=1 THEN
              WinBeep 200,1
              WinBeep 2700,1
              WinBeep 5700,1
           g_beepitsignal=0
          END IF
      END IF
      SLEEP 1
      LOOP
      
      END FUNCTION
      
      
      THREAD FUNCTION pingtest(BYVAL x AS LONG) AS LONG
      LOCAL IRESULT AS LONG
      LOCAL  i AS LONG
      LOCAL lupdown AS LONG
      LOCAL stimeupdown AS STRING
      lupdown=-1
      stimeupdown=""
      startloop:
      FOR i=1 TO g_iicmplocations
      IRESULT=pingipaddress(g_slocation(i))
      
      IF iresult THEN EXIT FOR
      IF g_itimeout THEN SLEEP g_itimeout
      NEXT i
      INCR g_iloopsmade
      
      IF iresult THEN
          INCR g_iicmpmade
           IF lupdown<>1 THEN
            IF g_beepit THEN g_beepitsignal=2
            stimeupdown=MID$(DATE$,1,5)+" "+TIME$:lupdown=1
            CONTROL SET COLOR g_hDlg, %IDC_LABEL1, %RGB_WHITE, %RGB_GREEN
            CONTROL SET TEXT g_hDlg, %IDC_LABEL1, g_slocationstring+" UP "+stimeupdown
            DIALOG SET TEXT g_hDlg, UCASE$(g_slocationstring)+" UP"
            UPDATEWINDOW g_hDlg
            g_smessagetext2+=DATE$+" "+TIME$+" status is UP"+$CRLF
            END IF
         ELSE
           IF g_beepitc THEN g_beepitsignal=1
           IF lupdown<>0 THEN
           IF g_beepit=1 THEN g_beepitsignal=1
           stimeupdown=MID$(DATE$,1,5)+" "+TIME$:lupdown=0
           CONTROL SET COLOR g_hDlg, %IDC_LABEL1, %RGB_WHITE, %RGB_RED
           CONTROL SET TEXT g_hDlg, %IDC_LABEL1, g_slocationstring+" down "+stimeupdown
           DIALOG SET TEXT g_hDlg, LCASE$(g_slocationstring)+" down "
           UPDATEWINDOW g_hDlg
           g_smessagetext2+="--------------------------------------------"+$CRLF+DATE$+" "+TIME$+" status is down"+$CRLF
           END IF
      END IF
      IF g_iloopdelay THEN SLEEP g_iloopdelay
      GOTO startloop
      END FUNCTION
      
      FUNCTION sendtoclipboard() AS LONG
          LOCAL sTEMP AS STRING
          DO
          CLIPBOARD RESET
          CLIPBOARD GET TEXT STEMP
          IF LEN(STEMP)=0 THEN EXIT LOOP
          LOOP
          CLIPBOARD SET  TEXT g_smessagetext1+g_smessagetext2+g_smessagetext3
      END FUNCTION
      
      
      CALLBACK FUNCTION ShowDIALOG1Proc()
      LOCAL itoclipboard AS LONG
      
      SELECT CASE AS LONG CBMSG
       CASE %WM_INITDIALOG  ' <- Received right before the dialog is shown
       CASE %WM_SYSCOMMAND
                   IF (CBWPARAM AND &HFFF0) = %SC_CLOSE THEN
                    LOCAL RES AS LONG
                    LOCAL itempbeepit1 AS LONG
                    LOCAL itempbeepit2 AS LONG
                    itempbeepit1=g_beepit:g_beepit=0
                    itempbeepit2=g_beepitc:g_beepitc=0
      
                    RES = MSGBOX ("Really close the program?", %MB_YESNO OR %MB_DEFBUTTON2 OR  %MB_ICONMASK , "ICMP monitoring program")
                      IF RES = %IDYES THEN
                          g_beepit=2 'shutdown the beepit thread
                          g_beepitc=2 'shutdown the beepitc thread
                          SLEEP 2000  'allow time for beeping threads to shutdown
                       DIALOG END CB.HNDL
                        ELSE
                        g_beepit=itempbeepit1
                        g_beepitc=itempbeepit2
                        FUNCTION = 1
                       EXIT FUNCTION
                      END IF
                    END IF
       CASE  %WM_COMMAND
           IF CB.CTL =  %IDC_LABEL1 AND CB.CTLMSG = %STN_Clicked THEN
                g_smessagetext3="======================"+$CRLF+DATE$+" "+TIME$+" Log report end"+$CRLF+$CRLF
                g_smessagetext3+="Loops made trying     ="+STR$(g_iloopsmade)+$CRLF
                g_smessagetext3+="Loops with repsonses  ="+STR$(g_iicmpmade)+$CRLF
                g_smessagetext3+="Loops with failures   ="+STR$(g_iloopsmade-g_iicmpmade)+$CRLF
                itoclipboard=MSGBOX(g_smessagetext0+g_smessagetext1+g_smessagetext2+g_smessagetext3+$CRLF+$CRLF+_
                   "Any button closes this log report."+$CRLF+_
                   "Send this ICMP log report to the clipboard?",%MB_OKCANCEL OR  %MB_DEFBUTTON1 OR  %MB_ICONMASK,_
                   "ICMP monitoring program log report")
                IF itoclipboard=%IDOK  THEN sendtoclipboard
           END IF
      
       END SELECT
      
      END FUNCTION
      
      
      
      FUNCTION PBMAIN()
         processstartup
         IF g_iicmplocations=0 THEN EXIT FUNCTION
         IF g_beepitc=1 THEN g_beepit=3
         ShowDIALOG1 %HWND_DESKTOP
      END FUNCTION
      
      
      
      FUNCTION ShowDIALOG1(BYVAL hParent AS DWORD) AS LONG
          LOCAL lRslt  AS LONG
        '  LOCAL ghDlg   AS DWORD
          LOCAL hFont1 AS DWORD
          LOCAL counter AS LONG
          LOCAL hthread1 AS DWORD
          LOCAL hthread2 AS DWORD
          LOCAL hthread3 AS DWORD
          LOCAL lresult AS LONG
          LOCAL lwidth AS LONG
          lwidth=82
          IF LEN(COMMAND$(2))=0 THEN
              lwidth=LEN(g_slocation(1))
              IF lwidth THEN lwidth=lwidth*8
              IF lwidth<82 THEN lwidth=82
              IF lwidth>676 THEN lwidth=676
          END IF
          lwidth=lwidth+28
      
          DIALOG NEW hParent, "Internet", 70, 70, lwidth, 9, %WS_POPUP OR %WS_BORDER _
              OR %WS_DLGFRAME OR %WS_THICKFRAME OR %WS_SYSMENU OR %WS_MINIMIZEBOX _
              OR %WS_VISIBLE OR %DS_3DLOOK OR %DS_NOFAILCREATE OR %DS_SETFONT, _
              %WS_EX_CONTROLPARENT OR %WS_EX_LEFT OR %WS_EX_LTRREADING OR _
              %WS_EX_RIGHTSCROLLBAR, TO g_hDlg
          CONTROL ADD LABEL, g_hDlg, %IDC_LABEL1, " Starting ver 1.05", 0, 0, 670, 12, _
             %SS_NOTIFY OR  %WS_CHILD OR %WS_VISIBLE OR %SS_LEFT, %WS_EX_LEFT OR _
              %WS_EX_LTRREADING
      
          FONT NEW "MS Sans Serif", 10, 0, %ANSI_CHARSET TO hFont1
          CONTROL SET FONT g_hDlg, %IDC_LABEL1, hFont1
          IF g_beepit=1 THEN
          THREAD CREATE beepit(1&) TO hThread2
          DO WHILE hthread2 = 0
           SLEEP 150
          LOOP
          END IF
          IF g_beepitc=1 THEN
          THREAD CREATE beepitc(1&) TO hThread3
          DO WHILE hthread3 = 0
           SLEEP 150
          LOOP
          END IF
      
          THREAD CREATE pingtest(1&) TO hThread1
          DO WHILE hthread1 = 0
           SLEEP 150
          LOOP
      
            DIALOG SHOW MODAL g_hDlg  , CALL ShowDIALOG1Proc TO lRslt
          FONT END hFont1
          FUNCTION = lRslt
      
      END FUNCTION
      
      FUNCTION processstartup() AS LONG
      DIM i AS LONG
      DIM j AS LONG
      DIM stemp1 AS STRING
      DIM stemp2 AS STRING
      g_itdelay=0
      g_itimeout=300
      g_iloopdelay=3000
      g_ispaceingoficmp=0
      g_iicmplocations=1000
      
      DIM g_slocation(0 TO g_iicmplocations) AS STRING
      i=0
      DO
      INCR i
      stemp2=LCASE$(TRIM$(COMMAND$(i)))
      IF LEN(stemp2)=0 THEN EXIT DO
      IF stemp2="-d" THEN stemp1=stemp2:ITERATE
      IF stemp2="-t" THEN stemp1=stemp2:ITERATE
      IF stemp2="-s" THEN stemp1=stemp2:ITERATE
      IF stemp2="-l" THEN stemp1=stemp2:ITERATE
      IF stemp2="-v" THEN stemp1=stemp2:ITERATE
      IF stemp2="-b" THEN stemp1="":g_beepit=1:ITERATE
      IF stemp2="-bc" THEN stemp1="":g_beepitc=1:ITERATE
      
      IF STEMP1="-d" THEN g_itdelay=ABS(VAL(stemp2)):stemp1="":ITERATE
      IF STEMP1="-t" THEN g_itimeout=ABS(VAL(stemp2)):stemp1="":ITERATE
      IF STEMP1="-s" THEN g_ispaceingoficmp=ABS(VAL(stemp2)):stemp1="":ITERATE
      IF STEMP1="-l" THEN g_iloopdelay=ABS(VAL(stemp2)):stemp1="":ITERATE
      IF STEMP1="-v" THEN g_itextchange=1:g_stextchange=COMMAND$(i):stemp1="":ITERATE
      INCR j
      g_slocation(j)=stemp2
      stemp1=""
      IF J=1000 THEN EXIT DO
      LOOP
      g_iicmplocations=J
        IF g_iicmplocations=0 THEN
            MSGBOX "You must place url locations or ip addresses to ping(ICMP) on the command tail."+$CRLF+_
                   "To test a site for multiple sequential ping tries, repeat the location x times."+$CRLF+_
                   "The first location to respond to a ping means a ping response(connection) was made."+$CRLF+$CRLF+_
                   "It is more efficient to use ip address numbers, because url's have to do dns lookups."+$CRLF+_
                   "Other command tail options can change the timing in the ping function and sound alarms."+$CRLF+_
                   " -d xxxxx millisecond delay before the program starts monitoring sites, default 0"+$CRLF+_
                   " -t xxxxx millisecond timeout for a single ping try at each site, default  300"+$CRLF+_
                   " -s xxxxx millisecond delay of time before pinging each site after the first site, default 0"+$CRLF+_
                   " -l xxxxx millisecond delay in loop time before trying the pooled sites again, default 3000"+$CRLF+_
                   "Be careful when using time setting, this program does not check for bad numbers used."+$CRLF+_
                   "1000 milliseconds equals 1 second. Use the ping command to test a site for reasonable response times."+$CRLF+_
                   "Audible alarms, use either -b (up/down changes) or -bc (constant down connections)"+$CRLF+_
                   "Text in the status can be changed by using -v followed by text with no spaces.", %MB_OK OR %MB_ICONMASK,"ICMP Monitoring program"
      
            EXIT FUNCTION
         END IF
      
        g_smessagetext0= "If you cannot see the bottom, press enter to send the report to clipboard."+$CRLF
        g_smessagetext0+="or you can close the window with the X button at the top right."+$CRLF
      
        g_smessagetext1+="The program with the command line/tail used to create this log."+$CRLF+EXE.FULL$+" "+COMMAND$+$CRLF
        g_smessagetext1+="Site locations and order used in the pool for ICMP monitoring program."+$CRLF
      
         FOR i=1 TO g_iicmplocations
           g_smessagetext1+=TRIM$(STR$(i))+". "+g_slocation(i)+$CRLF
           IF g_slocation(i)<>g_slocation(1) THEN g_slocationstring="Internet"
         NEXT i
         IF g_itextchange=1 AND g_stextchange<>"" THEN g_slocationstring=g_stextchange
         IF g_slocationstring="" THEN g_slocationstring=g_slocation(1)
      
         g_smessagetext1+="The first response of an ICMP packet in the pool creates a UP status"+$CRLF
         g_smessagetext1+="delay before the program starts ICMP monitoring = "+STR$(g_itdelay)+" milliseconds"+$CRLF
         g_smessagetext1+="timeout used for each ICMP packet sent  = "+STR$(g_itimeout)+" milliseconds"+$CRLF
         g_smessagetext1+="time of spaceing between each ping test  = "+STR$(g_ispaceingoficmp)+" milliseconds"+$CRLF
         g_smessagetext1+="loop delay between ICMP testing  = "+STR$(g_iloopdelay)+" milliseconds "+$CRLF
         g_smessagetext2+=$CRLF+g_slocationstring+" is the text used in the gui status bar"+$CRLF
         g_smessagetext2+=DATE$+" "+TIME$+" Program start time"+$CRLF
         IF g_itdelay>0 THEN SLEEP g_itdelay
      
         g_smessagetext2+=DATE$+" "+TIME$+" Log report start"+$CRLF+"======================"+$CRLF
      
      END FUNCTION
      Attached Files
      Last edited by paul d purvis; 5 Apr 2012, 08:39 PM.
      p purvis

      Comment


      • #18
        Douglas
        i did your test after a rewrite in pbwin10 source, no sense in doing test with the old, right?

        i tested your conditions on my computer, a windows 2000 pro
        in your test change www.yahoo.com to firewall
        the www.yahoo.com is an unbroken text that becomes the text in the box

        internet.exe 10.1.1.50 -t 50 -d 0 -s 0 -bc -v firewall
        also because this is a lan connection, you might not lose any ping responses, the ones you will get will be fast, but you might do this
        internet.exe 10.1.1.50 10.1.1.50 10.1.1.50 -t 50 -d 0 -s 0 -bc -v firewall

        i had no issues, all worked as expected
        if you have issues, please let me know
        p purvis

        Comment


        • #19
          a new improved version
          made some minor changes to improve the progam
          added a yellow light option
          the new option command tail is -yellowlight after a single location to ping
          so if you want a yellow light ofter the faiilure to ping the second location
          you can use the command:
          internet a.a.a.a b.b.b.b -yellowlight c.c.c.c d.d.d.d
          or
          internet a.a.a.a a.a.a.a -yellowlight b.b.b.b c.c.c.c

          the yellow light might help to see ping response failures if you are having to troubleshoot connection issues

          Code:
          'Internet.bas
          'program pings sites to see if the internet is up or down using ICMP
          'compiled with pbwin 10.03
          #COMPILE EXE
          #DIM ALL
          #INCLUDE ONCE "WIN32API.INC"
          GLOBAL g_hDlg   AS DWORD
          GLOBAL g_slocation() AS STRING
          GLOBAL g_slocationstring AS STRING
          GLOBAL g_smessagetext0 AS STRING ' message goes on the top of the log report in the msgbox
          GLOBAL g_smessagetext1 AS STRING ' holds the log report header plus the locations pinged
          GLOBAL g_smessagetext2 AS STRING ' holds the log on pinging locations being up or down as a group
          GLOBAL g_smessagetext3 AS STRING ' holds the log report ending
          
          GLOBAL g_itimeout AS LONG
          GLOBAL g_iloopdelay AS LONG
          GLOBAL g_itdelay AS LONG
          GLOBAL g_ispaceingoficmp AS LONG
          GLOBAL g_iicmplocations  AS LONG
          GLOBAL g_iicmpmade AS QUAD
          GLOBAL g_iloopsmade AS QUAD
          GLOBAL g_beepit AS LONG
          GLOBAL g_beepitc AS LONG
          GLOBAL g_beepitsignal AS LONG
          GLOBAL g_itextchange AS LONG
          GLOBAL g_stextchange AS STRING
          GLOBAL g_shutdown AS LONG
          GLOBAL g_yellowlight AS LONG
          GLOBAL g_yellowlightstatus AS LONG
          
          
          
          '%IDD_DIALOG1  =  101
          %IDC_LABEL1   = 1001
          
          DECLARE FUNCTION IcmpCreateFile LIB "icmp.dll" ALIAS "IcmpCreateFile" () AS DWORD
          DECLARE FUNCTION IcmpSendEcho   LIB "icmp.dll" ALIAS "IcmpSendEcho" ( _
              BYVAL IcmpHandle         AS DWORD, _
              BYVAL DestinationAddress AS DWORD, _
              RequestData              AS ANY, _
              BYVAL RequestSize        AS WORD, _
              RequestOptions           AS IP_OPTION_INFORMATION, _
              ReplyBuffer              AS ANY, _
              BYVAL ReplySize          AS DWORD, _
              BYVAL Timeout            AS DWORD _
              ) AS DWORD
          DECLARE FUNCTION IcmpCloseHandle LIB "icmp.dll" ALIAS "IcmpCloseHandle"(BYVAL IcmpHandle AS DWORD) AS LONG
          
          FUNCTION PingIpAddress(BYVAL sHost AS STRING) AS LONG
            LOCAL hPort AS DWORD, dwAddress AS DWORD,iret AS DWORD
            LOCAL ECHO AS ICMP_ECHO_REPLY
            LOCAL sRqData AS STRING
            FUNCTION = 0
            IF LEN(TRIM$(shost))=0 THEN EXIT FUNCTION
            HOST ADDR sHost TO dwAddress
            IF dwAddress= 165795656 THEN EXIT FUNCTION ' not good
                hPort = IcmpCreateFile()
             IF hPort = 0 THEN EXIT FUNCTION ' not good
          
             sRqData = "abcdefghijklmnop" '"Playback"
             iret = IcmpSendEcho( _
                       hPort, _
                       dwAddress, _
                       sRqData, _
                       LEN(sRqData), _
                       BYVAL 0, _
                       ECHO, _
                       LEN(ECHO)+LEN(sRqData), _       ' < NB buffer size plus len of "Request Data"
                       BYVAL 0) 'g_itimeout)                     ' use 1000. ret = 11010 (IP_REQ_TIMED_OUT) if 100ms
          
             CALL IcmpCloseHandle(hPort)
                       ' if echo.status it's not zero then it didn't ping
             IF echo.status=0 THEN FUNCTION=1   'success
          END FUNCTION
          
          
          'DECLARE CALLBACK FUNCTION ShowDIALOG1Proc()
          DECLARE FUNCTION ShowDIALOG1(BYVAL hParent AS DWORD) AS LONG
          
          
          THREAD FUNCTION beepit(BYVAL x AS LONG) AS LONG
          DO
          IF g_shutdown THEN EXIT DO
          IF g_beepitsignal THEN
              IF g_beepit=1 THEN
                  IF g_beepitsignal=2 THEN WinBeep 5000,50
                  IF g_beepitsignal=1 THEN WinBeep 100,50
                  g_beepitsignal=0
              END IF
          END IF
          SLEEP 1
          LOOP
          END FUNCTION
          
          THREAD FUNCTION beepitc(BYVAL x AS LONG) AS LONG
          DO
          IF g_shutdown THEN EXIT DO
          IF g_beepitsignal THEN
             IF g_beepitc=1 THEN
                  WinBeep 200,1
                  WinBeep 2700,1
                  WinBeep 5700,1
               g_beepitsignal=0
              END IF
          END IF
          SLEEP 1
          LOOP
          
          END FUNCTION
          
          
          THREAD FUNCTION pingtest(BYVAL x AS LONG) AS LONG
          LOCAL IRESULT AS LONG
          LOCAL  i AS LONG
          LOCAL lupdown AS LONG
          LOCAL stimeupdown AS STRING
          lupdown=-1
          stimeupdown=""
          startloop:
          IF g_shutdown THEN EXIT FUNCTION
          
          FOR i=1 TO g_iicmplocations
          IRESULT=pingipaddress(g_slocation(i))
          IF iresult THEN EXIT FOR
          IF g_yellowlight=i THEN
              IF lupdown=1 THEN  CONTROL SET COLOR g_hDlg, %IDC_LABEL1, %RGB_WHITE, %RGB_SANDYBROWN
              CONTROL REDRAW g_hDlg, %IDC_LABEL1
              g_yellowlightstatus=1
          END IF
          IF g_itimeout AND i<> g_iicmplocations THEN SLEEP g_itimeout
          NEXT i
          INCR g_iloopsmade
          
          IF iresult THEN
                INCR g_iicmpmade
                IF g_yellowlightstatus=1 THEN
                    CONTROL SET COLOR g_hDlg, %IDC_LABEL1, %RGB_WHITE, %RGB_GREEN
                    CONTROL REDRAW g_hDlg, %IDC_LABEL1
                    g_yellowlightstatus=0
                END IF
                IF lupdown<>1 THEN
                IF g_beepit THEN g_beepitsignal=2
                stimeupdown=MID$(DATE$,1,5)+" "+TIME$:lupdown=1
                CONTROL SET COLOR g_hDlg, %IDC_LABEL1, %RGB_WHITE, %RGB_GREEN
                CONTROL SET TEXT g_hDlg, %IDC_LABEL1, g_slocationstring+" UP "+stimeupdown
                DIALOG SET TEXT g_hDlg, UCASE$(g_slocationstring)+" UP"
                CONTROL REDRAW g_hDlg, %IDC_LABEL1
                g_smessagetext2+=DATE$+" "+TIME$+" status is UP"+$CRLF
                END IF
             ELSE
               g_yellowlightstatus=0
               IF g_beepitc THEN g_beepitsignal=1
               IF lupdown<>0 THEN
               IF g_beepit=1 THEN g_beepitsignal=1
               stimeupdown=MID$(DATE$,1,5)+" "+TIME$:lupdown=0
               CONTROL SET COLOR g_hDlg, %IDC_LABEL1, %RGB_WHITE, %RGB_RED
               CONTROL SET TEXT g_hDlg, %IDC_LABEL1, g_slocationstring+" down "+stimeupdown
               DIALOG SET TEXT g_hDlg, LCASE$(g_slocationstring)+" down "
               CONTROL REDRAW g_hDlg, %IDC_LABEL1
               g_smessagetext2+="--------------------------------------------"+$CRLF+DATE$+" "+TIME$+" status is down"+$CRLF
               END IF
          END IF
          IF g_iloopdelay THEN SLEEP g_iloopdelay
          GOTO startloop
          END FUNCTION
          
          FUNCTION sendtoclipboard() AS LONG
              LOCAL sTEMP AS STRING
              DO
              CLIPBOARD RESET
              CLIPBOARD GET TEXT STEMP
              IF LEN(STEMP)=0 THEN EXIT LOOP
              LOOP
              CLIPBOARD SET  TEXT g_smessagetext1+g_smessagetext2+g_smessagetext3
          END FUNCTION
          
          
          CALLBACK FUNCTION ShowDIALOG1Proc()
          LOCAL itoclipboard AS LONG
          
          SELECT CASE AS LONG CBMSG
           CASE %WM_INITDIALOG  ' <- Received right before the dialog is shown
           CASE %WM_SYSCOMMAND
                       IF (CBWPARAM AND &HFFF0) = %SC_CLOSE THEN
                        LOCAL RES AS LONG
          
                        RES = MSGBOX ("Really close the program?", %MB_YESNO OR %MB_DEFBUTTON2 OR  %MB_ICONMASK , "ICMP monitoring program")
                          IF RES = %IDYES THEN
                              g_shutdown=1 'to shutdown threads
                              DO
                                SLEEP 0
                              LOOP WHILE THREADCOUNT > 1
                              DIALOG END CB.HNDL
                            ELSE
                              FUNCTION = 1
                           EXIT FUNCTION
                          END IF
                        END IF
           CASE  %WM_COMMAND
               IF CB.CTL =  %IDC_LABEL1 AND CB.CTLMSG = %STN_Clicked THEN
                    g_smessagetext3="======================"+$CRLF+DATE$+" "+TIME$+" Log report end"+$CRLF+$CRLF
                    g_smessagetext3+="Loops made trying     ="+STR$(g_iloopsmade)+$CRLF
                    g_smessagetext3+="Loops with repsonses  ="+STR$(g_iicmpmade)+$CRLF
                    g_smessagetext3+="Loops with failures   ="+STR$(g_iloopsmade-g_iicmpmade)+$CRLF
                    itoclipboard=MSGBOX(g_smessagetext0+g_smessagetext1+g_smessagetext2+g_smessagetext3+$CRLF+$CRLF+_
                       "Any button closes this log report."+$CRLF+_
                       "Send this ICMP log report to the clipboard?",%MB_OKCANCEL OR  %MB_DEFBUTTON1 OR  %MB_ICONMASK,_
                       "ICMP monitoring program log report")
                    IF itoclipboard=%IDOK  THEN sendtoclipboard
               END IF
          
           END SELECT
          
          END FUNCTION
          
          
          
          FUNCTION PBMAIN()
             processstartup
             IF g_iicmplocations=0 THEN EXIT FUNCTION
             IF g_beepitc=1 THEN g_beepit=0
             ShowDIALOG1 %HWND_DESKTOP
          END FUNCTION
          
          
          
          FUNCTION ShowDIALOG1(BYVAL hParent AS DWORD) AS LONG
              LOCAL lRslt  AS LONG
            '  LOCAL ghDlg   AS DWORD
              LOCAL hFont1 AS DWORD
              LOCAL counter AS LONG
              LOCAL hthread1 AS DWORD
              LOCAL hthread2 AS DWORD
              LOCAL hthread3 AS DWORD
              LOCAL lresult AS LONG
              LOCAL lwidth AS LONG
              lwidth=82
              IF LEN(COMMAND$(2))=0 THEN
                  lwidth=LEN(g_slocation(1))
                  IF lwidth THEN lwidth=lwidth*8
                  IF lwidth<82 THEN lwidth=82
                  IF lwidth>676 THEN lwidth=676
              END IF
              lwidth=lwidth+28
          
              DIALOG NEW hParent, "Internet", 70, 70, lwidth, 9, %WS_POPUP OR %WS_BORDER _
                  OR %WS_DLGFRAME OR %WS_THICKFRAME OR %WS_SYSMENU OR %WS_MINIMIZEBOX _
                  OR %WS_VISIBLE OR %DS_3DLOOK OR %DS_NOFAILCREATE OR %DS_SETFONT, _
                  %WS_EX_CONTROLPARENT OR %WS_EX_LEFT OR %WS_EX_LTRREADING OR _
                  %WS_EX_RIGHTSCROLLBAR, TO g_hDlg
              CONTROL ADD LABEL, g_hDlg, %IDC_LABEL1, " Starting ver 1.06", 0, 0, 670, 12, _
                 %SS_NOTIFY OR  %WS_CHILD OR %WS_VISIBLE OR %SS_LEFT, %WS_EX_LEFT OR _
                  %WS_EX_LTRREADING
          
              FONT NEW "MS Sans Serif", 10, 0, %ANSI_CHARSET TO hFont1
              CONTROL SET FONT g_hDlg, %IDC_LABEL1, hFont1
              IF g_beepit=1 THEN
              THREAD CREATE beepit(1&) TO hThread2
              DO WHILE hthread2 = 0
               SLEEP 150
              LOOP
              END IF
              IF g_beepitc=1 THEN
              THREAD CREATE beepitc(1&) TO hThread3
              DO WHILE hthread3 = 0
               SLEEP 150
              LOOP
              END IF
          
              THREAD CREATE pingtest(1&) TO hThread1
              DO WHILE hthread1 = 0
               SLEEP 150
              LOOP
          
                DIALOG SHOW MODAL g_hDlg  , CALL ShowDIALOG1Proc TO lRslt
              FONT END hFont1
              FUNCTION = lRslt
          
          END FUNCTION
          
          FUNCTION processstartup() AS LONG
          DIM i AS LONG
          DIM j AS LONG
          DIM stemp1 AS STRING
          DIM stemp2 AS STRING
          g_itdelay=0
          g_itimeout=300
          g_iloopdelay=3000
          g_ispaceingoficmp=0
          g_iicmplocations=1000
          
          DIM g_slocation(0 TO g_iicmplocations) AS STRING
          i=0
          DO
          INCR i
          stemp2=LCASE$(TRIM$(COMMAND$(i)))
          IF LEN(stemp2)=0 THEN EXIT DO
          IF stemp2="-d" THEN stemp1=stemp2:ITERATE
          IF stemp2="-t" THEN stemp1=stemp2:ITERATE
          IF stemp2="-s" THEN stemp1=stemp2:ITERATE
          IF stemp2="-l" THEN stemp1=stemp2:ITERATE
          IF stemp2="-v" THEN stemp1=stemp2:ITERATE
          IF stemp2="-b" THEN stemp1="":g_beepit=1:ITERATE
          IF stemp2="-bc" THEN stemp1="":g_beepitc=1:ITERATE
          
          IF stemp2="-yellowlight" THEN stemp1="":g_yellowlight=j:ITERATE
          
          IF STEMP1="-d" THEN g_itdelay=ABS(VAL(stemp2)):stemp1="":ITERATE
          IF STEMP1="-t" THEN g_itimeout=ABS(VAL(stemp2)):stemp1="":ITERATE
          IF STEMP1="-s" THEN g_ispaceingoficmp=ABS(VAL(stemp2)):stemp1="":ITERATE
          IF STEMP1="-l" THEN g_iloopdelay=ABS(VAL(stemp2)):stemp1="":ITERATE
          IF STEMP1="-v" THEN g_itextchange=1:g_stextchange=COMMAND$(i):stemp1="":ITERATE
          
          INCR j
          g_slocation(j)=stemp2
          stemp1=""
          IF J=1000 THEN EXIT DO
          LOOP
          g_iicmplocations=J
            IF g_iicmplocations=0 THEN
                MSGBOX "You must place url locations or ip addresses to ping(ICMP) on the command tail."+$CRLF+_
                       "To test a site for multiple sequential ping tries, repeat the location x times."+$CRLF+_
                       "The first location to respond to a ping means a ping response(connection) was made."+$CRLF+$CRLF+_
                       "It is more efficient to use ip address numbers, because url's have to do dns lookups."+$CRLF+_
                       "Other command tail options can change the timing in the ping function and sound alarms."+$CRLF+_
                       " -d xxxxx millisecond delay before the program starts monitoring sites, default 0"+$CRLF+_
                       " -t xxxxx millisecond timeout for a single ping try at each site, default  300"+$CRLF+_
                       " -s xxxxx millisecond delay of time before pinging each site after the first site, default 0"+$CRLF+_
                       " -l xxxxx millisecond delay in loop time before trying the pooled sites again, default 3000"+$CRLF+_
                       "Be careful when using time setting, this program does not check for bad numbers used."+$CRLF+_
                       "1000 milliseconds equals 1 second. Use the ping command to test a site for reasonable response times."+$CRLF+_
                       "Audible alarms, use either -b (up/down changes) or -bc (constant down connections)"+$CRLF+_
                       "Text in the status can be changed by using -v followed by text with no spaces."+$CRLF+_
                       "A yellow status color can be added on a ping failure using the word -yellowlight after the location.", %MB_OK OR %MB_ICONMASK,"ICMP Monitoring program"
          
                EXIT FUNCTION
             END IF
          
            g_smessagetext0= "If you cannot see the bottom, press enter to send the report to clipboard."+$CRLF
            g_smessagetext0+="or you can close the window with the X button at the top right."+$CRLF
          
            g_smessagetext1+="The program with the command line/tail used to create this log."+$CRLF+EXE.FULL$+" "+COMMAND$+$CRLF
            g_smessagetext1+="Site locations and order used in the pool for ICMP monitoring program."+$CRLF
          
             FOR i=1 TO g_iicmplocations
               g_smessagetext1+=TRIM$(STR$(i))+". "+g_slocation(i)+$CRLF
               IF g_slocation(i)<>g_slocation(1) THEN g_slocationstring="Internet"
             NEXT i
             IF g_itextchange=1 AND g_stextchange<>"" THEN g_slocationstring=g_stextchange
             IF g_slocationstring="" THEN g_slocationstring=g_slocation(1)
          
             g_smessagetext1+="The first response of an ICMP packet in the pool creates a UP status"+$CRLF
             g_smessagetext1+="delay before the program starts ICMP monitoring = "+STR$(g_itdelay)+" milliseconds"+$CRLF
             g_smessagetext1+="timeout used for each ICMP packet sent  = "+STR$(g_itimeout)+" milliseconds"+$CRLF
             g_smessagetext1+="time of spaceing between each ping test  = "+STR$(g_ispaceingoficmp)+" milliseconds"+$CRLF
             g_smessagetext1+="loop delay between ICMP testing  = "+STR$(g_iloopdelay)+" milliseconds "+$CRLF
             g_smessagetext2+=$CRLF+g_slocationstring+" is the text used in the gui status bar"+$CRLF
             g_smessagetext2+=DATE$+" "+TIME$+" Program start time"+$CRLF
             IF g_itdelay>0 THEN SLEEP g_itdelay
          
             g_smessagetext2+=DATE$+" "+TIME$+" Log report start"+$CRLF+"======================"+$CRLF
          
          END FUNCTION
          Attached Files
          Last edited by paul d purvis; 12 Apr 2012, 05:41 PM.
          p purvis

          Comment


          • #20
            This program seems to have a problem in windows 7.
            I will work on it but i do not even have a win 7 machine setup
            p purvis

            Comment

            Working...
            X