diff --git a/CameraName.sln b/CameraName.sln new file mode 100644 index 0000000..f10ec13 --- /dev/null +++ b/CameraName.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.6.33723.286 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CameraName", "CameraName\CameraName.csproj", "{15C8F2C5-494F-482B-AEF5-5393B1B1D173}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {15C8F2C5-494F-482B-AEF5-5393B1B1D173}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {15C8F2C5-494F-482B-AEF5-5393B1B1D173}.Debug|Any CPU.Build.0 = Debug|Any CPU + {15C8F2C5-494F-482B-AEF5-5393B1B1D173}.Release|Any CPU.ActiveCfg = Release|Any CPU + {15C8F2C5-494F-482B-AEF5-5393B1B1D173}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {E5D37F30-FAC0-426F-B298-F6D44CA017FF} + EndGlobalSection +EndGlobal diff --git a/CameraName/App.config b/CameraName/App.config new file mode 100644 index 0000000..56efbc7 --- /dev/null +++ b/CameraName/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/CameraName/CameraName.csproj b/CameraName/CameraName.csproj new file mode 100644 index 0000000..5e3a1e2 --- /dev/null +++ b/CameraName/CameraName.csproj @@ -0,0 +1,54 @@ + + + + + Debug + AnyCPU + {15C8F2C5-494F-482B-AEF5-5393B1B1D173} + Exe + CameraName + CameraName + v4.7.2 + 512 + true + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/CameraName/Program.cs b/CameraName/Program.cs new file mode 100644 index 0000000..a7ca689 --- /dev/null +++ b/CameraName/Program.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Management; + + +namespace CameraName { + internal class Program { + static void Main(string[] args) { + GetCameraNames().ToList().ForEach(c => Console.WriteLine(c)); + var queryName = "C615"; + Console.WriteLine($"{queryName} ID = {GetCameraIndex(queryName)}"); + Console.ReadLine(); + } + + /// + /// カメラ名一覧の取得 + /// + /// カメラ名一覧 + 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; + } + } +} diff --git a/CameraName/Properties/AssemblyInfo.cs b/CameraName/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..59b6630 --- /dev/null +++ b/CameraName/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// アセンブリに関する一般的な情報は、次の方法で制御されます。 +// 制御されます。アセンブリに関連付けられている情報を変更するには、 +// これらの属性値を変更します。 +[assembly: AssemblyTitle("CameraName")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("CameraName")] +[assembly: AssemblyCopyright("Copyright © 2023")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// ComVisible を false に設定すると、このアセンブリ内の型は COM コンポーネントから +// 参照できなくなります。COM からこのアセンブリ内の型にアクセスする必要がある場合は、 +// その型の ComVisible 属性を true に設定します。 +[assembly: ComVisible(false)] + +// このプロジェクトが COM に公開される場合、次の GUID が typelib の ID になります +[assembly: Guid("15c8f2c5-494f-482b-aef5-5393b1b1d173")] + +// アセンブリのバージョン情報は次の 4 つの値で構成されています: +// +// メジャー バージョン +// マイナー バージョン +// ビルド番号 +// リビジョン +// +// すべての値を指定するか、次を使用してビルド番号とリビジョン番号を既定に設定できます +// 既定値にすることができます: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")]