ホームページ >バックエンド開発 >C++ >Win32 API を使用してデバイスをプログラムで有効または無効にするにはどうすればよいですか?

Win32 API を使用してデバイスをプログラムで有効または無効にするにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-06 02:50:40412ブラウズ

How Can I Programmatically Enable or Disable Devices Using the Win32 API?

Win32 API を使用したプログラムによるデバイスの有効化/無効化

Windows API は、デバイスをプログラム的に有効または無効にする機能を提供し、デバイスを制御できるようにします。ユーザーが開始したアクションまたは自動スクリプト。この記事では、このデバイス管理機能を実現するための Win32 API の使用方法について説明します。

マウス デバイス無効化の特殊性

Win32 API は汎用のデバイス管理を提供しますが、すべてのデバイスがプログラムによる無効化をサポートしているわけではないことに注意することが重要です。特に、タッチパッドを備えたラップトップで使用されるデフォルトのマウス ドライバーは、SetupDi API による無効化をサポートしていません。これは、ハードウェア操作によるポインティング デバイスの誤った切断を防ぐための設計上の考慮事項であると考えられます。

デバイス管理に SetupDi API を使用する

Win32 を使用してデバイスを有効または無効にするには、 SetupDi API ファミリ、具体的には以下を利用します。関数:

  • SetupDiGetClassDevs: 指定されたクラス GUID に一致するすべてのデバイスのデバイス情報セットへのハンドルを取得します。
  • SetupDiEnumDeviceInfo: デバイス情報セット内のデバイスを列挙し、そのプロパティを取得します。
  • SetupDiGetDeviceInstanceId: 取得デバイス インスタンス ID、デバイスの一意の識別子。
  • SetupDiSetClassInstallParams および SetupDiCallClassInstaller: デバイスの有効化または無効化など、デバイスのプロパティを変更するために使用されます。

サンプル実装

以下C# コードは、SetupDi API を使用してデバイスを有効または無効にする方法を示しています。

    public static void EnableDevice(bool enable)
    {
        // Mouse class GUID
        Guid mouseGuid = new Guid("{4d36e96f-e325-11ce-bfc1-08002be10318}");

        // Instance path of the device (e.g., ACPI\PNP0F03&3688D3F&0)
        string instancePath = @"ACPI\PNP0F03&3688D3F&0";

        DeviceHelper.SetDeviceEnabled(mouseGuid, instancePath, enable);
    }

追加の考慮事項

デバイス管理に Win32 API を使用する場合は、次の点に留意してください。以下:

  • デバイス列挙は、指定されたクラスに一致する複数のデバイスを返す場合がありますGUID。インスタンス パスやその他のプロパティに基づいて正しいデバイス インスタンスを識別することが重要です。
  • SetupDi API は、DeviceInfoData などのデータ構造を通じてデバイス プロパティを返します。効果的なデバイス管理のためには、これらの構造のレイアウトと解釈を理解することが重要です。
  • すべてのデバイスがプログラムによる無効化をサポートしているわけではありません。デフォルトのマウス ドライバーなどのデバイスの場合、フィルター ドライバーや WMI などの他の方法が必要になる場合があります。
  • 64 ビット Windows プラットフォームを対象とする場合は、潜在的な互換性の問題を回避するために、アプリケーションが 64 ビット プロセスとして構築されていることを確認してください。

以上がWin32 API を使用してデバイスをプログラムで有効または無効にするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。