⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 enumser.htm

📁 enumser是扫描电脑端口的一个好工具
💻 HTM
字号:
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>EnumSerialPorts v1.16</title>
<link rel="stylesheet" type="text/css" href="./naughter.css">
</head>

<body>

<h2 align="left"><img src="enumser.gif" width="32" height="32">EnumSerialPorts 
v1.16</h2>
<p>Welcome to EnumSerialPorts, A simple set of MFC/ATL functions to enumerate the serial 
ports installed on your machine.</p>
<p>&nbsp;</p>
<table>
	<tr>
		<td><a href="#Features">Features</a></td>
	</tr>
	<tr>
		<td><a href="#Usage">Usage</a></td>
	</tr>
	<tr>
		<td><a href="#Copyright">Copyright</a></td>
	</tr>
	<tr>
		<td><a href="#History">History</a></td>
	</tr>
	<tr>
		<td><a href="#APIReference">API Reference</a></td>
	</tr>
	<tr>
		<td><a href="#Contact">Contacting the Author</a></td>
	</tr>
</table>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2><a name="Features"></a>Features</h2>
<ul>
	<li>Simple C++ class interface.</li>
	<li>The code works on both Windows 95/98, NT, 2000, XP, 2003 and Vista.</li>
	<li>The code is fully Unicode compliant and include Unicode built options in 
	the workspace file.</li>
	<li>Can be compiled with or without MFC support. If you do not want MFC 
	support, then the code falls back to using the ATL CSimpleArray classes. 
	Please note that this non MFC mode requires a recentish copy of Visual 
	Studio and will not support Visual C++ 6.0 as the code makes use of the ATL 
	CString class.</li>
</ul>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2><a name="Usage"></a>Usage</h2>
<ul>
	<li>To use the functions in your code simply include enumser.cpp in your project 
	and #include enumser.h in which ever of your modules needs to make calls to 
	the function.</li>
  <li>You will need an up to date Platform SDK installed to compile the code if 
	you are using an older compiler such as Visual C++ 6 (February 2003 was the 
	last version which was compatible with VC 6). For further information on 
	this, please see my blog entry from April 14 2007 titled &quot;Common problems 
	compiling my code&quot; at <a href="http://naughter.spaces.live.com/blog/">
	http://naughter.spaces.live.com/blog/.</a> Also note that on this older 
	compiler you will only be able to use the MFC mode of the class.</li>
	<li>Your code will need to include MFC either statically or dynamically.</li>
	<li>To see the class in action, have a look at the main function in the module 
	&quot;main.cpp&quot;.</li>
</ul>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2><a name="Copyright"></a>Copyright</h2>
<ul>
	<li>You are allowed to include the source code in any product (commercial, shareware, 
	freeware or otherwise) when your product is released in binary form.</li>
	<li>You are allowed to modify the source code in any way you want except you 
	cannot modify the copyright details at the top of each module.</li>
	<li>If you want to distribute source code with your application, then you are 
	only allowed to distribute versions released by the author. This is to maintain 
	a single distribution point for the source code.</li>
</ul>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2><a name="History"></a>History</h2>
<p><strong>v1.0 (3 November 1998)</strong> </p>
<ul>
	<li>Initial public release.</li>
</ul>
<p><strong>v1.01 (23 February 1999)</strong> </p>
<ul>
	<li>Code now uses QueryDosDevice if running on NT to determine which serial 
	ports are available. This avoids having to open the ports at all. It should 
	operate a lot faster in addition.</li>
</ul>
<p><strong>v1.02 (12 December 1999)</strong> </p>
<ul>
	<li>Fixed a problem in the Win9x code path when trying to detect deactivated 
	IRDA-ports. When trying to open those, you will get the error-code ERROR_GEN_FAILURE.
	</li>
</ul>
<p><strong>v1.03 (17 May 2000)</strong> </p>
<ul>
	<li>Code now uses GetDefaultCommConfig in all cases to detect the ports.</li>
</ul>
<p><strong>v1.04 (29 March 2001)</strong> </p>
<ul>
	<li>Reverted code to use CreateFile or QueryDosDevice as it is much faster than 
	using the GetDefaultCommConfig method.</li>
	<li>Updated copyright message.</li>
</ul>
<p><strong>v1.05 (25 June 2001)</strong> </p>
<ul>
	<li>Guess what, You now have the choice of using the GetDefaultCommConfig thro 
	the use of three versions of the function. You take your pick. </li>
	<li>Fixed problem where port fails to be reported thro the CreateFile mechanism 
	when the error code is ERROR_SHARING_VIOLATION i.e. someone has the port already 
	open. </li>
</ul>
<p><strong>v1.06 (11 August 2001)</strong> </p>
<ul>
	<li>Made code path which uses QueryDosDevice more robust by checking to make 
	sure the device name is of the form &quot;COMxyz..&quot; where xyz are numeric. </li>
</ul>
<p><strong>v1.07 (13 August 2001)</strong> </p>
<ul>
	<li>Made the code in IsNumeric more robust when sent an empty string </li>
	<li>Optimized the code in EnumerateSerialPorts2 somewhat. Thanks to Dennis Lim 
	for these suggestions. </li>
</ul>
<p><strong>v1.08 (22 May 2003)</strong> </p>
<ul>
	<li>Updated copyright details. </li>
	<li>Addition of a EnumerateSerialPorts4 which uses Device Manager API </li>
</ul>
<p><strong>v1.09 (20 September 2003)</strong> </p>
<ul>
	<li>Addition of a &quot;EnumerateSerialPorts5&quot; method. This method (hopefully the 
	last method!) uses EnumPorts and was provided by Andi Martin. </li>
</ul>
<p><strong>v1.10 (12 December 2003)</strong> </p>
<ul>
	<li>Updated the sample app to VC 6. </li>
	<li>Addition of a &quot;EnumerateSerialPorts6&quot; (See Note 4 below) which uses WMI.
	</li>
	<li>You can now optionally exclude each function using preprocessor defines 
	of the form &quot;NO_ENUMSERIAL_USING_XYX&quot;. </li>
	<li>Made the functions members of a C++ class and renamed them to using more 
	meaningful names </li>
</ul>
<p><strong>v1.11 (13 May 2004)</strong> </p>
<ul>
	<li>Extended CEnumerateSerial::UsingSetupAPI to now also return the friendly 
	name of the port. Thanks to Jay C. Howard for prompting this update.</li>
</ul>
<p><strong>v1.12 (9 July 2006)</strong> </p>
<ul>
	<li>Updated copyright details.</li>
	<li>Addition of a CENUMERATESERIAL_EXT_CLASS macro to allow the code to be easily 
	added to an extension dll</li>
	<li>Code now uses newer C++ style casts instead of C style casts.</li>
	<li>Updated the code to clean compile on VC 2005.</li>
	<li>Updated the documentation to use the same style as the web site.</li>
</ul>
<p><strong>v1.13 (8 November 2006)</strong> </p>
<ul>
	<li>Extended CEnumerateSerial::UsingWMI to now also return the friendly name 
	of the port. Thanks to Giovanni Bajo for providing this update.</li>
	<li>Fixed a bug where CEnumerateSerial::UsingSetupAPI forget to empty out 
	the Friendly name array on start.</li>
	<li>VariantInit is now called for the 2 VARIANT structs used in the UsingWMI
	method code.</li>
</ul>
<p><strong>v1.14 (29 January 2007)</strong> </p>
<ul>
	<li>Updated copyright details.</li>
	<li>UsingSetupAPI code now uses the GUID_DEVINTERFACE_COMPORT guid to 
	enumerate COM ports. Thanks to David McMinn for reporting this nice 
	addition.</li>
	<li>Detection code which uses CreateFile call, now treats the error code of 
	ERROR_SEM_TIMEOUT as indication that a port is present.</li>
</ul>
<p><strong>v1.15 (9 June 2007)</strong> </p>
<ul>
	<li>Following feedback from John Miles, it looks like my previous change of 
	the 29 January 2007 to use GUID_DEVINTERFACE_COMPORT in the UsingSetupAPI 
	method had the unintended consequence of causing this method not to work on 
	any versions of Windows prior to Windows 2000. What I have now done is 
	reinstate the old mechanism using the name UsingSetupAPI2 so that you can 
	continue to use this approach if you need to support NT 4 and Windows 9x. 
	The new approach of using GUID_DEVINTERFACE_COMPORT has been renamed to 
	UsingSetupAPI1.</li>
</ul>
<p><strong>v1.16 (5 July 2007)</strong> </p>
<ul>
	<li>Updated the code to work if the code does not include MFC. In this case, 
	CUIntArray parameters becomes the ATL class CSimpleArray&lt;UINT&gt; and 
	CStringArray parameters become the ATL class CSimpleArray&lt;CString&gt;. Please 
	note that this support requires a recentish copy of Visual Studio and will 
	not support Visual C++ 6.0 as the code makes use of the ATL CString class. 
	Thanks to Michael Venus for prompting this update.</li>
	<li>CEnumerateSerial::UsingWMI method now uses ATL smart pointers to improve 
	robustness of the code.</li>
</ul>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p class="crt"><a name="APIReference"></a><strong>API Reference</strong></p>
<p><strong>CEnumerateSerial::UsingCreateFile</strong></p>
<p><strong>BOOL CEnumerateSerial::UsingCreateFile(CUIntArray&amp;&nbsp; ports);</strong></p>
<p><strong>Parameters</strong></p>
<p><em>ports</em> Upon return this array will contain the port numbers of all the 
serial ports installed on the computer</p>
<p><strong>Remarks</strong></p>
<p>This function uses the CreateFile method of detecting serial ports. This will 
work on all Win32 OS&#39;es, but requires actually opening the port. If you 
compile the code without MFC support, then the CUIntArray parameter becomes the 
ATL class CSimpleArray&lt;UINT&gt;.</p>
<p>&nbsp;</p>
<p><strong>CEnumerateSerial::UsingQueryDosDevice</strong></p>
<p><strong>BOOL CEnumerateSerial::UsingQueryDosDevice(CUIntArray&amp;&nbsp; ports);</strong></p>
<p><strong>Parameters</strong></p>
<p><em>ports</em> Upon return this array will contain the port numbers of all the 
serial ports installed on the computer</p>
<p><strong>Remarks</strong></p>
<p>This function uses the QueryDosDevice method of detect serial ports. Please note 
that this only works correctly on NT, Windows 2000, XP or 2003. If you compile 
the code without MFC support, then the CUIntArray parameter becomes the ATL 
class CSimpleArray&lt;UINT&gt;.</p>
<p>&nbsp;</p>
<p><strong>CEnumerateSerial::UsingGetDefaultCommConfig</strong></p>
<p><strong>BOOL CEnumerateSerial::UsingGetDefaultCommConfig(CUIntArray&amp;&nbsp; ports);</strong></p>
<p><strong>Parameters</strong></p>
<p><em>ports</em> Upon return this array will contain the port numbers of all the 
serial ports installed on the computer</p>
<p><strong>Remarks</strong></p>
<p>This function uses the GetDefaultCommConfig method of detect serial ports. Please 
note that this is the most compatible way of detecting serial ports and will work 
on all Win32 OS&#39;es from Windows 95 onwards but also happens to be the slowest. 
If you compile the code without MFC support, then the CUIntArray parameter 
becomes the ATL class CSimpleArray&lt;UINT&gt;.</p>
<p>&nbsp;</p>
<p><strong>CEnumerateSerial::UsingSetupAPI1</strong></p>
<p><strong>BOOL CEnumerateSerial::UsingSetupAPI1(CUIntArray&amp;&nbsp; ports, CStringArray&amp; 
sFriendlyNames);</strong></p>
<p><strong>Parameters</strong></p>
<p><em>ports</em> Upon return this array will contain the port numbers of all the 
serial ports installed on the computer</p>
<p><i>sFriendlyNames</i> Upon return this array will contain the Friendly names 
as appears in the Device Manager corresponding to the serial ports returned in
<i>&quot;ports&quot;</i>.</p>
<p><strong>Remarks</strong></p>
<p>This function uses the Device Manager &quot;SetupDi..&quot;&nbsp;APIs and the 
value GUID_DEVINTERFACE_COMPORT device interface class to detect serial 
ports. Please note that this will only work 
on Windows 2000 or later. If you compile the code without MFC support, then the 
CUIntArray parameter becomes the ATL class CSimpleArray&lt;UINT&gt; and the 
CStringArray parameter becomes the ATL class CSimpleArray&lt;CString&gt;.</p>
<p>&nbsp;</p>
<p><strong>CEnumerateSerial::UsingSetupAPI2</strong></p>
<p><strong>BOOL CEnumerateSerial::UsingSetupAPI2(CUIntArray&amp;&nbsp; ports, CStringArray&amp; 
sFriendlyNames);</strong></p>
<p><strong>Parameters</strong></p>
<p><em>ports</em> Upon return this array will contain the port numbers of all the 
serial ports installed on the computer</p>
<p><i>sFriendlyNames</i> Upon return this array will contain the Friendly names 
as appears in the Device Manager corresponding to the serial ports returned in
<i>&quot;ports&quot;</i>.</p>
<p><strong>Remarks</strong></p>
<p>This function uses the Device Manager &quot;SetupDi..&quot;&nbsp;APIs and the 
&quot;Ports&quot; device information set to detect serial 
ports. The code of course implements logic to exclude parallel ports from the 
returned array as they are included in the &quot;Ports&quot; device information set in 
addition to serial ports. This approach will work on all Win32 OS&#39;es from 
Windows 95 onwards. If you compile the code without MFC support, then the 
CUIntArray parameter becomes the ATL class CSimpleArray&lt;UINT&gt; and the 
CStringArray parameter becomes the ATL class CSimpleArray&lt;CString&gt;.</p>
<p>&nbsp;</p>
<p><strong>CEnumerateSerial::UsingEnumPorts</strong></p>
<p><strong>BOOL CEnumerateSerial::UsingEnumPorts(CUIntArray&amp;&nbsp; ports);</strong></p>
<p><strong>Parameters</strong></p>
<p><em>ports</em> Upon return this array will contain the port numbers of all the 
serial ports installed on the computer</p>
<p><strong>Remarks</strong></p>
<p>This function uses the Win32 SDK call &quot;EnumPorts&quot;&nbsp; APIs to detect serial 
ports. This will work on all Win32 OS&#39;es from Windows 95 onwards. If you 
compile the code without MFC support, then the CUIntArray parameter becomes the 
ATL class CSimpleArray&lt;UINT&gt;.</p>
<p>&nbsp;</p>
<p><strong>CEnumerateSerial::UsingWMI</strong></p>
<p><strong>BOOL CEnumerateSerial::UsingWMI(CUIntArray&amp;&nbsp; ports, CStringArray&amp; 
sFriendlyNames);</strong></p>
<p><strong>Parameters</strong></p>
<p><em>ports</em> Upon return this array will contain the port numbers of all the 
serial ports installed on the computer</p>
<p><i>sFriendlyNames</i> Upon return this array will contain the Friendly names 
as reported using WMI corresponding to the serial ports returned in
<i>&quot;ports&quot;</i>.</p>
<p><strong>Remarks</strong></p>
<p>This function uses the WMI COM interfaces to detect serial ports. This will only 
work on Windows NT 4 SP4, Windows 2000, XP or 2003 (i.e versions of Windows on which 
WMI is available). If you compile the code without MFC support, then the 
CUIntArray parameter becomes the ATL class CSimpleArray&lt;UINT&gt; and the 
CStringArray parameter becomes the ATL class CSimpleArray&lt;CString&gt;.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2><a name="Contact"></a>Contacting the Author</h2>
<p>PJ Naughter<br>
Email: <a href="mailto:pjna@naughter.com">pjna@naughter.com</a><br>
Web: <a href="http://www.naughter.com">http://www.naughter.com</a><br>
5 July 2007</p>

</body>

</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -