static PyObject * winutil_is_usb_device_connected(PyObject *self, PyObject *args) { unsigned int vid, pid; HDEVINFO hDevInfo; DWORD i; BOOL iterate = TRUE; LPWSTR buffer; int found = FALSE; PyObject *ans; if (!PyArg_ParseTuple(args, "ii", &vid, &pid)) { return NULL; } // Create a Device information set with all USB devices hDevInfo = create_device_info_set(NULL, L"USB", 0, DIGCF_PRESENT | DIGCF_ALLCLASSES); if (hDevInfo == INVALID_HANDLE_VALUE) return NULL; // Enumerate through the set for (i=0; iterate && !found; i++) { buffer = get_registry_property(hDevInfo, i, SPDRP_HARDWAREID, &iterate); if (buffer == NULL) { PyErr_Print(); continue; } found = check_device_id(buffer, vid, pid); PyMem_Free(buffer); } // for SetupDiDestroyDeviceInfoList(hDevInfo); ans = (found) ? Py_True : Py_False; Py_INCREF(ans); return ans; }
static PyObject * winutil_get_usb_devices(PyObject *self, PyObject *args) { unsigned int j; size_t buffersize; HDEVINFO hDevInfo; DWORD i; BOOL iterate = TRUE; PyObject *devices, *temp = (PyObject *)1; LPWSTR buffer; BOOL ok = 1; if (!PyArg_ParseTuple(args, "")) return NULL; devices = PyList_New(0); if (devices == NULL) {PyErr_NoMemory(); return NULL;} // Create a Device information set with all USB devices hDevInfo = create_device_info_set(NULL, L"USB", 0, DIGCF_PRESENT | DIGCF_ALLCLASSES); if (hDevInfo == INVALID_HANDLE_VALUE) { Py_DECREF(devices); return NULL; } // Enumerate through the set for (i=0; iterate; i++) { buffer = get_registry_property(hDevInfo, i, SPDRP_HARDWAREID, &iterate); if (buffer == NULL) { PyErr_Print(); continue; } buffersize = wcslen(buffer); for (j = 0; j < buffersize; j++) buffer[j] = towlower(buffer[j]); temp = PyUnicode_FromWideChar(buffer, buffersize); PyMem_Free(buffer); if (temp == NULL) { PyErr_NoMemory(); ok = 0; break; } PyList_Append(devices, temp); Py_DECREF(temp); temp = NULL; } //for if (!ok) { Py_DECREF(devices); devices = NULL; } SetupDiDestroyDeviceInfoList(hDevInfo); return devices; }