怎么修改此程序
如何修改此程序
------解决方案--------------------
ping通了都有类似下面这种字符串,判断字符串就行了
Pinging www.qq.com [14.17.32.211] with 32 bytes of data:
Reply from 14.17.32.211: bytes=32 time=24ms TTL=54
Reply from 14.17.32.211: bytes=32 time=23ms TTL=54
Reply from 14.17.32.211: bytes=32 time=21ms TTL=54
Reply from 14.17.32.211: bytes=32 time=26ms TTL=54
Ping statistics for 14.17.32.211:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 21ms, Maximum = 26ms, Average = 23ms
------解决方案--------------------
这是种很糟糕的方式,不过不管了,就着你这样改吧
String ExecuteApp(String sCmdline,TStringList *li) // 改传一个字串列表类型
这段改改
do
{
memset(cBuffer,'\0',sizeof(cBuffer));
ret = ::ReadFile(hReadPipe, &cBuffer, 256, &lngBytesRead, 0);
sBuffer=StrPas(cBuffer);
sOutput = sOutput + sBuffer;
li->Text=li->Text+sBuffer; // 把结果保存到这个字串列表li里
//不需要了 Application->ProcessMessages();
} while (ret != 0 );
// TMemo *MyMemo1 也改用 TStringList
String ResultApp(TStringList *li)
{
String sResult;
if(li->Text.AnsiPos("往返行程的估计时间"))
{
sResult = "true";
li->Clear();
如何修改此程序,我只想在memo1中显示true和false(不显示Ping的一大堆结果),Ping通就显示true,否者就显示false。想了很久都没什么头绪,忘大侠们指点。
String ExecuteApp(String sCmdline,TMemo *MyMemo)
{
PROCESS_INFORMATION proc = {0};
long ret;
bool bret;
STARTUPINFO start = {0};
SECURITY_ATTRIBUTES sa = {0};
HANDLE hReadPipe ;
HANDLE hWritePipe;
String sOutput;
String sBuffer;
unsigned long lngBytesRead;
char cBuffer[257];
sa.nLength = sizeof(sa);
sa.lpSecurityDescriptor=0;
sa.bInheritHandle = TRUE;
bret =::CreatePipe(&hReadPipe, &hWritePipe,&sa, 0);
if (!bret)
{
sOutput="CreatePipe failed. Error: " + String(GetLastError());
MyMemo->Lines->Add(sOutput);
return sOutput;
}
start.cb = sizeof(STARTUPINFOA);
start.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
start.hStdOutput = hWritePipe;
start.hStdError = hWritePipe;
start.wShowWindow = SW_HIDE;
sBuffer = sCmdline;
ret =::CreateProcess(0, sBuffer.c_str(), &sa, &sa, TRUE, NORMAL_PRIORITY_CLASS, 0, 0, &start, &proc);
if (ret == 0)
{
sOutput="Bad command or filename";
MyMemo->Lines->Add(sOutput);
return sOutput;
}
::CloseHandle(hWritePipe);
do
{
memset(cBuffer,'\0',sizeof(cBuffer));
ret = ::ReadFile(hReadPipe, &cBuffer, 256, &lngBytesRead, 0);
sBuffer=StrPas(cBuffer);
sOutput = sOutput + sBuffer;
MyMemo->Text=MyMemo->Text+sBuffer;
Application->ProcessMessages();
} while (ret != 0 );
::CloseHandle(proc.hProcess);
::CloseHandle(proc.hThread);
::CloseHandle(hReadPipe);
return sOutput;
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ExecuteApp(Edit1->Text,Memo1);
}
------解决方案--------------------
ping通了都有类似下面这种字符串,判断字符串就行了
Pinging www.qq.com [14.17.32.211] with 32 bytes of data:
Reply from 14.17.32.211: bytes=32 time=24ms TTL=54
Reply from 14.17.32.211: bytes=32 time=23ms TTL=54
Reply from 14.17.32.211: bytes=32 time=21ms TTL=54
Reply from 14.17.32.211: bytes=32 time=26ms TTL=54
Ping statistics for 14.17.32.211:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 21ms, Maximum = 26ms, Average = 23ms
------解决方案--------------------
这是种很糟糕的方式,不过不管了,就着你这样改吧
String ExecuteApp(String sCmdline,TStringList *li) // 改传一个字串列表类型
这段改改
do
{
memset(cBuffer,'\0',sizeof(cBuffer));
ret = ::ReadFile(hReadPipe, &cBuffer, 256, &lngBytesRead, 0);
sBuffer=StrPas(cBuffer);
sOutput = sOutput + sBuffer;
li->Text=li->Text+sBuffer; // 把结果保存到这个字串列表li里
//不需要了 Application->ProcessMessages();
} while (ret != 0 );
// TMemo *MyMemo1 也改用 TStringList
String ResultApp(TStringList *li)
{
String sResult;
if(li->Text.AnsiPos("往返行程的估计时间"))
{
sResult = "true";
li->Clear();