|
VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
|
上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
羅朝斌
註冊時間: 2003-06-21 文章: 20 來自: 花蓮
第 1 樓
|
發表於: 星期五 一月 16, 2015 3:00 pm 文章主題: 請教各位先進,如何偵測有ip之網路印表機是否正常? |
|
|
常會碰到在區網網路內有好幾台網路印表機(如:192.168.1.100,...103),當資料送出後,有時列表機未開啟,便無法立即收到報表,非常麻煩!!.請教各位先進是否知道如何下命令?非常感謝. |
|
回頂端 |
|
|
yctsai
註冊時間: 2003-04-11 文章: 179
第 2 樓
|
發表於: 星期五 一月 16, 2015 3:32 pm 文章主題: |
|
|
用ping |
|
回頂端 |
|
|
羅朝斌
註冊時間: 2003-06-21 文章: 20 來自: 花蓮
第 3 樓
|
發表於: 星期五 一月 16, 2015 3:34 pm 文章主題: |
|
|
希望能在vfp程式內,而不用run方式. |
|
回頂端 |
|
|
syntech
註冊時間: 2003-05-16 文章: 4212 來自: Taipei,Taiwan
第 4 樓
|
發表於: 星期五 一月 16, 2015 3:52 pm 文章主題: |
|
|
用 win32api 的 winexec 取代 run,
但還是用 ping
XD _________________ 如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問
請聯絡我們,也許我們幫得上忙 |
|
回頂端 |
|
|
羅朝斌
註冊時間: 2003-06-21 文章: 20 來自: 花蓮
第 5 樓
|
發表於: 星期五 一月 16, 2015 6:04 pm 文章主題: |
|
|
非常感恩!! |
|
回頂端 |
|
|
goodnight
註冊時間: 2008-10-13 文章: 472 來自: 台南市
第 6 樓
|
|
回頂端 |
|
|
羅朝斌
註冊時間: 2003-06-21 文章: 20 來自: 花蓮
第 7 樓
|
發表於: 星期日 二月 01, 2015 11:34 pm 文章主題: |
|
|
是!
請問您是?! |
|
回頂端 |
|
|
kalok
註冊時間: 2010-08-26 文章: 284
第 8 樓
|
發表於: 星期一 五月 11, 2015 6:58 am 文章主題: |
|
|
請問如用 run 及 ping, VFP 如何接收結果? |
|
回頂端 |
|
|
oldbb
註冊時間: 2007-02-28 文章: 83
第 9 樓
|
發表於: 星期一 五月 11, 2015 8:04 am 文章主題: |
|
|
用ICMP協議API示例
代碼: | PARAMETERS szParam
IF (_VFP.StartMode == 4) AND (VARTYPE(szParam) != "C")
ASTACKINFO(aPrg)
oApp = CREATEOBJECT("Shell.Application")
oApp.ShellExecute(aPrg[2], "以管理員身份運行", "", "runas", 1)
QUIT
ENDIF
CLEAR
DECLARE LONG WSAStartup IN Ws2_32 LONG, STRING@
DECLARE LONG WSACleanup IN Ws2_32
DECLARE LONG socket IN Ws2_32 LONG, LONG, LONG
DECLARE LONG closesocket IN Ws2_32 LONG
DECLARE LONG inet_addr IN Ws2_32 STRING@
DECLARE LONG inet_ntoa IN Ws2_32 LONG
DECLARE LONG setsockopt IN Ws2_32 LONG, LONG, LONG, LONG@, LONG
DECLARE LONG sendto IN Ws2_32 LONG, STRING@, LONG, LONG, STRING@, LONG
DECLARE LONG recvfrom IN Ws2_32 LONG, STRING@, LONG, LONG, STRING@, LONG@
DECLARE LONG WSAGetLastError IN Ws2_32
DECLARE LONG GetCurrentProcessId IN Kernel32
DECLARE LONG GetTickCount IN Kernel32
DECLARE LONG Sleep IN Kernel32 LONG
_Ping("180.97.33.107")
*_Ping("127.0.0.1")
? "按任一鍵結束"
INKEY(0, "HM")
CLEAR DLLS
RETURN
FUNCTION _Ping(cDestIP)
LOCAL WsaData, IcmpHdr, SockAddr_Dest, SockAddr_From
LOCAL i, hSocket, nTimeout, cRecvBuf, cIP, nVal, nTime
WsaData = REPLICATE(0h00, 398)
WSAStartup(0x202, @WsaData)
hSocket = socket(2, 3, 1)
IF hSocket != -1
nTimeout = 1000
setsockopt(hSocket, 0xFFFF, 0x1006, @nTimeout, 4)
cRecvBuf = REPLICATE(0h00, 1024)
SockAddr_From = REPLICATE(0h00, 16)
SockAddr_Dest = 0h02000000 + BINTOC(inet_addr(@cDestIP), "4RS") + 0h0000000000000000
FOR i = 1 TO 4
IcmpHdr = 0h08000000; && 請求應答
+ LEFT(BINTOC(GetCurrentProcessId(), "4RS"), 2);
+ BINTOC(i-1, "2RS");
+ BINTOC(GetTickCount(), "4RS")
IcmpHdr = STUFF(IcmpHdr, 3, 2, LEFT(BINTOC(_CheckSum(IcmpHdr, LEN(IcmpHdr)), "4RS"), 2))
IF sendto(hSocket, @IcmpHdr, LEN(IcmpHdr), 0, @SockAddr_Dest, LEN(SockAddr_Dest)) != -1
nVal = LEN(SockAddr_From)
nVal = recvfrom(hSocket, @cRecvBuf, LEN(cRecvBuf), 0, @SockAddr_From, @nVal)
nTime = GetTickCount()
IF nVal != -1
IF nVal >= (20 + LEN(IcmpHdr))
cIP = SYS(2600, inet_ntoa(CTOBIN(SUBSTR(cRecvBuf, 13, 4), "4RS")), 16)
cIP = LEFT(cIP, AT(0h00, cIP) - 1)
IF (ASC(SUBSTR(cRecvBuf, 10, 1)) == 1) AND ; && 是ICMP協議
(cIP == cDestIP) AND ;
(ASC(SUBSTR(cRecvBuf, 21, 1)) == 0) AND ; && 響應應答
(CTOBIN(SUBSTR(cRecvBuf, 25, 2), "2RS") == GetCurrentProcessId())
nTime = nTime - CTOBIN(SUBSTR(cRecvBuf, 29, 4), "4RS")
? "來自 " + cIP
?? " 的回復: 字節=" + TRANSFORM(nVal)
?? " 時間" + IIF(nTime < 1, "<1", "=" + TRANSFORM(nTime)) + "ms"
?? " TTL=" + TRANSFORM(ASC(SUBSTR(cRecvBuf, 9, 1))) && IP頭ip_ttl
Sleep(1000)
ENDIF
ENDIF
ELSE
nVal = WSAGetLastError()
IF nVal == 10060
? "请求超时"
ELSE
? "Error: " + TRANSFORM(nVal)
ENDIF
ENDIF
ENDIF
ENDFOR
ELSE
nVal = WSAGetLastError()
IF nVal == 10013
? "�]權限被拒,可嚐試以管理員身份運行主�{序。"
ELSE
? "Error: " + TRANSFORM(nVal)
ENDIF
ENDIF
closesocket(hSocket)
WSACleanup()
ENDFUNC
FUNCTION _CheckSum(cBuffer, nSize)
LOCAL i, nCheckSum
i = 1
nCheckSum = 0
DO WHILE nSize > 1
nCheckSum = nCheckSum + CTOBIN(SUBSTR(cBuffer, i, 2) + 0h0000, "4RS")
i = i + 2
nSIze = nSIze - 2
ENDDO
IF nSize == 1
nCheckSum = nCheckSum + ASC(SUBSTR(cBuffer, i, 1))
ENDIF
DO WHILE BITRSHIFT(nCheckSum, 16) > 0
nCheckSum = BITRSHIFT(nCheckSum, 16) + BITAND(nCheckSum, 0x0000FFFF)
ENDDO
RETURN BITAND(BITNOT(nCheckSum), 0x0000FFFF)
ENDFUNC
|
oldbb 在 星期二 五月 12, 2015 2:40 pm 作了第 1 次修改 |
|
回頂端 |
|
|
kalok
註冊時間: 2010-08-26 文章: 284
第 10 樓
|
發表於: 星期二 五月 12, 2015 6:42 am 文章主題: |
|
|
謝謝, 收下來試試 |
|
回頂端 |
|
|
|
|
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
|
|