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; + } } }