本文整理自网络,侵删。
发起进程:创建管道,发送数据,接受反馈数据
Const PipeName = '\\.\pipe\Test'; PipeSize = 1000; PipeTimeOut = 3000; procedure PipeServer(); var Se:TSecurityAttributes; SPipeHandle:THandle; Buffer:Pchar; WriteBuffer:DWORD; begin Se.nLength:=Sizeof(TSecurityAttributes); Se.lpSecurityDescriptor:=nil; Se.bInheritHandle:=True; SPipeHandle:=CreateNamedPipe(PipeName, PIPE_ACCESS_DUPLEX OR FILE_FLAG_WRITE_THROUGH, PIPE_TYPE_BYTE or PIPE_WAIT, 1,PipeSize,PipeSize,PipeTimeOut,@Se); Buffer:=AllocMem(1000); if SPipeHandle<> 0 then begin while True do begin if ConnectNamedPipe(SPipeHandle,nil) then begin Buffer:=PChar(IntToStr(GetTickCount)); //写入数据 WriteFile(SPipeHandle,Buffer[0],Length(Buffer),WriteBuffer,nil); Sleep(500); //等待反馈数据 ReadFile(SPipeHandle,Buffer[0],PipeSize,WriteBuffer,nil); DisConnectNamedPipe(SPipeHandle); end; Sleep(2000); end; CloseHandle(SPipeHandle); end; FreeMemory(Buffer); end;
监听进程:接受数据,反馈数据
Const PipeName = '\\.\pipe\Test'; PipeSize = 1000; procedure PipeClient(); var Buffer:Array [0..1000] of Char; Requst:PChar; ReadSize:DWORD; hPipe:Thandle; begin while True do begin if WaitNamedPipe(PipeName,NMPWAIT_WAIT_FOREVER) then begin hPipe:=CreateFile(PipeName,GENERIC_READ or GENERIC_WRITE,FILE_SHARE_READ or FILE_SHARE_WRITE,NiL, OPEN_EXISTING,FILE_ATTRIBUTE_ARCHIVE or FILE_FLAG_WRITE_THROUGH, 0); if hPipe <> INVALID_HANDLE_VALUE then begin ReadSize:=0; ReadFile(hPipe,Buffer[0],PipeSize,ReadSize,nil); if ReadSize > 0 then begin //收到数据 Requst:= Pchar(Format('%s OK',[Buffer])); //写入反馈 WriteFile(hPipe,Requst[0],Length(Requst),ReadSize,nil); end; CloseHandle(hPipe); end; end; end; end;
相关阅读 >>
Delphi getprocessidentity 获取当前登录状态的管理员
Delphi strtofloat 将“字符型”转换成“浮点型”
更多相关阅读请进入《Delphi》频道 >>