+ Reply to Thread
Results 1 to 4 of 4

Setting default printer using wsh

  1. #1
    PO
    Guest

    Setting default printer using wsh

    Hi

    Excel 2000

    I use the following wsh script to set the default printer:


    Dim oNet
    Set oNet =WScript.CreateObject("WScript.Network")

    oNet.SetDefaultPrinter("hp LaserJet 1300 PCL 5e")

    Set oNet=nothing


    (The port name for that printer is DOT4_002)
    This works fine and the controlpanel is showing that "hp LaserJet..." is the
    default printer. Excel however indicates that the Application.DefaultPrinter
    is "unknown". When I set the default printer manually in the controlpanel
    Excel recognizes the default printer to be "hp LaserJet 1300 PCL 5e on
    Ne02:". I don't understand where Excel gets "on Ne02:" from. The portname
    should be DOT4_002.

    On some computers Excel still prints correctly to the "hp LaserJet...",
    however on others Excel reports an error.

    Any ideas?

    TIA
    po



  2. #2
    Tom Ogilvy
    Guest

    Re: Setting default printer using wsh

    previously posted by KeepItCool as indicated:


    http://groups.google.co.uk/groups?se...&output=gplain


    This should produce exactly what you're looking for
    but note it will NOT work for xl97

    The PrinterFind function will return an array of
    localized strings ready to assign to the ActivePrinter.

    I've amended an old post from myself to allow filtering.
    see test procedure for example of how to use.
    On a userform you could simply use s'th like
    cboPrinters.list=PrinterFind





    Option Explicit

    Private Declare Function GetProfileString Lib "kernel32" _
    Alias "GetProfileStringA" (ByVal lpAppName As String, _
    ByVal lpKeyName As String, ByVal lpDefault As String, _
    ByVal lpReturnedString As String, _
    ByVal nSize As Long) As Long


    Sub Test()
    Dim vaList
    'Get all printers
    vaList = PrinterFind
    'Show m
    MsgBox Join(vaList, vbLf), , "List of printers"

    'Get all laserjets
    vaList = PrinterFind(Match:="Laserjet")

    'Switch to the first laserjet found
    If UBound(vaList) = -1 Then
    MsgBox "Printer not found"
    ElseIf MsgBox("from " & vbTab & ": " & ActivePrinter & vbLf & _
    "to " & vbTab & ": " & vaList(0), _
    vbOKCancel, "Switch Printers") = vbOK Then
    Application.ActivePrinter = vaList(0)
    End If
    End Sub

    Public Function PrinterFind(Optional Match As String) As String()
    Dim n%, lRet&, sBuf$, sCon$, aPrn$()
    Const lLen& = 1024, sKey$ = "devices"

    '------------------------------------------------------------------
    'written by keepITcool

    'requires xl2000 or newer.
    'returns a zerobased array of complete localized printer strings
    'results are filtered on Match string, if no result the ubound = -1
    '------------------------------------------------------------------

    'Split ActivePrinter string to get localized word for "on"
    aPrn = Split(Excel.ActivePrinter)
    sCon = " " & aPrn(UBound(aPrn) - 1) & " "

    'Read all installed printers (1k bytes s/b enough)
    sBuf = Space(lLen)
    lRet = GetProfileString(sKey, vbNullString, vbNullString, sBuf, lLen)
    If lRet = 0 Then
    Err.Raise vbObjectError + 513, , "Can't read Profile"
    Exit Function
    End If

    'Split buffer string
    aPrn = Split(Left(sBuf, lRet - 1), vbNullChar)
    'Filter array on Match
    If Match <> vbNullString Then aPrn = Filter(aPrn, Match, -1, 1)

    For n = LBound(aPrn) To UBound(aPrn)
    'Add 16bit portname for each Printer
    sBuf = Space(lLen)
    lRet = GetProfileString(sKey, aPrn(n), vbNullString, sBuf, lLen)
    aPrn(n) = aPrn(n) & sCon & _
    Mid(sBuf, InStr(sBuf, ",") + 1, lRet - InStr(sBuf, ","))
    Next
    'Return the result
    PrinterFind = aPrn

    End Function

    --
    Regards,
    Tom Ogilvy

    "PO" <po> wrote in message news:[email protected]...
    > Hi
    >
    > Excel 2000
    >
    > I use the following wsh script to set the default printer:
    >
    >
    > Dim oNet
    > Set oNet =WScript.CreateObject("WScript.Network")
    >
    > oNet.SetDefaultPrinter("hp LaserJet 1300 PCL 5e")
    >
    > Set oNet=nothing
    >
    >
    > (The port name for that printer is DOT4_002)
    > This works fine and the controlpanel is showing that "hp LaserJet..." is

    the
    > default printer. Excel however indicates that the

    Application.DefaultPrinter
    > is "unknown". When I set the default printer manually in the controlpanel
    > Excel recognizes the default printer to be "hp LaserJet 1300 PCL 5e on
    > Ne02:". I don't understand where Excel gets "on Ne02:" from. The portname
    > should be DOT4_002.
    >
    > On some computers Excel still prints correctly to the "hp LaserJet...",
    > however on others Excel reports an error.
    >
    > Any ideas?
    >
    > TIA
    > po
    >
    >




  3. #3
    PO
    Guest

    Re: Setting default printer using wsh

    Thanks Tom

    The problem is that the code I sent was written in VBScript in a web-page so
    I can't use the API call.
    The trick to find out the localized setting for "on" was a big help though
    since some of our companies Excel versions are in Swedish and some in
    English.

    However I still need to find out from where to get the correct "suffix",
    i.e. hp LaserJet on Ne02. It's called Ne02 on my computer and something else
    on other computers. Also the suffix differs depending on which printer I
    want to set the default printer.

    Any ideas?
    Regards
    po

    "Tom Ogilvy" <[email protected]> wrote in message
    news:[email protected]...
    > previously posted by KeepItCool as indicated:
    >
    >
    >

    http://groups.google.co.uk/groups?se...tcoolnl%40msne
    ws.microsoft.com&output=gplain
    >
    >
    > This should produce exactly what you're looking for
    > but note it will NOT work for xl97
    >
    > The PrinterFind function will return an array of
    > localized strings ready to assign to the ActivePrinter.
    >
    > I've amended an old post from myself to allow filtering.
    > see test procedure for example of how to use.
    > On a userform you could simply use s'th like
    > cboPrinters.list=PrinterFind
    >
    >
    >
    >
    >
    > Option Explicit
    >
    > Private Declare Function GetProfileString Lib "kernel32" _
    > Alias "GetProfileStringA" (ByVal lpAppName As String, _
    > ByVal lpKeyName As String, ByVal lpDefault As String, _
    > ByVal lpReturnedString As String, _
    > ByVal nSize As Long) As Long
    >
    >
    > Sub Test()
    > Dim vaList
    > 'Get all printers
    > vaList = PrinterFind
    > 'Show m
    > MsgBox Join(vaList, vbLf), , "List of printers"
    >
    > 'Get all laserjets
    > vaList = PrinterFind(Match:="Laserjet")
    >
    > 'Switch to the first laserjet found
    > If UBound(vaList) = -1 Then
    > MsgBox "Printer not found"
    > ElseIf MsgBox("from " & vbTab & ": " & ActivePrinter & vbLf & _
    > "to " & vbTab & ": " & vaList(0), _
    > vbOKCancel, "Switch Printers") = vbOK Then
    > Application.ActivePrinter = vaList(0)
    > End If
    > End Sub
    >
    > Public Function PrinterFind(Optional Match As String) As String()
    > Dim n%, lRet&, sBuf$, sCon$, aPrn$()
    > Const lLen& = 1024, sKey$ = "devices"
    >
    > '------------------------------------------------------------------
    > 'written by keepITcool
    >
    > 'requires xl2000 or newer.
    > 'returns a zerobased array of complete localized printer strings
    > 'results are filtered on Match string, if no result the ubound = -1
    > '------------------------------------------------------------------
    >
    > 'Split ActivePrinter string to get localized word for "on"
    > aPrn = Split(Excel.ActivePrinter)
    > sCon = " " & aPrn(UBound(aPrn) - 1) & " "
    >
    > 'Read all installed printers (1k bytes s/b enough)
    > sBuf = Space(lLen)
    > lRet = GetProfileString(sKey, vbNullString, vbNullString, sBuf, lLen)
    > If lRet = 0 Then
    > Err.Raise vbObjectError + 513, , "Can't read Profile"
    > Exit Function
    > End If
    >
    > 'Split buffer string
    > aPrn = Split(Left(sBuf, lRet - 1), vbNullChar)
    > 'Filter array on Match
    > If Match <> vbNullString Then aPrn = Filter(aPrn, Match, -1, 1)
    >
    > For n = LBound(aPrn) To UBound(aPrn)
    > 'Add 16bit portname for each Printer
    > sBuf = Space(lLen)
    > lRet = GetProfileString(sKey, aPrn(n), vbNullString, sBuf, lLen)
    > aPrn(n) = aPrn(n) & sCon & _
    > Mid(sBuf, InStr(sBuf, ",") + 1, lRet - InStr(sBuf, ","))
    > Next
    > 'Return the result
    > PrinterFind = aPrn
    >
    > End Function
    >
    > --
    > Regards,
    > Tom Ogilvy
    >
    > "PO" <po> wrote in message news:[email protected]...
    > > Hi
    > >
    > > Excel 2000
    > >
    > > I use the following wsh script to set the default printer:
    > >
    > >
    > > Dim oNet
    > > Set oNet =WScript.CreateObject("WScript.Network")
    > >
    > > oNet.SetDefaultPrinter("hp LaserJet 1300 PCL 5e")
    > >
    > > Set oNet=nothing
    > >
    > >
    > > (The port name for that printer is DOT4_002)
    > > This works fine and the controlpanel is showing that "hp LaserJet..." is

    > the
    > > default printer. Excel however indicates that the

    > Application.DefaultPrinter
    > > is "unknown". When I set the default printer manually in the

    controlpanel
    > > Excel recognizes the default printer to be "hp LaserJet 1300 PCL 5e on
    > > Ne02:". I don't understand where Excel gets "on Ne02:" from. The

    portname
    > > should be DOT4_002.
    > >
    > > On some computers Excel still prints correctly to the "hp LaserJet...",
    > > however on others Excel reports an error.
    > >
    > > Any ideas?
    > >
    > > TIA
    > > po
    > >
    > >

    >
    >




  4. #4
    Tom Ogilvy
    Guest

    Re: Setting default printer using wsh

    the code is getting its information from sys.ini I believe (or win.ini) [in
    the system or system32 directories] This is a simple text file that you can
    read with your code an pull out the information you need. The .ini file
    preceded the implementation of the registry in early verisons of windows,
    but it is still updated with the information you need.

    The API accesses this file to return the information. If you look at it in
    wordpad, you will see the structure.

    --
    Regards,
    Tom Ogilvy


    "PO" <po> wrote in message news:[email protected]...
    > Thanks Tom
    >
    > The problem is that the code I sent was written in VBScript in a web-page

    so
    > I can't use the API call.
    > The trick to find out the localized setting for "on" was a big help though
    > since some of our companies Excel versions are in Swedish and some in
    > English.
    >
    > However I still need to find out from where to get the correct "suffix",
    > i.e. hp LaserJet on Ne02. It's called Ne02 on my computer and something

    else
    > on other computers. Also the suffix differs depending on which printer I
    > want to set the default printer.
    >
    > Any ideas?
    > Regards
    > po
    >
    > "Tom Ogilvy" <[email protected]> wrote in message
    > news:[email protected]...
    > > previously posted by KeepItCool as indicated:
    > >
    > >
    > >

    >

    http://groups.google.co.uk/groups?se...tcoolnl%40msne
    > ws.microsoft.com&output=gplain
    > >
    > >
    > > This should produce exactly what you're looking for
    > > but note it will NOT work for xl97
    > >
    > > The PrinterFind function will return an array of
    > > localized strings ready to assign to the ActivePrinter.
    > >
    > > I've amended an old post from myself to allow filtering.
    > > see test procedure for example of how to use.
    > > On a userform you could simply use s'th like
    > > cboPrinters.list=PrinterFind
    > >
    > >
    > >
    > >
    > >
    > > Option Explicit
    > >
    > > Private Declare Function GetProfileString Lib "kernel32" _
    > > Alias "GetProfileStringA" (ByVal lpAppName As String, _
    > > ByVal lpKeyName As String, ByVal lpDefault As String, _
    > > ByVal lpReturnedString As String, _
    > > ByVal nSize As Long) As Long
    > >
    > >
    > > Sub Test()
    > > Dim vaList
    > > 'Get all printers
    > > vaList = PrinterFind
    > > 'Show m
    > > MsgBox Join(vaList, vbLf), , "List of printers"
    > >
    > > 'Get all laserjets
    > > vaList = PrinterFind(Match:="Laserjet")
    > >
    > > 'Switch to the first laserjet found
    > > If UBound(vaList) = -1 Then
    > > MsgBox "Printer not found"
    > > ElseIf MsgBox("from " & vbTab & ": " & ActivePrinter & vbLf & _
    > > "to " & vbTab & ": " & vaList(0), _
    > > vbOKCancel, "Switch Printers") = vbOK Then
    > > Application.ActivePrinter = vaList(0)
    > > End If
    > > End Sub
    > >
    > > Public Function PrinterFind(Optional Match As String) As String()
    > > Dim n%, lRet&, sBuf$, sCon$, aPrn$()
    > > Const lLen& = 1024, sKey$ = "devices"
    > >
    > > '------------------------------------------------------------------
    > > 'written by keepITcool
    > >
    > > 'requires xl2000 or newer.
    > > 'returns a zerobased array of complete localized printer strings
    > > 'results are filtered on Match string, if no result the ubound = -1
    > > '------------------------------------------------------------------
    > >
    > > 'Split ActivePrinter string to get localized word for "on"
    > > aPrn = Split(Excel.ActivePrinter)
    > > sCon = " " & aPrn(UBound(aPrn) - 1) & " "
    > >
    > > 'Read all installed printers (1k bytes s/b enough)
    > > sBuf = Space(lLen)
    > > lRet = GetProfileString(sKey, vbNullString, vbNullString, sBuf, lLen)
    > > If lRet = 0 Then
    > > Err.Raise vbObjectError + 513, , "Can't read Profile"
    > > Exit Function
    > > End If
    > >
    > > 'Split buffer string
    > > aPrn = Split(Left(sBuf, lRet - 1), vbNullChar)
    > > 'Filter array on Match
    > > If Match <> vbNullString Then aPrn = Filter(aPrn, Match, -1, 1)
    > >
    > > For n = LBound(aPrn) To UBound(aPrn)
    > > 'Add 16bit portname for each Printer
    > > sBuf = Space(lLen)
    > > lRet = GetProfileString(sKey, aPrn(n), vbNullString, sBuf, lLen)
    > > aPrn(n) = aPrn(n) & sCon & _
    > > Mid(sBuf, InStr(sBuf, ",") + 1, lRet - InStr(sBuf, ","))
    > > Next
    > > 'Return the result
    > > PrinterFind = aPrn
    > >
    > > End Function
    > >
    > > --
    > > Regards,
    > > Tom Ogilvy
    > >
    > > "PO" <po> wrote in message news:[email protected]...
    > > > Hi
    > > >
    > > > Excel 2000
    > > >
    > > > I use the following wsh script to set the default printer:
    > > >
    > > >
    > > > Dim oNet
    > > > Set oNet =WScript.CreateObject("WScript.Network")
    > > >
    > > > oNet.SetDefaultPrinter("hp LaserJet 1300 PCL 5e")
    > > >
    > > > Set oNet=nothing
    > > >
    > > >
    > > > (The port name for that printer is DOT4_002)
    > > > This works fine and the controlpanel is showing that "hp LaserJet..."

    is
    > > the
    > > > default printer. Excel however indicates that the

    > > Application.DefaultPrinter
    > > > is "unknown". When I set the default printer manually in the

    > controlpanel
    > > > Excel recognizes the default printer to be "hp LaserJet 1300 PCL 5e on
    > > > Ne02:". I don't understand where Excel gets "on Ne02:" from. The

    > portname
    > > > should be DOT4_002.
    > > >
    > > > On some computers Excel still prints correctly to the "hp

    LaserJet...",
    > > > however on others Excel reports an error.
    > > >
    > > > Any ideas?
    > > >
    > > > TIA
    > > > po
    > > >
    > > >

    > >
    > >

    >
    >




+ Reply to Thread

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts

Search Engine Friendly URLs by vBSEO 3.6.0 RC 1