私はDelphiで簡単なプログラムを作成しています.2つのパラメータを使用してCOMポート経由で文字を送信します.最初のパラメータはポート番号で、2番目のパラメータは送信される文字です. したがって、p.exeとして保存すると、「p.exe 20 A」はCOM20を介して「A」を送信します。
try
PhoneNumber := ParamStr(2);
if(StrToInt(ParamStr(1))>=10)then
CommPort := '\\.\COM'+ParamStr(1)
else
CommPort := 'COM'+ParamStr(1);
hCommFile := CreateFile(PChar(CommPort),
GENERIC_WRITE,
0,
nil,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0);
if hCommFile=INVALID_HANDLE_VALUE then begin
ShowMessage('Unable to open '+ CommPort);
end;
if WriteFile(hCommFile, PChar(PhoneNumber)^, Length(PhoneNumber),NumberWritten, nil)=false then
showmessage('Unable to send');
PurgeComm(hCommFile,PURGE_TXCLEAR);
FlushFileBuffers(hCommFile);
CloseHandle(hCommFile);
Application.Terminate;
except
PurgeComm(hCommFile,PURGE_TXCLEAR);
FlushFileBuffers(hCommFile);
Application.Terminate;
end;
また、同じ COM 番号 baudrate=9600、flow_control=none でハイパーターミナルを使用しても、同じ結果が得られます。キャラクターはうまく送信されました。問題は、Windows XP にログオンするたびに次の手順を実行する前にプログラム (p.exe) を実行できないことです。指定された COM にハイパーターミナル経由で接続し、切断します。その後、実行可能ファイルを実行できます。そうしないと、同じ COM でハイパーターミナルの 2 つのセッションを実行するのと同じように、機能しません。誰もこれについてヒントを得ましたか?コードで何か見逃していませんか?