Windows 7 x64のシリアルポートCOM1に接続されたIRレシーバーでWinLIRCを使用しています。WinLIRCはスタートアップ フォルダ ([スタート] -> [すべてのアプリケーション] -> [スタートアップ]) に追加されるため、ログインするたびに開始されます。非常に頻繁に (常にではありませんが) からWinLIRCの初期化エラー メッセージが表示され、しばらくの間 (数分間) 続きます。初期化を再試行すると、何回か再試行した後、正しく初期化され、正常に動作します。スタートアップから削除して手動で起動すると、エラーなしで起動します。
ソースをダウンロードし、あちこちに呼び出しWinLIRCを追加MessageBoxしたので、初期化中に何が起こるかを確認でき、CreateFile呼び出しが失敗することがわかりました。
if((hPort=CreateFile(
settings.port,GENERIC_READ | GENERIC_WRITE,
0,0,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,0))==INVALID_HANDLE_VALUE)
{
char buffer[256];
sprintf_s(buffer, "CreateFile(%s) failed with %d", settings.port, GetLastError());
MessageBox(NULL, buffer, "debug", MB_OK);
hPort=NULL;
return false;
}
「CreateFile(COM1) failed with 5」というメッセージ ボックスが表示されます。このリンクによると、5 は「アクセスが拒否されました」エラーのエラー コードです。
問題は、Windows の起動直後に COM ポートを開くと、このようなエラーで失敗し、数秒または数分後に正常に進むことができるのはなぜですか?
更新:COMポートは本物です。
Update2 : 以前にシリアルポートを開く他のアプリケーションについてWinLIRC。私は次のことを行いました: Process Explorerを Startup フォルダーに配置して、ログイン時にも起動し、再起動しました。プロセス エクスプローラーが起動するとすぐに、[ハンドルまたは Dll の検索] ダイアログを実行し、入力に「Serial0」を入力して [検索] をクリックしました。その時点で、WinLIRC は既に「CreateFile(COM1) failed with 5」というメッセージ ボックスを表示していました。次に、プロセス エクスプローラーの検索が終了するまで待って、何も見つからないことを確認してから、WinLIRC の再初期化を試みましたが、再び失敗しました。したがって、シリアルポートが他のアプリケーションによって開かれている場合ではないことをお勧めします。誰かがそれを確認するためのより良い方法を提案できる場合は、喜んで再確認します.
WinLIRCの実行中にプロセスエクスプローラーで「Serial0」を検索すると、winlirc.exeプロセスが見つかったので、検索するのに正しい用語のようです。
Update3 : シリアルマウスドライバーについて。デバイス マネージャーに表示されていないため、そこで無効にすることはできませんでしたが、サービスを無効にする方法に関するこのsermouse手順を見つけましたが、役に立ちませんでした。
Update4 : もう 1 つ言い忘れました。PCを起動してすぐにログインした場合にのみ発生します。Windows をログイン画面で数分間放置し、後でログインすると、WinLIRC は常に問題なく初期化されます。
Update5 : 残念ながら、この問題が再現されたコンピューターにアクセスできないため、これ以上実験することはできません。