|
在 Windows 環境下偵測 Serial Port / COM Port 的方法如下可透 Win32 API 和下述的範例程式達成。 |
|---|
Sample Code
在寬字元或者 UNICODE 的情況下,程式碼如下:
#include <iostream>
#include <string>
#include <Windows.h>
#include <windef.h>
#include <atlstr.h>
bool QueryComPort() //added function to find the present serial
{
wchar_t lpTargetPath[5000]; // buffer to store the path of the COMPORTS
bool gotPort = false; // in case the port is not found
for (int i = 0; i < 255; i++) // checking ports from COM0 to COM255
{
std::wstring str = L"COM" + std::to_wstring(i); // converting to COM0, COM1, COM2
DWORD test = QueryDosDevice(str.c_str(), lpTargetPath, 5000);
// Test the return value and error if any
if (test != 0) //QueryDosDevice returns zero if it did not find an object
{
std::wcout << str << ": " << lpTargetPath << std::endl;
gotPort = true;
}
if (::GetLastError() == ERROR_INSUFFICIENT_BUFFER)
{
}
}
return gotPort;
}
若非寬字元或者 UNICODE 環境,須將 std::wstring 置換成 std::string,並且以單字元模式進行撰寫。
No comments:
Post a Comment