diff --git a/ISCamRecorder/Program.cs b/ISCamRecorder/Program.cs
index aeb7900..4527b82 100644
--- a/ISCamRecorder/Program.cs
+++ b/ISCamRecorder/Program.cs
@@ -5,6 +5,7 @@
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Diagnostics;
+using System.Management;
namespace ISCamRecorder {
@@ -33,10 +34,42 @@
// 共通クラス
public static class Common {
+ ///
+ /// 時刻付きデバッグ出力
+ ///
+ ///
public static void DebugOut(string msg) {
var now = DateTime.Now;
var timeStr = String.Format("{0:HH:mm:ss.fff}", now);
Debug.WriteLine($"[{timeStr}] {msg}");
}
+
+ ///
+ /// カメラ名一覧の取得
+ ///
+ /// カメラ名一覧
+ public static IEnumerable GetCameraNames() {
+ var query = @"SELECT * FROM Win32_PnPSignedDriver "
+ + "WHERE DeviceID LIKE 'USB%' AND DeviceClass = 'Camera'";
+ var searcher = new ManagementObjectSearcher(query);
+ foreach (var device in searcher.Get().Cast().OrderBy(n => n["PDO"])) {
+ var name = device["FriendlyName"]?.ToString()
+ ?? device["DeviceName"]?.ToString()
+ ?? device["Description"]?.ToString() ?? "";
+ yield return name;
+ }
+ }
+
+ ///
+ /// カメラIDの取得
+ ///
+ /// 検索するカメラ名
+ /// 完全一致フラグ
+ /// カメラID,見つからない時は-1
+ public static int GetCameraIndex(string cameraName, bool fullMatch = false) {
+ var cameraNames = GetCameraNames().ToList();
+ var index = cameraNames.FindIndex(c => fullMatch ? c.Equals(cameraName) : c.Contains(cameraName));
+ return index;
+ }
}
}