[Windows]Need an example: How to read and list names of USB devices via Windows API without using Utilities
WebFreak001
d.forum at webfreak.org
Fri May 29 09:31:58 UTC 2020
On Friday, 29 May 2020 at 09:04:30 UTC, WebFreak001 wrote:
> [...]
I realized it may be useful to have a much more complete example,
so replace the while (true) loop in my first code with this to
get much more information dumped:
while (true)
{
enumerator.Next(WBEM_INFINITE,
1, &clsobj, &ureturn);
if (!ureturn)
break;
scope (exit)
clsobj.Release();
BSTR name;
VARIANT vtProp;
printf("\nEntry:\n");
clsobj.BeginEnumeration(0);
while (true)
{
enum WBEM_S_NO_MORE_DATA = 0x40005;
if (clsobj.Next(0, &name, &vtProp, null,
null) == WBEM_S_NO_MORE_DATA)
break;
printf("\t%ls: ", name);
SysFreeString(name);
switch (vtProp.vt)
{
case VARENUM.VT_EMPTY:
printf("<empty>\n");
break;
case VARENUM.VT_NULL:
printf("null\n");
break;
case VARENUM.VT_VOID:
printf("void\n");
break;
case VARENUM.VT_I1:
printf("byte: %d\n",
cast(int) vtProp.bVal);
break;
case VARENUM.VT_UI1:
printf("ubyte: %d\n",
cast(int) vtProp.bVal);
break;
case VARENUM.VT_UI2:
printf("ushort: %d\n",
cast(int) vtProp.iVal);
break;
case VARENUM.VT_UI4:
case VARENUM.VT_UINT:
printf("uint: %u\n",
cast(uint) vtProp.intVal);
break;
case VARENUM.VT_I8:
printf("long: %ld\n",
cast(long) vtProp.llVal);
break;
case VARENUM.VT_UI8:
printf("ulong: %lu\n",
cast(ulong) vtProp.llVal);
break;
case VARENUM.VT_I2:
printf("short: %d\n",
cast(int) vtProp.iVal);
break;
case VARENUM.VT_I4:
case VARENUM.VT_INT:
printf("int: %d\n", vtProp.intVal);
break;
case VARENUM.VT_R4:
printf("float: %f\n", vtProp.fltVal);
break;
case VARENUM.VT_R8:
printf("double: %f\n", vtProp.dblVal);
break;
case VARENUM.VT_CY:
printf("currency: %ld\n",
vtProp.cyVal.int64);
break;
case VARENUM.VT_DATE:
printf("date: %lf\n", vtProp.date);
break;
case VARENUM.VT_BSTR:
printf("bstr: %ls\n", vtProp.bstrVal);
break;
case VARENUM.VT_BOOL:
if (vtProp.boolVal)
printf("true\n");
else
printf("false\n");
break;
default:
printf("<type %d>\n", vtProp.vt);
break;
}
VariantClear(&vtProp);
}
clsobj.Get("Name", 0, &vtProp, null, null);
if (vtProp.vt == VARENUM.VT_BSTR)
printf("\tName: %ls\n", vtProp.bstrVal);
}
More information about the Digitalmars-d-learn
mailing list