Danke für eure Ratschläge ich habe mir alle bis auf Kiffi's alle mal angesehen.
Ich habe mal als kleine Teststudie aus allem etwas zusammen gebastelt.
Code: Alles auswählen
;Kleines grafische Tool zum anpingen einer Adresse im eigenen Netzwerk
Global IP_Adresse.s = "192.168.1.6" ;Die anzupingende Adresse
CreateImage(1, 440, 240, 24)
CreateImage(2, 440, 240, 24)
Procedure Thread(z)
Protected LineYCounter = 25
Protected LineYCounter2
Protected Zufall
Protected oldZufall
Protected lngHPort, strMessage.s, MsgLen, lngDAddress
Protected *ECHO.ICMP_ECHO_REPLY, Result
lngHPort = IcmpCreateFile_()
strMessage.s = "Echo This Message back to me"
MsgLen = Len(strMessage)
lngDAddress = MakeIPAddress(Val(StringField(IP_Adresse.s, 1, ".")), Val(StringField(IP_Adresse.s, 2, ".")), Val(StringField(IP_Adresse.s, 3, ".")), Val(StringField(IP_Adresse.s, 4, ".")))
*buffer = AllocateMemory(SizeOf(ICMP_ECHO_REPLY) + MsgLen + 16)
ECHO.ICMP_ECHO_REPLY
Repeat
FreeImage(2)
CopyImage(1, 2)
If StartDrawing(ImageOutput(1))
DrawingMode(#PB_2DDrawing_Gradient)
GradientColor(1.0, $00FF00) ; Grün
GradientColor(0.5, $00FFFF) ; Gelb
GradientColor(0.0, $0000FF) ; Rot
LinearGradient(0, 0, 0, 200)
Box(0, 0, 480, 240, $FFFFFF)
DrawingMode(#PB_2DDrawing_Default)
Line(ImageWidth(1) - 1, 0, 1, 1, RGB(0, 0, 0))
Line(ImageWidth(1) - 1, 80, 1, 1, RGB(0, 0, 0))
Line(ImageWidth(1) - 1, 160, 1, 1, RGB(0, 0, 0))
Line(ImageWidth(1) - 1, 239, 1, 1, RGB(0, 0, 0))
If LineYCounter = 25
Line(ImageWidth(1) - 1, 0, 1, 240, $000000)
LineYCounter = 0
Else
LineYCounter + 1
EndIf
DrawImage(ImageID(2), -1, 0)
If IcmpSendEcho_(lngHPort, lngDAddress, @strMessage, MsgLen, #Null, *buffer, SizeOf(ICMP_ECHO_REPLY) + MsgLen, 1000)
CopyMemory(*Buffer, ECHO, SizeOf(ICMP_ECHO_REPLY))
PTime.i = ECHO\RoundTripTime
EndIf
If PTime.i < 10
Wert.i = PTime.i / 0.125
ElseIf PTime.i < 101
Wert.i = PTime.i / 0.625
ElseIf PTime.i < 1000
Wert.i = PTime.i / 4.167
EndIf
EndIf
If LineYCounter2 = 4
LineXY(ImageWidth(1) - 5, 240 - oldWert.i, ImageWidth(1) - 1, 240 - Wert.i, RGB(12, 15, 243))
LineYCounter2 = 0
oldWert.i = Wert.i
Else
LineYCounter2 + 1
EndIf
StopDrawing()
;EndIf
SetGadgetState(1, ImageID(1))
Delay(10)
ForEver
EndProcedure
If OpenWindow(0, 0, 0, 500, 270, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ImageGadget(1, 10, 20, 0, 0, ImageID(1), 0)
StartDrawing(ImageOutput(1))
Box(0, 0, 440, 240, $FFFFFF)
DrawingMode(#PB_2DDrawing_Gradient)
GradientColor(1.0, $00FF00) ; Grün
GradientColor(0.5, $00FFFF) ; Gelb
GradientColor(0.0, $0000FF) ; Rot
LinearGradient(0, 0, 0, 200)
Box(0, 0, 480, 240, $FFFFFF)
TextGadget(10, 5, 10, 40, 20, "1000ms", #PB_Text_Right)
TextGadget(11, 5, 90, 40, 20, "100ms", #PB_Text_Right)
TextGadget(12, 5, 170, 40, 20, "10ms", #PB_Text_Right)
DrawingMode(#PB_2DDrawing_Default)
Line(ImageWidth(1) - 1, 0, 1, 1, RGB(0, 0, 0))
Line(ImageWidth(1) - 1, 80, 1, 1, RGB(0, 0, 0))
Line(ImageWidth(1) - 1, 160, 1, 1, RGB(0, 0, 0))
Line(ImageWidth(1) - 1, 239, 1, 1, RGB(0, 0, 0))
StopDrawing()
ImageGadget(1, 50, 20, 480, 240, ImageID(1))
CreateThread(@Thread(), 0)
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
So in der Art hatte ich mir das auch vorgestellt.
Den Code kann man sicher noch verbessern und komprimieren, aber wie gesagt das ist nur ein Versuch.
@Kiffi ich denke für die dll werde ich wohl erst am Wochenende Zeit haben.
Mit einer dll habe ich bisher noch garnicht gearbeitet.