• 教程 | 设备查找类CxDeviceFind & CxDeviceMapFind


    CxDeviceFind的使用如下:

    void CUsbScannerDlg::SearchDevice(LPGUID lpguidDev)
    {
        m_list1.ResetContent();
    
        HANDLE hDevice;
        TCHAR szPath[MAX_PATH] = {0};
        GUID guidCls;
        CxDeviceFind finder;
        BOOL bRet = finder.FindDevice(lpguidDev);
        while (bRet)
        {
            finder.GetDevicePath(szPath);
            m_list1.AddString(szPath);
    
            hDevice = CreateFile(szPath, GENERIC_READ | GENERIC_WRITE, 0,
                                    NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);
            if (hDevice != INVALID_HANDLE_VALUE)
            {
                CloseHandle(hDevice);
                m_list1.AddString(_T("Can be open"));
            }
            else
                m_list1.AddString(_T("Can not be open"));
            
            finder.GetDeviceFriendlyName(szPath);
            m_list1.AddString(szPath);
            
            finder.GetDeviceLocationInfo(szPath);
            m_list1.AddString(szPath);
            
            finder.GetDeviceDescription(szPath);
            m_list1.AddString(szPath);
            
            finder.GetDeviceHardwareID(szPath);
            m_list1.AddString(szPath);
            
            finder.GetDeviceInstanceID(szPath);
            m_list1.AddString(szPath);
            
            finder.GetClassGuid(&guidCls);
            sprintf(szPath, "guid_cls[%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x]",
                guidCls.Data1, guidCls.Data2, guidCls.Data3,
                guidCls.Data4[0], guidCls.Data4[1], guidCls.Data4[2], guidCls.Data4[3],
                guidCls.Data4[4], guidCls.Data4[5], guidCls.Data4[6], guidCls.Data4[7]);
            m_list1.AddString(szPath);
            
            m_list1.AddString("");
            m_list1.AddString("-->Next<--");
            bRet = finder.FindNextDevice();
        }
        finder.Close();
    }

    然后在需要的地方调用此函数,例如:

    void CUsbScannerDlg::OnBtnUsb() 
    {
        // TODO: Add your control notification handler code here
        GUID guid = GUID_DEVINTERFACE_USB_DEVICE;
        SearchDevice(&guid);
    }

    其中 GUID guid 可以是以下多种设备类型的GUID
    GUID_DEVINTERFACE_USB_DEVICE

    GUID_DEVINTERFACE_COMPORT

    GUID_DEVINTERFACE_PARALLEL

    GUID_BTHPORT_DEVICE_INTERFACE

    等等,更多设备类型的GUID可参见MSDN。

    CxDeviceMapFind的使用如下:

    int xApi::GetInstalledSerialPort(LPBYTE lpbtPort, int nMaxCount)
    {
        int nPrefixLen = lstrlen(_T("COM")), nSerialPort, i = 0, j = 0;
        TCHAR szPath[MAX_PATH] = {0};
    CxDeviceMapFind dev_map_find; GUID guid
    = GUID_DEVINTERFACE_COMPORT; BOOL bRet = dev_map_find.FindDeviceMap(&guid); while (bRet) { dev_map_find.GetDevicePath(szPath); if (lstrlen(szPath) > nPrefixLen) { nSerialPort = _ttoi(&szPath[nPrefixLen]); if (i < nMaxCount) lpbtPort[i++] = nSerialPort; j++; } bRet = dev_map_find.FindNextDeviceMap(); } dev_map_find.Close(); return j; }

    然后在需要的地方调用此函数,例如:

    void CCaloricControllerDlg::OnDropdownCmbSerial() 
    {
        // TODO: Add your control notification handler code here
        m_cmbSerial.ResetContent();
        CString str;
        BYTE btPort[MAXBYTE];
        int nCount = xApi::GetInstalledSerialPort(btPort, MAXBYTE);
        m_cmbSerial.ResetContent();
        for (int i=0; i<nCount; i++)
        {
            str.Format(_T("COM%d"), (int)btPort[i]);
            m_cmbSerial.AddString(str);
        }    
    }

    目前CxDeviceMapFind只支持以下GUID

    GUID_DEVINTERFACE_COMPORT

    GUID_DEVINTERFACE_PARALLEL

      精练的代码不需要过多解释,你们懂的。To be continued...

    下载

    libComm - v1.2 For WinXP/Win7

  • 相关阅读:
    TC79
    SQL TUNNING
    Oracle PLSQL
    DB String Split sample
    dw websites
    Load xlsx in a folder to RDBMS table with Talend
    Reading WebSites
    SQOOP Load Data from Oracle to Hive Table
    dotnet use regex two samples
    Excel scientific notation issue
  • 原文地址:https://www.cnblogs.com/EdmundDwyane/p/3187226.html
Copyright © 2020-2023  润新知