using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Diagnostics;
using System.Management;
namespace ISCamRecorder {
internal static class Program {
/// <summary>
/// アプリケーションのメイン エントリ ポイントです。
/// </summary>
[STAThread]
static void Main() {
//ミューテックス作成
Mutex app_mutex = new Mutex(false, "ISCamRecorder_Mutex");
//ミューテックスの所有権を要求する
if (app_mutex.WaitOne(0, false) == false) {
MessageBox.Show("本ソフトウェアは複数起動できません。");
return;
}
// 起動
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
}
}
// 共通クラス
public static class Common {
/// <summary>
/// 時刻付きデバッグ出力
/// </summary>
/// <param name="msg"></param>
public static void DebugOut(string msg) {
var now = DateTime.Now;
var timeStr = String.Format("{0:HH:mm:ss.fff}", now);
Debug.WriteLine($"[{timeStr}] {msg}");
}
/// <summary>
/// カメラ名一覧の取得
/// </summary>
/// <returns>カメラ名一覧</returns>
public static IEnumerable<string> 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<ManagementObject>().OrderBy(n => n["PDO"])) {
var name = device["FriendlyName"]?.ToString()
?? device["DeviceName"]?.ToString()
?? device["Description"]?.ToString() ?? "";
yield return name;
}
}
/// <summary>
/// カメラIDの取得
/// </summary>
/// <param name="cameraName">検索するカメラ名</param>
/// <param name="fullMatch">完全一致フラグ</param>
/// <returns>カメラID,見つからない時は-1</returns>
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;
}
}
}