セットアップAPIを使用してデバイスを有効または無効にする方法を知っています。私が知る必要があるのは、この同じAPIを使って、デバイスが有効か無効かを判断できますか? Microsoftのdevconがハードウェアの操作にセットアップAPIを使用し、デバイスが有効か無効か(デバイスマネージャと同じように)、そのプログラムがあなたに通知するため、実際の問題は本当に問題になると思います。これはどうですか?この時点までのセットアップAPIメソッドの私の研究は、明確な答えを示していません。 MSからこのAPIを使用以上の中に持っているアンディセットアップAPIを使用して、デバイスが有効になっているかどうかを確認できます。
答えて
は、理解し、最悪の文書化。オリジナルの投稿で述べたように、セットアップAPIを使用してハードウェアを有効/無効にすることができます。だから、私は少し時間がかかり、最終的にハードウェアの状態を確認する方法をコミュニティに提供すると考えました。
したがって、短い答え:セットアップAPIからこれを実行しないでください。もちろん、これは理にかなっています。結局のところ、セットアップAPIを使用してデバイスの状態、つまり有効または無効を変更できるため、デバイスの現在の状態を判断するためには全く異なるAPIを使用する必要があります。ここで、Configuration Manager 32 APIを入力します。ハードウェアを有効/無効にするには、セットアップAPIを使用する必要がありますが、ハードウェアの状態を把握するには、ConfigMgr 32 API(#include cfgmgr32.h)を使用する必要があります。理にかなっているよね?
これを行う方法は他にもあるかもしれませんが、ここで行ったことがあります。
#include <Windows.h>
#include <cstdlib>
#include <setupapi.h>
#include <cfgmgr32.h>
GUID driveGuid = {0x4d36e967, 0xe325, 0x11ce, {0xbf, 0xc1, 0x08, 0x00, 0x2b, 0xe1, 0x03, 0x18}};
// first, get a list of hardware you're interested in using Setup API
HDEVINFO hDevs(SetupDiGetClassDevs(&driveGuid, NULL, NULL, DIGCF_PRESENT));
if(INVALID_HANDLE_VALUE == hDevs)
{
throw std::runtime_error("unable to build a list of hardware");
}
// this struct has the dev instance ID that the CFG MGR API wants. The struct must be
// must be inited to the size of the struct, the cbSize member, all others should be 0
SP_DEVINFO_DATA devInfo = {sizeof(SP_DEVINFO_DATA)};
DWORD index(0);
LONG devStatus(0), devProblemCode(0);
char devId[256];
memset(devId, 0, 256)
while(SetupDiEnumDeviceInfo(hDevs, index++, &devInfo))
{
// use Config Mgr to get a nice string to compare against
CM_Get_Device_ID(devInfo.DevInst, devId, 256, 0);
// use whatever mechanism you like to search the string to find out
// if it's the hardware you're after
if((std::string(devId)).find("MyHardware") != std::string::npos)
{
// goody, it's the hardware we're looking for
CM_Get_DevNode_Status(&devStatus, &devProblemCode, devInfo.DevInst, 0);
// if the call to getting the status code was successful, do something
// meaningful with the data returned. The fun part of this is that the
// return codes aren't really documented on MSDN. You'll have to look
// through the CfgMgr32.h file. Incidentally, these values are what
// are shown in the Device Manager when you look at the device's status.
}
}
SetupDiDestroyDeviceInfoList(hDevs);
あなたはhereを発見したリストを検索することによって、後にしているハードウェアのGUIDを把握する必要があります。これらのうちのいくつかは、少なくとも、さまざまなWindowsヘッダーで事前定義されています。しかし、この時点で、私はごくわずかしか知りませんが、偶然にそれらに遭遇しました。上記で使用機能に
関連リンク: SetupDiDestroyDevieInfoList CM_Get_DevNode_Status CM_Get_Device_ID SetupDiEnumDeviceInfo SetupDiGetClassDevs SP_DEVINFO_DATA
私は、これは誰かに役立ちます願っています。
- 1. ExternalInterface.availableを使用して、JavaScriptが有効になっているかどうかを確認できますか?
- 2. デバイス上でブルートゥースが有効になっているかどうかを確認する方法
- 3. デバイスでSmartLockが有効になっているかどうかを確認する方法
- 4. iOSデバイスでPINコードが有効になっているかどうかを確認する方法
- 5. レプリケーションが有効になっているかどうかを確認
- 6. ウィジェットが有効になっているかどうかを確認
- 7. ASP.NETセッションが有効になっているかどうかを確認
- 8. Azure AD REST APIでMFAが有効になっているかどうかを確認する
- 9. デバッグ情報が有効になっているかどうかを確認できますか?
- 10. Google APIクライアントのOAuth2アクセストークンが有効かどうかを確認してから使用してください。
- 11. ボタンが無効になっているかどうかを確認します。
- 12. 飛行機モードがiPhoneで有効になっているかどうかを確認しますか?
- 13. PowerShellを使用してHyper-Vが有効になっているかどうかを確認するにはどうすればよいですか?
- 14. ユーザがページリロードなしでPHPで有効になっているCookieを持っているかどうか確認できますか?
- 15. jQueryプラグインを使用してユーザー名が有効かどうかを確認
- 16. カレンダーを使用して日付が有効かどうかを確認
- 17. ネットワークロケーションプロバイダが有効になっているかどうかを確認する方法はありますか?
- 18. PHPがJavaを有効にしているかどうかを確認することができます
- 19. Pylonsアプリケーションでデバッグが有効になっているかどうか確認してください
- 20. JavaScriptがFirefoxでトラッキング保護を有効にしているかどうかを確認できますか?
- 21. デバイスでFlashが有効になっているかどうか、Modernizrスタイル
- 22. ユーザーがページをJS APIで好きになっているかどうかを確認しますか?
- 23. Xamarin iOS:通知音が有効になっているかどうかを確認します。
- 24. VBScript - ファイアウォールが有効になっているかどうかを確認します
- 25. tomcatを使用するHTTP REQUESTが有効なリクエストであるかどうかを確認できますか?
- 26. どのようなcssホバー状態が有効になっているかを確認してください
- 27. WebSphereでLDAP認証が有効になっているかどうかを確認
- 28. jqueryを使用してテキストボックスが無効になっているかどうかを確認
- 29. コントローラでボタンが有効かどうかを確認します
- 30. Dropbox APIには、ユーザーのリストをプルしてMFAが有効になっているかどうかを確認する方法がありますか?
「有効」と「無効」を判別するために使用するフラグは何ですか? 'DN_STARTED'は十分ですか? – AlexS
私はこれ(2012年)に取り組んでからしばらく時間がありました。ヘッダーファイル(実際にはcfg.h)とメモリのクイックチェックでは、「有効」または「無効」にはDN_STARTEDで十分であると表示されます。実際には、このコンテキストでは、「有効」とは単に、このデバイスのドライバが起動したことを意味します。「無効」とは、このデバイスのドライバが起動していないことを意味します。 –