Hallo Speedy08,
ich bin zwar nicht der Luckie, ich hab es mir aber trotzdem mal angeschaut. Dadurch, dass die Sourcen dabei sind, kannst du dir ja die EXE selber neu bauen. Du brauchst nur in der
Unit retPing.pas in der
function ICMPPing(Ip: DWORD): boolean;
in der Zeile
DW := IcmpSendEcho(Handle, in_addr(Ip), nil, 0, nil, @rep, 128, 0);
aus dem letzten Parameter (der ist zuständig für den TimeOut aus der 0 z.B. eine 100 machen (= 100 ms).
Dann scheint es schon zu Funktionieren.
Wenn man es Debuggen möchte kann man sich auch noch etwas mehr Infos dazu holen. Einfach folgendes noch nach dieser Zeile einfügen:
Delphi-Quellcode:
if DW = 0 then
begin
DW := GetLastError;
OutputDebugString(PChar(SysErrorMessage(DW) + ' -> ' + IntToStr(DW)));
end;
Mit hilfe der folgenden Tabelle die ich von
hier habe, kann man aus den Codes wie ich finde noch etwas mehr lesen:
Delphi-Quellcode:
Const IP_SUCCESS = 0
Const INADDR_NONE = &HFFFFFFFF
Const IP_BUF_TOO_SMALL = (11000 + 1)
Const IP_DEST_NET_UNREACHABLE = (11000 + 2)
Const IP_DEST_HOST_UNREACHABLE = (11000 + 3)
Const IP_DEST_PROT_UNREACHABLE = (11000 + 4)
Const IP_DEST_PORT_UNREACHABLE = (11000 + 5)
Const IP_NO_RESOURCES = (11000 + 6)
Const IP_BAD_OPTION = (11000 + 7)
Const IP_HW_ERROR = (11000 + 8)
Const IP_PACKET_TOO_BIG = (11000 + 9)
Const IP_REQ_TIMED_OUT = (11000 + 10)
Const IP_BAD_REQ = (11000 + 11)
Const IP_BAD_ROUTE = (11000 + 12)
Const IP_TTL_EXPIRED_TRANSIT = (11000 + 13)
Const IP_TTL_EXPIRED_REASSEM = (11000 + 14)
Const IP_PARAM_PROBLEM = (11000 + 15)
Const IP_SOURCE_QUENCH = (11000 + 16)
Const IP_OPTION_TOO_BIG = (11000 + 17)
Const IP_BAD_DESTINATION = (11000 + 18)
Const IP_ADDR_DELETED = (11000 + 19)
Const IP_SPEC_MTU_CHANGE = (11000 + 20)
Const IP_MTU_CHANGE = (11000 + 21)
Const IP_UNLOAD = (11000 + 22)
Const IP_ADDR_ADDED = (11000 + 23)
Const IP_GENERAL_FAILURE = (11000 + 50)
Const IP_PENDING = (11000 + 255)
Const PING_TIMEOUT = 500
@Luckie:
Ich weiß ja, dass diese
Unit's nicht von Dir sind, dennoch würde ich hier bei anders vorgehen:
Delphi-Quellcode:
function ICMPPing(
Ip: DWORD): boolean;
var
Handle : THandle;
DW : DWORD;
rep : ICMP_ECHO_REPLY;
// hier nicht ein Array von 1..128 of Byte
begin
result := false;
Handle := IcmpCreateFile;
if Handle = INVALID_HANDLE_VALUE
then Exit;
DW := IcmpSendEcho(
Handle, in_addr(
Ip),
nil, 0,
nil, @rep, sizeOf(rep), 100);
// hier immer sizeOf(rep) anstatt fix die Zahl 128
Result := (DW <> 0);
if DW = 0
then
begin
DW := GetLastError;
OutputDebugString(PChar(SysErrorMessage(DW) + '
-> ' + IntToStr(DW)));
end;
IcmpCloseHandle(
Handle);
end;
Aber das nur anbei. Es funktioniert ja auch so wie es ist, wenn man noch den TimeOut hinzufügt.
Gruß, Chris