查詢計算機上可用埠的兩種方法

2021-10-07 20:27:49 字數 2365 閱讀 4559

在裝置遠端控制中,經常需要搜尋裝置上已安裝埠號,例如在「計算機」→「裝置」能看到的埠(com和lpt)。本文介紹的兩種方法都是通過訪問登錄檔實現的。

方法一:僅查詢埠號,如:com1、com2等

hkey hkey;

lpctstr lpsubkey = _t("hardware\\devicemap\\serialcomm\\");

long retopen = (::regopenkeyex(hkey_local_machine, lpsubkey, 0, key_read, &hkey));

if(retopen == error_success) //開啟成功,列舉串口號

}else if(error_file_not_found == retopen)

else

regclosekey(hkey); //不再需要使用hkey時,應關閉它。

方法二:利用api函式setupdigetclassdevs,獲得埠號和埠名稱

1、將c:\program files (x86)\microsoft sdks\windows\v7.1a\lib(setupapi.lib)和c:\program files (x86)\microsoft sdks\windows\v7.1a\include(setupapi.h) 直接複製到工程目錄下面。(路徑可能會有不同) 2、

新增:      

#include #pragma comment(lib, "setupapi.lib")
3、

//guid_devclass_ports 埠(com 和 lpt)的guid值,查詢登錄檔可以獲得

//登錄檔中路徑:hkey_local_machine\system\controlset001\control\class下

guid classguid = };

hdevinfo hdevinfo = setupdigetclassdevs(&classguid,

null,

null,

digcf_present); //之返回當前存在的裝置

if (hdevinfo)

; for (dword idevindex = 0; setupdienumdeviceinfo(hdevinfo, idevindex, &spdevinfo); idevindex++)

; if (setupdigetdeviceregistryproperty(hdevinfo, &spdevinfo, spdrp_friendlyname,

null, (pbyte)szname, sizeof(szname), null))

}setupdidestroydeviceinfolist(hdevinfo);

}

擴充套件:

hdevinfo

setupdigetclassdevs(

const guid* classguid,

pctstr enumerator,

hwnd hwndparent,

dword flags

);

pguid  classguid在建立裝置列表的時候提供乙個指向guid的指標。如果設定了標誌(引數flags的值)為digcf_allclasses,則這個引數可以忽略,且列表結果中包括所有已經安裝的裝置類別。

pctstr  enumerator

提供包含裝置例項的列舉登錄檔分支下的鍵名,可以通過它獲取裝置資訊。如果這個引數沒有指定,則要從整個列舉樹中獲取所有裝置例項的裝置資訊。

hwnd  hwndparent

提供頂級視窗的控制代碼,所有使用者介面可以使用它來與成員聯絡。

dword  flags

提供在裝置資訊結構中使用的控制選項。可以是以下數值:

digcf_present——只返回當前存在的裝置。

digcf_allclasses——返回所有已安裝的裝置。如果這個標誌設定了,classguid引數將被忽略。

digcf_profile—— 只返回當前硬體配置檔案中的裝置。

digcf_inte***cedevice—— 返回所有支援的裝置。

digcf_default——只返回與系統預設裝置相關的裝置。

列表查詢的兩種方法

列表查詢 從列表中查詢指定元素 輸入 列表 待查詢元素 輸出 元素下標或未找到元素 二分查詢 1.順序查詢 時間複雜度為o n def linear search data set,value for i in range len data set if value data set i retur...

獲取系統當前可用串列埠的兩種方法

進行串列埠通訊之前,需要獲取當前系統的可用串列埠。要想達到此目的,有兩種方式,讀取登錄檔和使用createfile函式輪詢讀取串列埠。1.使用createfile輪詢讀取串列埠 1 uint ccomdebugtooldlg getserialportstate 217 else 1821 clos...

ORACLE 遞迴查詢的兩種方法。

1.我們建乙個表 test2 舉例說明 oracle 遞迴查詢的兩種方法。資料結構如下 2.我們的目標是查詢a1下面所有的子節點和所處層級。a.通用做法 寫乙個遞迴sql 如下 select t.level from test2 t start with t.father a1 connect by...