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

📄 28-5.cfm.htm

📁 最全的ASP教程
💻 HTM
字号:
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb_2312-80">
<META NAME="Generator" CONTENT="Microsoft Word 97">
<TITLE>列出服务器上的打印机</TITLE>
</HEAD>
<BODY>

<B><FONT FACE="宋体" LANG="ZH-CN" SIZE=5><P ALIGN="JUSTIFY">列出服务器上的打印机</P>
</B></FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">以上两个例子是对组件的很好说明,但是太不值得为这些服务编写一个组件,除非是出于想隐藏你的工作源代码的考虑。想象一下你的Intranet服务器将打印从你的Web应用传过来的报告,用户在打印之前需要设置打印机。在这一段中介绍的组件将显示你系统中的打印机。你也可以扩展这些代码来实际选择一个打印机,并将打印作业发送给它。</P>
<P ALIGN="JUSTIFY"> </P>
</FONT><B><FONT FACE="宋体" LANG="ZH-CN"><P ALIGN="JUSTIFY">组件逻辑</P>
</B></FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">    这个组件以“硬方式”编写以便说明如何在VB中调用Wivdons API, 如果你使用VB5中的printer 类也可以实现相同的功能。</P>
<P ALIGN="JUSTIFY">    这个组件调用了由Windows NT使用的EnumPrinters函数。这个函数以五种格式之一返回一个打印机列表,格式是由你确定的“等级”而定。在这个例子里,我们使用第四级,它只是列举了我们NT服务器所连接的打印机名字和位置(直接连接或网络连接)。</P>
<P ALIGN="JUSTIFY"> </P>
<B><P ALIGN="JUSTIFY">注意</P>
</B><P ALIGN="JUSTIFY">    在这里显示的组件代码只适用于Windows NT,如果你在Windows95上运行Personal Web Server的话,使用第五级。Windows 95将网络打印机当作本地打印机处理。</P>
<P ALIGN="JUSTIFY">第五级的打印结构同第四级的有略微的不同之处,使用VB5 API浏览器将PRINTER_INFO_5结构体复制到你的代码中。</P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY">这是一个功能强大的API调用,可带许多不同的参数。Visual C的帮助文件提供如何使用EnumPrinters函数的细节,但将C形式的语法翻译成VB语句可能具有挑战胜。你可以从www.microsoft.com网点中下载Microsoft Knowledge Base article Q166008来获得如何翻译的额外细节信息。</P>
<P ALIGN="JUSTIFY">    我们将返回信息存在一个长整数组中因为它比其它更低级的储存结构更便于操作和索引。通过PtrToStr和StrLen调用,我们能够将长整数数组转换成字符串,这种结果在VB中最容易使用。</P>
<P ALIGN="JUSTIFY">    当确定了有多少打印机与系统相连,我们redim(重定义)两个数组(m_aDeviceName和m_ServerName)来存储所发现打印机数目。如果没有发现打印机,这些代码将不会执行,因为错误处理代码将接管程序的执行。</P>
<P ALIGN="JUSTIFY"> </P>
</FONT><B><FONT FACE="宋体" LANG="ZH-CN"><P ALIGN="JUSTIFY">编写源代码</P>
</B></FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">    再一次启动一个新的VB5 ActiveX DLL项目,VB显示了一个缺省的代码窗口名叫Class1,按F4,按以下修改属性表:</P>
<P ALIGN="JUSTIFY">(Name)WebPrinters</P>
<P ALIGN="JUSTIFY">Instancing 5 - MultiUse</P>
<P ALIGN="JUSTIFY">    如果你使用VB4,设置Public为True。</P>
<P ALIGN="JUSTIFY">选择Projects |Project 1 Properties将项目名改为Web Utils,并选择Unattended Execution。选项最后最后单击对话框的Make表栏并选择Auto Increment,按OK键保存设置。</P>
<P ALIGN="JUSTIFY">列表28.7包含了打印机组件的源代码,这个组件只是列举了你系统上的打印机——你可以扩展其代码事完成实际的打印任务。不象先前的VB组件,这个例子使用VB的Get 和Let属性。对这些属性的讨论超过了本例的范围,但Microsoft</FONT><FONT SIZE=3>’</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>s Visual Books Online(与VB5捆绑在一起)包含了这两个属性的深层次解释。</P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY">表28.7 WebUtils.WebPrinters原代码</P>
<P ALIGN="JUSTIFY"><HR ALIGN="RIGHT" SIZE=1></P>
<P ALIGN="JUSTIFY">Option Explicit</P>
<P ALIGN="JUSTIFY">Private Declare Function EnumPrinters Lib "winspool.drv" _    Alias "EnumPrintersA" _    (ByVal flags As Long, ByVal name As String, _    ByVal Level As Long, pPrinterEnum As Long, _    ByVal cdBuf As Long, pcbNeeded As Long, pcReturned As Long) _    As Long</P>
<P ALIGN="JUSTIFY">Private Declare Function PtrToStr Lib "Kernel32" Alias "lstrcpyA" _         (ByVal RetVal As String, ByVal Ptr As Long) As Long</P>
<P ALIGN="JUSTIFY">Private Declare Function StrLen Lib "Kernel32" Alias "lstrlenA" _         (ByVal Ptr As Long) As Long</P>
<P ALIGN="JUSTIFY">Private Type PRINTER_INFO_4    pPrinterName As String    pServerName As String    Attributes As LongEnd Type</P>
<P ALIGN="JUSTIFY">Private Const PRINTER_ENUM_LOCAL = &amp;H2Private Const PRINTER_ENUM_CONNECTIONS = &amp;H4Private Const PRINTER_ENUM_NAME = &amp;H8Private Const PRINTER_ENUM_NETWORK = &amp;H40Private Const PRINTER_ENUM_REMOTE = &amp;H10Private Const PRINTER_ENUM_SHARED = &amp;H20</P>
<P ALIGN="JUSTIFY">Private m_iPrinterCount         As IntegerPrivate m_aDeviceName()         As StringPrivate m_aServer()             As String</P>
<P ALIGN="JUSTIFY">Private Property Let PrinterCount(iValue As Integer)    m_iPrinterCount = iValueEnd Property</P>
<P ALIGN="JUSTIFY">Public Property Get PrinterCount() As Integer    PrinterCount = m_iPrinterCountEnd Property</P>
<P ALIGN="JUSTIFY">Private Property Let DeviceName(iIndex As Integer, sValue As String)    m_aDeviceName(iIndex) = sValueEnd Property</P>
<P ALIGN="JUSTIFY">Public Property Get DeviceName(iIndex As Integer) As String    DeviceName = m_aDeviceName(iIndex)End Property</P>
<P ALIGN="JUSTIFY">Private Property Let Server(iIndex As Integer, sValue As String)    m_aServer(iIndex) = sValueEnd Property</P>
<P ALIGN="JUSTIFY">Public Property Get Server(iIndex As Integer) As String    Server = m_aServer(iIndex)End Property</P>
<P ALIGN="JUSTIFY">Private Sub Class_Initialize()    Dim bReturn             As Boolean    Dim lFlags              As Long    Dim sName               As String    Dim lLevel              As Long    Dim lBuffer()           As Long    Dim lCdBuf              As Long    Dim lPcbNeeded          As Long    Dim lEntries            As Long    Dim i                   As Integer    Dim lTemp               As Long    Dim sTempString         As String</P>
<P ALIGN="JUSTIFY">    lFlags = PRINTER_ENUM_CONNECTIONS Or PRINTER_ENUM_LOCAL    sName = vbNullString    lLevel = 4    lCdBuf = 3072    ReDim lBuffer((lCdBuf \ 4) - 1) As Long</P>
<P ALIGN="JUSTIFY">    bReturn = EnumPrinters(lFlags, sName, lLevel, lBuffer(0), lCdBuf,    lPcbNeeded, lEntries)    PrinterCount = lEntries         ' Number Printers Found</P>
<P ALIGN="JUSTIFY"><HR ALIGN="LEFT" SIZE=1>    ReDim m_aDeviceName(PrinterCount) As String    ReDim m_aServer(PrinterCount) As String    ReDim m_aPaperBin(PrinterCount) As String    ReDim m_aPaperSize(PrinterCount) As String    For i = 0 To PrinterCount - 1        ' Set the Device Name        sTempString = Space(StrLen(lBuffer(i * 3)))        lTemp = PtrToStr(sTempString, lBuffer(i * 3))        DeviceName(i) = sTempString        ' Set the Server Name        sTempString = Space(StrLen(lBuffer(i * 3 + 1)))        lTemp = PtrToStr(sTempString, lBuffer(i * 3 + 1))        Server(i) = sTempString    Next iEnd Sub</P>
<P ALIGN="JUSTIFY"> </P>
</FONT><B><FONT FACE="宋体" LANG="ZH-CN"><P ALIGN="JUSTIFY">创建DLL</P>
</B></FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">    将你的工作保存到磁盘上,CD上的例子使用\AspUnleashed\chapter28\Utils。</P>
<P ALIGN="JUSTIFY">选择File|Make WebUtils DLL来创建DLL。这个组件将保存在同你保存源代码相同路径下。将此DLL拷贝到SSA站点的Components目录,使用Microsoft Management Console确保这个目录的属性包括Run in Separate Memory space使得你可以在以后安装不同版本的DLL时不需要重起你的计算机(详细情况请见第二章)。</P>
<P ALIGN="JUSTIFY">    在命令行中通过以下两条命令注册DLL。</P>
<P ALIGN="JUSTIFY">cd \ssa\Components</P>
<P ALIGN="JUSTIFY">RegSvr32 WebUtils.dll</P>
<P ALIGN="JUSTIFY"> </P>
</FONT><B><FONT FACE="宋体" LANG="ZH-CN"><P ALIGN="JUSTIFY">在页面中使用组件</P>
</B></FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">    列表28.8中显示的ASP代码将列出与你系统相连的所有打印机。通过改写这些代码,你可以添加一个下拉列表框,使得用户在其中选择一个打印机,然后将他们的选择传递给你自己的定制组件,将报告输出到所选的打印机上。</P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY">表28.8 Printers.asp</P>
<P ALIGN="JUSTIFY"><HR ALIGN="LEFT" SIZE=1></P>
<P ALIGN="JUSTIFY">&lt;% Option Explicit %&gt;</P>
<P ALIGN="JUSTIFY">&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"&gt;&lt;HTML&gt;&lt;HEAD&gt;    &lt;TITLE&gt;System Printers&lt;/TITLE&gt;&lt;/HEAD&gt;</P>
<P ALIGN="JUSTIFY">&lt;BODY BGCOLOR="#FFFFFF"&gt;&lt;FONT SIZE="2" FACE="Verdana, Arial, Helvetica"&gt;</P>
<P ALIGN="JUSTIFY">&lt;CENTER&gt;&lt;H1&gt;Web Server Printers&lt;/H1&gt;&lt;/CENTER&gt;&lt;HR Color="Red"&gt;</P>
<P ALIGN="JUSTIFY">&lt;%Dim oSystemPrintersDim iSet oSystemPrinters = Server.CreateObject("WebUtils.WebPrinters")%&gt;There are &lt;%=oSystemPrinters.PrinterCount%&gt; Server printers&lt;BR&gt;&lt;%    i = oSystemPrinters.PrinterCount    If i &gt; 0 Then      For i = 0 to i - 1%&gt;Printer &lt;% =cstr(i + 1) %&gt;: &lt;%=oSystemPrinters.deviceName(cint(i))%&gt;&lt;BR&gt;&lt;%        Next    End IfSet oSystemPrinters = Nothing        ' De-reference the object%&gt;&lt;/BODY&gt;&lt;/HTML&gt;</P>
<P ALIGN="JUSTIFY"><HR ALIGN="LEFT" SIZE=1></P>
</FONT><B><FONT FACE="宋体" LANG="ZH-CN" SIZE=5><P ALIGN="JUSTIFY">总结</P>
</B></FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">    组件真是难以置信的强大,花点时间来学习如何创建它们。没有任何普通的HTML代码可以与你的新技术相比。</P>
<P ALIGN="JUSTIFY">    额外的组件信息可以从www.microoft.com/iis中以及在不同的新闻组例如:news://news.extencia.com/aspdeveloper和许多微软的新闻组例如:news://msnews. microsoft.com中获到。</P></FONT></BODY>
</HTML>

⌨️ 快捷键说明

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