This page is for Windows 2003 servers. If you need to modify a Windows 2000 server then please go HERE

Red Text: Text inserted (or edited) to allow sorting of the webpage output. As shown here the page will sort by 'location'.

Green Text: Text edited to allow more than 10 printers to show at a time.

Blue Text: Text modified to insert additional instruction for the user.




<%@ CODEPAGE=65001 %>
<%
'------------------------------------------------------------
'
' Microsoft Internet Printing Project
'
' Copyright (c) Microsoft Corporation. All rights reserved.
'
' Entry page for queue view.
'
'------------------------------------------------------------
    option explicit
%>
<!-- #include file = "ipp_util.inc" -->

<%

Randomize
Response.Expires = 0
Server.ScriptTimeOut = 6000 'Set time out to 10 minites

Const L_Opening_Text      = "Opening"
Const L_GetADSI_Message   = "Get ADSI Printers"
Const L_AccessDenied_Text = "Access Denied"

Const ADSI_PRINTER_NAME     = 1
Const ADSI_PRINTER_LOCATION = 2
Const ADSI_PRINTER_COMMENT  = 3
Const ADSI_PRINTER_MODEL    = 4
Const ADSI_PRINTER_STATUS   = 5
Const ADSI_PRINTER_JOBS     = 6
Const ADSI_PRINTER_SHARE    = 7
Const ADSI_PRINTER_ACCESS   = 8
Const ADSI_PRINTER_ATTRIBUTES = 8

Const PRINTER_ACCESS_DENIED = 0
Const PRINTER_OPENING       = 1
Const PRINTER_OK            = 2


Const iPrinterLength = 100

Function rgADSIGetPrinters(strComputer, iStart, iEnd)

    On Error Resume Next
    Err.Clear

    Dim objPrinter, objPrinters, iPrinters, dwStatus, rgPrinters()
    Dim objHelper, strServerName, i
    Dim iTotal, iRevStart, iRevEnd

    'DoC - Edit1
    Dim objDataList
    Const adVarChar = 200
    Const MaxCharacters = 255
    Set objDataList = CreateObject("ADODB.RecordSet")
    objDataList.Fields.Append "Status", adVarChar, MaxCharacters
    objDataList.Fields.Append "Name", adVarChar, MaxCharacters
    objDataList.Fields.Append "Attributes", adVarChar, MaxCharacters
    objDataList.Fields.Append "PrinterName", adVarChar, MaxCharacters
    objDataList.Fields.Append "Location", adVarChar, MaxCharacters
    objDataList.Fields.Append "Model", adVarChar, MaxCharacters
    objDataList.Fields.Append "Description", adVarChar, MaxCharacters
    objDataList.Fields.Append "JobCount", adVarChar, MaxCharacters
    objDataList.Open
    ' DoC - Edit1


    Set objHelper = Server.CreateObject(PROGID_HELPER)

    If strComputer = "localhost" Or strComputer = "127.0.0.1" or Not CBool(objHelper.IsCluster) Then
        strComputer = objHelper.ComputerName
    End If
    If Err Then Exit Function

    Set objPrinters = GetObject("WinNT://" & strComputer & ",computer")
    If Err Then Exit Function
    strServerName =  objPrinters.Name
    objPrinters.filter = Array("PrintQueue")
    If Err Then Exit Function

    ' iterate through all the (shared) printers
    iTotal = 0
    For Each objPrinter In objPrinters
        iTotal = iTotal + 1


' DoC - Edit2
 objDataList.AddNew
 objDataList("Status") = objPrinter.Status
 objDataList("Name") = objPrinter.Name
 objDataList("Attributes") = objPrinter.Attributes
 objDataList("PrinterName") = objPrinter.PrinterName
 objDataList("Location") = objPrinter.Location
 objDataList("Model") = objPrinter.Model
 objDataList("Description") = objPrinter.Description
 objDataList("JobCount") = objPrinter.JobCount
 objDataList.Update
 ' DoC - Edit2


    Next

    ' DoC - Edit3
    objDataList.Sort = "Location desc"

' Note:  Changing the word Location to Name will sort the page by Name.  

    ' DoC - Edit3


    iRevStart = iTotal - iEnd + 1
    iRevEnd = iTotal - iStart + 1

    If iEnd <= iTotal Then bShowNext = TRUE

    iPrinters = 0
    i = 1


    ' DoC - Edit4
    objDataList.MoveFirst
    ' DoC - Edit4



    For Each objPrinter In objPrinters

        If i > iRevEnd Then Exit For

        If i > iRevStart Then
            iPrinters = iPrinters + 1

            ReDim Preserve rgPrinters(ADSI_PRINTER_ATTRIBUTES, iPrinters)
            rgPrinters(ADSI_PRINTER_STATUS, iPrinters) = objDataList("Status")
            If Err.Number = &H80070005 Then    'Access Denied
                Err.Clear
                rgPrinters(ADSI_PRINTER_NAME, iPrinters) = objDataList("Name")
                rgPrinters(ADSI_PRINTER_ACCESS, iPrinters) = PRINTER_ACCESS_DENIED
                rgPrinters(ADSI_PRINTER_LOCATION, iPrinters) = ""
                rgPrinters(ADSI_PRINTER_MODEL, iPrinters) = ""
                rgPrinters(ADSI_PRINTER_COMMENT, iPrinters) = "<a href=""ipp_0001.asp?v=1&startid=" &_
                    CStr (iStart) & "&endid=" & CStr (iEnd) & """>" & L_AccessDenied_Text & "</a>"

                rgPrinters(ADSI_PRINTER_JOBS, iPrinters) = 0
            Else
                If Err.Number <> 0 Then
                    Err.Clear
                    rgPrinters(ADSI_PRINTER_NAME, iPrinters) = objDataList("Name")
                    rgPrinters(ADSI_PRINTER_ACCESS, iPrinters) = PRINTER_OPENING
                    rgPrinters(ADSI_PRINTER_LOCATION, iPrinters) = ""
                    rgPrinters(ADSI_PRINTER_MODEL, iPrinters) = ""
                    rgPrinters(ADSI_PRINTER_COMMENT, iPrinters) = L_Opening_Text
                    rgPrinters(ADSI_PRINTER_JOBS, iPrinters) = 0
                Else
                    dwStatus = objDataList("Status")
                    If objPrinter.Attributes And &H400 Then dwStatus = dwStatus Or &H80

                    rgPrinters(ADSI_PRINTER_NAME, iPrinters) = GetFriendlyName (objDataList("PrinterName"), strServerName)
                    rgPrinters(ADSI_PRINTER_STATUS, iPrinters) = dwStatus
                    rgPrinters(ADSI_PRINTER_LOCATION, iPrinters) = strCleanString (objDataList("Location"))
                    rgPrinters(ADSI_PRINTER_MODEL, iPrinters) = strCleanString (objDataList("Model"))
                    rgPrinters(ADSI_PRINTER_COMMENT, iPrinters) = strCleanString (objDataList("Description"))
                    rgPrinters(ADSI_PRINTER_JOBS, iPrinters) = objDataList("JobCount")
                    If Err Then Exit Function

                    rgPrinters(ADSI_PRINTER_ACCESS, iPrinters) = PRINTER_OK
                End If
            End If
        End If

        i = i + 1
    Next

    if iPrinters = 0 Then ReDim rgPrinters(ADSI_PRINTER_SHARE, 0)
    rgADSIGetPrinters = rgPrinters
End Function

    Dim strLocal, rgPrinters, strTitle
    Dim iStart, iEnd, bShowNext

    'Verify User Name
    If Request("v") = "1" And Session ("PASSWD_TYPED") = FALSE Then
        Session ("PASSWD_TYPED") = TRUE
        Err.Number = &H80070005
        Call ErrorHandler(strADSI)
    End If

    Session ("PASSWD_TYPED") = FALSE

    strLocal = request.ServerVariables("SERVER_NAME")
    const L_AllPrinters_Text = "All Printers on %1"<br><font size=-1><marquee width=600 behavior=slide> Click on the name of the printer you want to print to and then select 'connect'.</marquee>
    strTitle = RepString1(L_AllPrinters_Text, strLocal)

    If Request("startid") = "" Or Request ("endid") = "" Then
        iStart = 1
        iEnd = iStart+ iPrinterLength
    Else
        iStart = Int (Request ("startid"))
        iEnd = Int (Request ("endid"))
        If (iEnd <= iStart) Then
            iEnd = iStart + iPrinterLength
        End If
    End If

    bShowNext = FALSE

    rgPrinters = rgADSIGetPrinters(strLocal, iStart, iEnd)
    If Err.Number <> 0 Then
        Dim strADSI

        strADSI = L_GetADSI_Message

        Call ErrorHandler(strADSI)
    End If
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html lang=<%=L_Language%>>
<head>
<Meta Http-equiv="Content-Type" Content="text/html; CHARSET=UTF-8">
<meta http-equiv="refresh" content="120">
<title> Insert Customized Title Here</title>
'<title><% =Write(strTitle) %></title>
</head>

<%
Dim strPrinterName
strPrinterName = "<H2>" & strTitle & "</H2>"


Function GenTableHead ()
    Dim L_TableTitle_Text(5)
    Dim strTableTitle(5)       'The reason we have to do this is that when we manipulate the string ,
                               'it is not localizable. This works around this problem
    Dim i
    Dim strHTML
    Dim Width
    'Width = Array (200, 80, 200, 37, 194, 194)
    Const strSp = "  "

    L_TableTitle_Text(0) = "Name"
    L_TableTitle_Text(1) = "Status"
    L_TableTitle_Text(2) = "Location"
    L_TableTitle_Text(3) = "Jobs"
    L_TableTitle_Text(4) = "Model"
    L_TableTitle_Text(5) = "Comment"

    For i = 0 to 5
        strTableTitle(i) = L_TableTitle_Text(i) & strSp
    Next

    strHTML = "<tr>"

    For i = 0 to 5
        strHTML = strHTML & "<td bgcolor=#000000 nowrap>" & MENU_FONT_TAG & "<b>" &_
                  strTableTitle(i) & "</b>" & END_FONT & "</td>"
    Next
    strHTML = strHTML & "</tr>"

    GenTableHead = strHTML
End Function

Function GenTableBody ()
    Dim i
    Dim strHTML

    Dim TdStart, TdEnd
    TdStart = "<td nowrap>" & DEF_FONT_TAG
    TdEnd = END_FONT & "</td>"


    strHTML = ""
    For i = ubound(rgPrinters, 2) To 1 Step -1
    'For i = 1 To ubound(rgPrinters, 2)
        strHTML = strHTML & "<tr>"

        Select Case rgPrinters(ADSI_PRINTER_ACCESS, i)
        Case PRINTER_OPENING
            strHTML = strHTML & TdStart & "<a href=""ipp_0001.asp" &_
              """ target=""_top"">" & rgPrinters(ADSI_PRINTER_NAME, i) & "</a>" & TdEnd
        Case PRINTER_ACCESS_DENIED
            strHTML = strHTML & TdStart & rgPrinters(ADSI_PRINTER_NAME, i) & TdEnd
        Case Else
            strHTML = strHTML & TdStart & "<a href=""ipp_0004.asp?view=q&eprinter=" &_
              OleCvt.EncodeUnicodeName(rgPrinters(ADSI_PRINTER_NAME, i)) &_
              ATPAGE & CStr(Int(Rnd*10000)) &_
              """ target=""_top"">" & rgPrinters(ADSI_PRINTER_NAME, i) & "</a>" & TdEnd
        End Select

        If rgPrinters(ADSI_PRINTER_ACCESS, i) = PRINTER_OK Then
            strHTML = strHTML &_
                      TdStart & strPrinterStatus (rgPrinters(ADSI_PRINTER_STATUS, i)) & TdEnd &_
                      TdStart & rgPrinters(ADSI_PRINTER_LOCATION, i) & TdEnd &_
                      TdStart & rgPrinters(ADSI_PRINTER_JOBS, i ) & TdEnd &_
                      TdStart & rgPrinters(ADSI_PRINTER_MODEL, i) & TdEnd &_
                      TdStart & rgPrinters(ADSI_PRINTER_COMMENT, i) & TdEnd
        Else
            strHTML = strHTML &_
                      "<td>" & DEF_FONT_TAG & "<font color=""#7F7F7F"">" & rgPrinters(ADSI_PRINTER_COMMENT, i) & "</font>" & END_FONT & "</td>" &_
                      "<td> </td>" &_
                      "<td> </td>" &_
                      "<td> </td>" &_
                      "<td> </td>"
        End If
        strHTML = strHTML & "</tr>"
    Next

    GenTableBody = strHTML
End Function
%>



<body bgcolor="#FFFFFF" text="#000000" link="#000000" vlink="#808080" alink="#000000"
topmargin="0" leftmargin="0">

<table border="0" cellpadding="0" cellspacing="0" width="100%" height="175">
  <tr>
    <td width="100%"><table border="0" width="100%" cellspacing="0" cellpadding="1">
      <tr>
        <td width="12%"><img src="images/ipp_0002.gif" alt="printers.gif"></td>
        <td width="88%"><%=Write(CLIENT_FONT & strPrinterName & END_FONT)%></td>
      </tr>
    </table>
    </td>
  </tr>
  <tr>
    <td height="11"></td>
  </tr>
  <tr>
    <td  height="55"><table width=100% border="0" cellspacing="0" cellpadding="2">
      <%=Write (GenTableHead)%>
      <%=Write (GenTableBody)%>
    </table>
    </td>
  </tr>
</table>

<p>

<%
    Dim strUrl
    Const L_Prev_Text = "Prev %1 printers"
    Const L_Next_Text = "Next %1 printers"

    strUrl = "<a target=_top href=ipp_0001.asp?startid=" & CStr(iStart - iPrinterLength) & "&endid=" & CStr(iEnd - iPrinterLength) & ">" & RepString1(L_Prev_Text, CStr (iPrinterLength)) & "</a>    "

    If iStart > 1 Then
        Response.Write ( Write(DEF_FONT_TAG & strUrl & END_FONT))
    End If

    strUrl = "<a target=_top href=ipp_0001.asp?startid=" & CStr(iStart + iPrinterLength) & "&endid=" & CStr(iEnd+iPrinterLength) & ">" & RepString1(L_Next_Text , CStr (iPrinterLength)) & "</a>"

    If bShowNext Then
        Response.Write ( Write(DEF_FONT_TAG & strUrl & END_FONT))
    End If

%>
</body>
</html>