Avatar billede lrp Nybegynder
01. november 2002 - 10:42 Der er 2 kommentarer og
2 løsninger

Liste over delte printere på netværk

Er det muligt at lave et VB-program, der kan give mig en liste over alle delte printere på et netværk?

Ved at søge lidt på nettet har jeg fundet forskellige måder, hvorpå man kan få vist de aktuelle printertilslutninger på en workstation - har man fx 2 netværksprintere tilsluttet, får man altså vist share-navne mv. på disse 2 printere.

Men jeg er interesseret i at få vist en liste med ALLE delte printere, som det er muligt at tilslutte til - også selvom de ikke er tilsluttet.

Kan det lade sig gøre? I så fald - hvordan? Hvis ikke - hvorfor ikke?
Avatar billede webcon Nybegynder
02. november 2002 - 00:40 #1
\'Du skal bruge en form med en Commandoknap(Command1) og en ListBox(List1)
Private Sub Form_Activate()
List1.Clear
Dim i%
For i = 0 To Printers.Count - 1
List1.AddItem Printers(i).DeviceName & \": \" & Printers(i).Port
Next i
End Sub

Private Sub List1_Click()
Set Printer = Printers(List1.ListIndex)
Printer.Print \"test Text\" \'Her læges formularen
Printer.EndDoc
End Sub
Avatar billede chris2k Nybegynder
02. november 2002 - 21:50 #2
Du skal ud og browse på nettet, og søge efter printerne... Hvis du har et stort netværk kan dette godt blive et problem, da det vil tage 10 mins tid...

Hvad skal du bruge det til? Skal brugeren kunne selecte en printer på nettet eller hvad? Hvis det da er sådan, så er der en meget nememre måde at gøre det på... Let me know...
Avatar billede lrp Nybegynder
05. november 2002 - 09:57 #3
Beklager den langsomme respons fra min side...

Det er rent faktisk i Visual Basic for Applications (under Excel 2000) at koden skal virke - det fik jeg desværre ikke skrevet i første omgang. Webcon's kode kan derfor ikke umiddelbart bruges, da jeg - såvidt jeg kan se - ikke har adgang til klassen "Printers".

Brugeren skal have mulighed for at lave en tilslutning til en hvilken som helst printer på netværket. Det ville være let nok, hvis jeg havde en liste over alle tilgængelige printere - men der bliver jævnligt opsat nye/flyttet printere i netværket, og derfor ville det være mest praktisk at scanne hele netværket igennem - men hvis det kan tage 10 minutter eller mere, er det nok en dårlig idé... Netværket består af ca. 600 arbejdsstationer, ca. 10 filservere og ca. 20 netværksprintere.
Avatar billede chris2k Nybegynder
05. november 2002 - 18:17 #4
Her er noget kode, taget direkte fra www.mvps.org/vbnet:

'---- FORM CODE -----

Option Explicit

Private Sub Command1_Click()

  Dim bi As BROWSEINFO
  Dim pidl As Long
  Dim path As String
  Dim pos As Integer
   
  Label1.Caption = ""

'Fill the BROWSEINFO structure with the
'needed data. To accomodate comments, the
'With/End With sytax has not been used, though
'it should be your 'final' version.

'hwnd of the window that receives messages
'from the call. Can be your application
'or the handle from GetDesktopWindow().
  bi.hOwner = Me.hWnd

'Pointer to the item identifier list specifying
'the location of the "root" folder to browse from.
'If NULL, the desktop folder is used.
  bi.pidlRoot = 0&

'message to be displayed in the Browse dialog
  bi.lpszTitle = "Select your Windows\System\ directory"

'the type of folder to return.
  bi.ulFlags = BIF_BROWSEFORPRINTER
 
'show the browse for folders dialog
  pidl = SHBrowseForFolder(bi)

'the dialog has closed, so parse & display the
'user's returned folder selection contained in pidl
  path = Space$(MAX_PATH)
   
  If SHGetPathFromIDList(ByVal pidl, ByVal path) Then
    pos = InStr(path, Chr$(0))
    Label1.Caption = Left(path, pos - 1)
  End If

  Call CoTaskMemFree(pidl)
 
End Sub


Private Sub Command2_Click()

  Unload Me
 
End Sub
'--end block--'

'------ MODULE CODE -----
Option Explicit

Public Type BROWSEINFO
  hOwner          As Long
  pidlRoot        As Long
  pszDisplayName  As String
  lpszTitle        As String
  ulFlags          As Long
  lpfn            As Long
  lParam          As Long
  iImage          As Long
End Type

Public Const BIF_RETURNONLYFSDIRS = &H1
Public Const BIF_DONTGOBELOWDOMAIN = &H2
Public Const BIF_STATUSTEXT = &H4
Public Const BIF_RETURNFSANCESTORS = &H8
Public Const BIF_BROWSEFORCOMPUTER = &H1000
Public Const BIF_BROWSEFORPRINTER = &H2000
Public Const MAX_PATH = 260

Public Declare Function SHGetPathFromIDList Lib "shell32" _
  Alias "SHGetPathFromIDListA" _
  (ByVal pidl As Long, _
  ByVal pszPath As String) As Long

Public Declare Function SHBrowseForFolder Lib "shell32" _
  Alias "SHBrowseForFolderA" _
  (lpBrowseInfo As BROWSEINFO) As Long

Public Declare Sub CoTaskMemFree Lib "ole32" _
  (ByVal pv As Long)
'--end block--'

Har desværre ikke haft tid til at teste det, men har selv brugt dette, og det virker ganske udmærket... Hvis du har problemer med at forstå de forskellige ting, så sig endeligt til.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester