シリアルポートの"USB-SERIAL CH340(COM3)"を対になる"COM3"に切り分けたい

実現したいこと

シリアルポートの"USB-SERIAL CH340(COM3)"を対になる"USB-SERIAL CH340"と"COM3"に切り分けたいです。

発生している問題・分からないこと

別のスレッドで"USB-SERIAL CH340"を得る方法を教えていただきました。
https://teratail.com/questions/e783b7x12r346l
そこから、パラメーターを変えて対になる"COM3"を得られないか試してみたのですが、うまくいきませんでした。
しかし、"USB-SERIAL CH340(COM3)"を得る方法が分かりました。
単純に文字列から位置と長さを指定して切り出せるかと思ったのですがうまくいきません。
26行目の「(wchar_t*)」が型を変換してるのかな、くらいの推測はしましたが意味がよく分かりません。
そのため、33行目でエラーになってしまっています。
「PropertyBuffer」を文字列に変換する方法を教えてください。

あと、「SerialPort.GetPortNames メソッド」で"COM3"を得られることはわかっているのですが、
"USB-SERIAL CH340"と対になる順番なのでしょうか?
対にするには、やはり"USB-SERIAL CH340(COM3)"から切り出すしか方法はないのでしょうか?
もっとスマートな方法があれば教えてください。

該当のソースコード

C++

1int getCOMportName()2{3 // コマンドプロンプトに日本語出力(出力しない場合は不要)4 std::wcout.imbue(std::locale("Japanese"));5 6 // 「ポート」のみ取得7 HDEVINFO DeviceInfoSet = SetupDiGetClassDevs(&GUID_DEVCLASS_PORTS, nullptr, nullptr, DIGCF_PRESENT);8 9 SP_DEVINFO_DATA DeviceInfoData{};10 DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);11 unsigned long DeviceIndex = 0;12 13 //std::cout << DeviceInfoSet; // デバッグ14 15 // 「ポート」配下でループ16 while (SetupDiEnumDeviceInfo(DeviceInfoSet, DeviceIndex, &DeviceInfoData))17 {18 DeviceIndex++;19 20 unsigned char PropertyBuffer[512];21 22 // 名前取得23 if (SetupDiGetDeviceRegistryProperty(DeviceInfoSet, &DeviceInfoData, SPDRP_DEVICEDESC,24 nullptr, PropertyBuffer, sizeof(PropertyBuffer), nullptr))25 {26 std::wcout << (wchar_t*)PropertyBuffer << std::endl;27 }28 29 // 試行錯誤30 if (SetupDiGetDeviceRegistryProperty(DeviceInfoSet, &DeviceInfoData, SPDRP_FRIENDLYNAME,31 nullptr, PropertyBuffer, sizeof(PropertyBuffer), nullptr))32 {33 string COMport = (wchar_t*)PropertyBuffer;34 int hidari = COMport.find_last_of('(');35 int migi = COMport.find_last_of(')');36 int nagasa = migi - hidari - 1;37 string COMportName = COMport.substr(hidari + 1, nagasa);38 std::cout << COMportName << std::endl << std::endl;39 }40 }41 42 return TRUE;43}

試したこと・調べたこと

上記の詳細・結果

試行錯誤した結果、上記のソースコードになりました。

補足

Microsoft Visual Studio Community 2022
Version 17.9.6
VisualStudio.17.Release/17.9.6+34728.123

コメントを投稿

0 コメント