|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Visual Basic System Services AddPort: Adding and Deleting Application-Defined Ports |
|
Posted: | Friday September 17, 1999 |
Updated: | Monday December 26, 2011 |
Applies to: | VB4-32, VB5, VB6 |
Developed with: | VB6, Windows NT4 |
OS restrictions: | None |
Author: | VBnet - Randy Birch |
Related:
|
AddPort: Adding and Deleting Application-Defined Ports AddPrinter: Add/Delete Local/Remote Printers using Existing Drivers EnumPorts: Identify Windows' Available Ports |
Prerequisites |
None. |
|
This
page shows how to add and delete application-defined ports. It was developed under WinNT4 SP5, but should function under Win9x as well.
The AddPort function adds the name of a port to the list of supported ports. AddPortEx creates a port and adds it to the list of ports currently supported by the specified monitor in the spooler environment. AddPort prompts the user to name the port being added. The AddPortEx methods show how to perform this programmatically. As shown here, the server is set as vbNullString, which represents the local machine. See the MSDN documentation for AddPortEx for information on extending these methods to create remote ports. |
BAS Module Code |
None. |
|
Form Code |
On a form add four text boxes (Text1-Text4), and array of option buttons (Option1(0)-Option(2)), and two command buttons (Command1, Command2). Add a label (Lable1 (in blue)) and the following code: |
|
Option Explicit '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Copyright ©1996-2011 VBnet/Randy Birch, All Rights Reserved. ' Some pages may also contain other copyrights by the author. '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Distribution: You can freely use this code in your own ' applications, but you may not reproduce ' or publish this code on any web site, ' online service, or distribute as source ' on any media without express permission. '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'PORT_INFO_2S Description 'pPortName: Pointer to a null-terminated string that 'identifies a supported printer port (for example, "LPT1:"). 'pMonitorName: Pointer to a null-terminated string that 'identifies an installed monitor (for example, "PJL monitor"). 'pDescription: Pointer to a null-terminated string that 'describes the port in more detail (for example, if 'pPortName is "LPT1:", pDescription is "printer port"). 'fPortType: Handle to the type of port. Can be one 'of these values: ' PORT_TYPE_WRITE ' PORT_TYPE_READ ' PORT_TYPE_REDIRECTED ' PORT_TYPE_NET_ATTACHED ' 'Note: PORT_INFO_2S is identical to the PORT_INFO_2 UDT 'provided by the api viewer. I have renamed the type for 'this example because the EnumPorts demo uses PORT_INFO_2 'defined with all members as Long. Private Type PORT_INFO_2S pPortName As String pMonitorName As String pDescription As String fPortType As Long Reserved As Long End Type 'PORT_INFO_1 Description 'pPortName: Pointer to a null-terminated string that 'identifies a supported printer port (for example, "LPT1:"). Private Type PORT_INFO_1 pPortName As String End Type Private Enum PortTypes PORT_TYPE_WRITE = &H1 PORT_TYPE_READ = &H2 PORT_TYPE_REDIRECTED = &H4 PORT_TYPE_NET_ATTACHED = &H8 End Enum 'The AddPort function browses the network to find 'existing ports, and displays a dialog box for the 'user. The AddPort function should validate the port 'name entered by the user by calling EnumPorts to 'ensure that no duplicate names exist. 'The caller of the AddPort function must have 'SERVER_ACCESS_ADMINISTER access to the server to 'which the port is connected. Private Declare Function AddPort Lib "winspool.drv" _ Alias "AddPortA" _ (ByVal pName As String, _ ByVal hwnd As Long, _ ByVal pMonitorName As String) As Long Private Declare Function DeletePort Lib "winspool.drv" _ Alias "DeletePortA" _ (ByVal pName As String, _ ByVal hwnd As Long, _ ByVal pPortName As String) As Long Private Declare Function AddPortEx Lib "winspool.drv" _ Alias "AddPortExA" _ (ByVal pName As String, _ ByVal pLevel As Long, _ lpBuffer As Any, _ ByVal pMonitorName As String) As Long Private Sub Form_Load() Command1.Enabled = False 'the Add Port button End Sub Private Sub Option1_Click(Index As Integer) 'Server passed as vbNullString (local machine) Text1.Enabled = False Text2.Enabled = Index <> 0 Text3.Enabled = Index <> 0 Text4.Enabled = Index <> 0 Command1.Enabled = Index > -1 End Sub Private Sub Command1_Click() Dim success As Boolean Dim Port1 As PORT_INFO_1 Dim Port2 As PORT_INFO_2S ''''''''''''''''''''''''''''''''''''' 'use AddPort If Option1(0).Value = True Then Call AddPort(vbNullString, 0&, "Local Port") End If ''''''''''''''''''''''''''''''''''''' 'use AddPortEx with Port Info Level 1 If Option1(1).Value = True Then Port1.pPortName = Text4 success = AddPortEx(vbNullString, 1, Port1, "Local Port") End If ''''''''''''''''''''''''''''''''''''' 'use AddPortEx with Port Info Level 2 If Option1(2).Value = True Then 'pMonitorName must point to a valid installed monitor With Port2 .fPortType = PORT_TYPE_WRITE Or PORT_TYPE_READ .pMonitorName = Text2 .pPortName = Text4 End With success = AddPortEx(vbNullString, 1, Port2, "Local Port") End If ''''''''''''''''''''''''''''''''''''' 'results (valid for index 1 and 2 only) If Option1(0).Value = True Then 'docs state that if the AddPort function 'succeeds the return value is a nonzero value. 'and if it fails the return value is zero. 'However canceling the dialog also returns 'non-zero, making a check of a returned 'value unreliable. If success Then Label1.Caption = "AddPort returned non-zero" Else Label1.Caption = "AddPort returned zero" End If Else If success Then Label1.Caption = "Port '" & Text4 & "' added" Else Label1.Caption = "AddPortEx failed" End If End If End Sub Private Sub Command2_Click() Dim success As Boolean 'This routine is only coded to handle ports added 'via AddPortEx, as there is no way of telling (without 'enumerating the ports before and after adding), what 'the name of a user-named port is. Therefore if the 'AddPort was used, you will need to modify the line 'below to indicate the name of the port to delete. success = DeletePort("", 0, (Text4)) If success Then Label1.Caption = "Port '" & Text4 & "' has been deleted." Else Label1.Caption = "Port not deleted or nothing to do." End If End Sub |
Comments |
To view the current set of available ports, open the
properties for any printer and select Ports (this is not the same as the Ports control panel applet). The printer properties do not respond
to broadcast messages, so you will need to close and reopen the properties to see additions/deletions from the port list.
Also note that this is but one step in installing a new port type. Without first creating a new Monitor, you are restricted to using the monitors already installed on the system. See the MSDN for more information about Ports and Monitors. |
|
|
|
|||||
|
|||||
|
|||||
Copyright ©1996-2011 VBnet and Randy Birch. All Rights Reserved. |