我正在使用WinLIRC,IR 接收器连接到 Windows 7 x64 上的串行端口 COM1。WinLIRC
已添加到启动文件夹(开始->所有应用程序->启动),因此每次我登录时都会启动。我经常(但不是一直)看到来自 的初始化错误消息WinLIRC
,这些消息会持续一段时间(几分钟)如果我重试初始化,并且在重试后它会正确初始化并且工作正常。如果我从 Startup 中删除它并在任何其他时刻手动启动它会毫无错误地启动。
我已经下载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 是“Access denied”错误的错误代码。
所以问题是为什么在启动 Windows 后打开 COM 端口会失败并出现此类错误,并在几秒钟或几分钟后正常进行?
更新:COM 端口是真实的。
Update2:关于之前打开串口的其他应用程序WinLIRC
。我做了以下事情:我将Process Explorer放到 Startup 文件夹中,这样它也会在登录时启动,然后重新启动。进程资源管理器一启动,我就运行“查找句柄或 Dll”对话框,将“Serial0”放入输入并点击“搜索”。到那时 WinLIRC 已经显示消息框说“CreateFile(COM1) failed with 5”。然后我等到进程资源管理器搜索结束,发现它什么也没找到,然后尝试重新初始化 WinLIRC,它又失败了。所以我建议不是串口被其他应用程序打开的情况。如果有人可以提出更好的检查方法,我会很乐意重新检查。
当我在 WinLIRC 运行时在进程资源管理器中搜索“Serial0”时,它会找到该winlirc.exe
进程,因此看起来它是正确的搜索词。
Update3:关于串行鼠标驱动程序。它未在设备管理器中列出,因此我无法在此处禁用它,但是我找到了有关如何禁用sermouse
服务的说明,但没有帮助。
Update4:还有一件事我忘了提。仅当我在启动 PC 后不久登录时才会发生这种情况。如果我让窗口在登录屏幕上停留几分钟然后再登录,那么 WinLIRC 初始化总是没有任何问题。
Update5:不幸的是,我无法访问出现此问题的计算机,因此我无法再进行实验。