[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