Nasıl yapılır: hangi yazıcı Ayarla'ı sistem varsayılan yazıcı:

ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.

Makalenin İngilizcesi aşağıdaki gibidir:266767
Bu makale arşivlenmiştir. "Olduğu gibi" sunulmaktadır ve bundan sonra güncelleştirilmeyecektir.
Özet
Bu makalede, programlı olarak hangi yazıcının sistem varsayılan yazıcı ayarlandı gösterilmiştir. Belirli bir yazıcıyı kullanmak için tüm uygulamaları ve bileşenleri seçebilirsiniz. Bu genellikle sistem için varsayılan yazıcı istediğiniz yazıcı, uygulama veya bileşen kullanacak biçimde değiştirmek gerekli sağlar.
Daha fazla bilgi
Not: Bu kod, sistemin tamamı için varsayılan yazıcı değiştirir. Halen çalışmakta olan uygulamalar da bir yazıcı belirtin, böylece tüm uygulamalar aynı Bu varsayılanı kullanın. Bu nedenle, önceki varsayılan unutmayın ve Yazdırma işiniz tamamlandığında geri ayarlayın, kodunuzu olmasını isteyebilirsiniz.

Aşağıdaki kod örneği, hangi yazıcıları kullanılabilir olduğunu ve sistemin varsayılan yazıcı olarak belirtmek için araçlar sağlar.

Adım adım örnek

  1. Yeni bir proje standart exe DOSYASı, Visual Basic'te başlatın. Varsayılan olarak, Form1 oluşturulur.
  2. Projeye yeni bir modül ekleyin ve aşağıdaki kodu ekleyin:
    Public Const HWND_BROADCAST = &HFFFFPublic Const WM_WININICHANGE = &H1A' constants for DEVMODE structurePublic Const CCHDEVICENAME = 32Public Const CCHFORMNAME = 32' constants for DesiredAccess member of PRINTER_DEFAULTSPublic Const STANDARD_RIGHTS_REQUIRED = &HF0000Public Const PRINTER_ACCESS_ADMINISTER = &H4Public Const PRINTER_ACCESS_USE = &H8Public Const PRINTER_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or _PRINTER_ACCESS_ADMINISTER Or PRINTER_ACCESS_USE)' constant that goes into PRINTER_INFO_5 Attributes member' to set it as defaultPublic Const PRINTER_ATTRIBUTE_DEFAULT = 4' Constant for OSVERSIONINFO.dwPlatformIdPublic Const VER_PLATFORM_WIN32_WINDOWS = 1Public Type OSVERSIONINFO    dwOSVersionInfoSize As Long    dwMajorVersion As Long    dwMinorVersion As Long    dwBuildNumber As Long    dwPlatformId As Long    szCSDVersion As String * 128End TypePublic Type DEVMODE     dmDeviceName As String * CCHDEVICENAME     dmSpecVersion As Integer     dmDriverVersion As Integer     dmSize As Integer     dmDriverExtra As Integer     dmFields As Long     dmOrientation As Integer     dmPaperSize As Integer     dmPaperLength As Integer     dmPaperWidth As Integer     dmScale As Integer     dmCopies As Integer     dmDefaultSource As Integer     dmPrintQuality As Integer     dmColor As Integer     dmDuplex As Integer     dmYResolution As Integer     dmTTOption As Integer     dmCollate As Integer     dmFormName As String * CCHFORMNAME     dmLogPixels As Integer     dmBitsPerPel As Long     dmPelsWidth As Long     dmPelsHeight As Long     dmDisplayFlags As Long     dmDisplayFrequency As Long     dmICMMethod As Long        ' // Windows 95 only     dmICMIntent As Long        ' // Windows 95 only     dmMediaType As Long        ' // Windows 95 only     dmDitherType As Long       ' // Windows 95 only     dmReserved1 As Long        ' // Windows 95 only     dmReserved2 As Long        ' // Windows 95 onlyEnd TypePublic Type PRINTER_INFO_5     pPrinterName As String     pPortName As String     Attributes As Long     DeviceNotSelectedTimeout As Long     TransmissionRetryTimeout As LongEnd TypePublic Type PRINTER_DEFAULTS     pDatatype As Long     pDevMode As Long     DesiredAccess As LongEnd TypeDeclare 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 LongDeclare Function WriteProfileString Lib "kernel32" _Alias "WriteProfileStringA" _(ByVal lpszSection As String, _ByVal lpszKeyName As String, _ByVal lpszString As String) As LongDeclare Function SendMessage Lib "user32" _Alias "SendMessageA" _(ByVal hwnd As Long, _ByVal wMsg As Long, _ByVal wParam As Long, _lparam As String) As LongDeclare Function GetVersionExA Lib "kernel32" _(lpVersionInformation As OSVERSIONINFO) As IntegerPublic Declare Function OpenPrinter Lib "winspool.drv" _Alias "OpenPrinterA" _(ByVal pPrinterName As String, _phPrinter As Long, _pDefault As PRINTER_DEFAULTS) As LongPublic Declare Function SetPrinter Lib "winspool.drv" _Alias "SetPrinterA" _(ByVal hPrinter As Long, _ByVal Level As Long, _pPrinter As Any, _ByVal Command As Long) As LongPublic Declare Function GetPrinter Lib "winspool.drv" _Alias "GetPrinterA" _(ByVal hPrinter As Long, _ByVal Level As Long, _pPrinter As Any, _ByVal cbBuf As Long, _pcbNeeded As Long) As LongPublic Declare Function lstrcpy Lib "kernel32" _Alias "lstrcpyA" _(ByVal lpString1 As String, _ByVal lpString2 As Any) As LongPublic Declare Function ClosePrinter Lib "winspool.drv" _(ByVal hPrinter As Long) As Long    Public Sub SelectPrinter(NewPrinter As String)        Dim Prt As Printer                For Each Prt In Printers            If Prt.DeviceName = NewPrinter Then                Set Printer = Prt            Exit For            End If        Next    End Sub					
  3. Bir liste kutusu ve bir KomutDüğmesi Form1'ın getirin.
  4. Form1 genel Tanımlamalar bölümüne aşağıdaki kodu ekleyin:
    Option ExplicitPrivate Function PtrCtoVbString(Add As Long) As String    Dim sTemp As String * 512, x As Long    x = lstrcpy(sTemp, Add)    If (InStr(1, sTemp, Chr(0)) = 0) Then         PtrCtoVbString = ""    Else         PtrCtoVbString = Left(sTemp, InStr(1, sTemp, Chr(0)) - 1)    End IfEnd FunctionPrivate Sub SetDefaultPrinter(ByVal PrinterName As String, _    ByVal DriverName As String, ByVal PrinterPort As String)    Dim DeviceLine As String    Dim r As Long    Dim l As Long    DeviceLine = PrinterName & "," & DriverName & "," & PrinterPort    ' Store the new printer information in the [WINDOWS] section of    ' the WIN.INI file for the DEVICE= item    r = WriteProfileString("windows", "Device", DeviceLine)    ' Cause all applications to reload the INI file:    l = SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0, "windows")End SubPrivate Sub Win95SetDefaultPrinter()    Dim Handle As Long          'handle to printer    Dim PrinterName As String    Dim pd As PRINTER_DEFAULTS    Dim x As Long    Dim need As Long            ' bytes needed    Dim pi5 As PRINTER_INFO_5   ' your PRINTER_INFO structure    Dim LastError As Long    ' determine which printer was selected    PrinterName = List1.List(List1.ListIndex)    ' none - exit    If PrinterName = "" Then        Exit Sub    End If    ' set the PRINTER_DEFAULTS members    pd.pDatatype = 0&    pd.DesiredAccess = PRINTER_ALL_ACCESS Or pd.DesiredAccess    ' Get a handle to the printer    x = OpenPrinter(PrinterName, Handle, pd)    ' failed the open    If x = False Then        'error handler code goes here        Exit Sub    End If    ' Make an initial call to GetPrinter, requesting Level 5    ' (PRINTER_INFO_5) information, to determine how many bytes    ' you need    x = GetPrinter(Handle, 5, ByVal 0&, 0, need)    ' don't want to check Err.LastDllError here - it's supposed    ' to fail    ' with a 122 - ERROR_INSUFFICIENT_BUFFER    ' redim t as large as you need    ReDim t((need \ 4)) As Long    ' and call GetPrinter for keepers this time    x = GetPrinter(Handle, 5, t(0), need, need)    ' failed the GetPrinter    If x = False Then        'error handler code goes here        Exit Sub    End If    ' set the members of the pi5 structure for use with SetPrinter.    ' PtrCtoVbString copies the memory pointed at by the two string    ' pointers contained in the t() array into a Visual Basic string.    ' The other three elements are just DWORDS (long integers) and    ' don't require any conversion    pi5.pPrinterName = PtrCtoVbString(t(0))    pi5.pPortName = PtrCtoVbString(t(1))    pi5.Attributes = t(2)    pi5.DeviceNotSelectedTimeout = t(3)    pi5.TransmissionRetryTimeout = t(4)    ' this is the critical flag that makes it the default printer    pi5.Attributes = PRINTER_ATTRIBUTE_DEFAULT       ' call SetPrinter to set it       X = SetPrinter(Handle, 5, pi5, 0)       If X = False Then   ' SetPrinter failed           MsgBox "SetPrinter Failed. Error code: " & Err.LastDllError           Exit Sub       Else           If Printer.DeviceName <> List1.Text Then           ' Make sure Printer object is set to the new printer                SelectPrinter (List1.Text)           End If       End If    ' and close the handle    ClosePrinter (Handle)End SubPrivate Sub GetDriverAndPort(ByVal Buffer As String, DriverName As _    String, PrinterPort As String)    Dim iDriver As Integer    Dim iPort As Integer    DriverName = ""    PrinterPort = ""    ' The driver name is first in the string terminated by a comma    iDriver = InStr(Buffer, ",")    If iDriver > 0 Then         ' Strip out the driver name        DriverName = Left(Buffer, iDriver - 1)        ' The port name is the second entry after the driver name        ' separated by commas.        iPort = InStr(iDriver + 1, Buffer, ",")        If iPort > 0 Then            ' Strip out the port name            PrinterPort = Mid(Buffer, iDriver + 1, _            iPort - iDriver - 1)        End If    End IfEnd SubPrivate Sub ParseList(lstCtl As Control, ByVal Buffer As String)    Dim i As Integer    Dim s As String    Do        i = InStr(Buffer, Chr(0))        If i > 0 Then            s = Left(Buffer, i - 1)            If Len(Trim(s)) Then lstCtl.AddItem s            Buffer = Mid(Buffer, i + 1)        Else            If Len(Trim(Buffer)) Then lstCtl.AddItem Buffer            Buffer = ""        End If    Loop While i > 0End SubPrivate Sub WinNTSetDefaultPrinter()    Dim Buffer As String    Dim DeviceName As String    Dim DriverName As String    Dim PrinterPort As String    Dim PrinterName As String    Dim r As Long    If List1.ListIndex > -1 Then        ' Get the printer information for the currently selected        ' printer in the list. The information is taken from the        ' WIN.INI file.        Buffer = Space(1024)        PrinterName = List1.Text        r = GetProfileString("PrinterPorts", PrinterName, "", _            Buffer, Len(Buffer))        ' Parse the driver name and port name out of the buffer        GetDriverAndPort Buffer, DriverName, PrinterPort           If DriverName <> "" And PrinterPort <> "" Then               SetDefaultPrinter List1.Text, DriverName, PrinterPort               If Printer.DeviceName <> List1.Text Then               ' Make sure Printer object is set to the new printer                  SelectPrinter (List1.Text)               End If           End If    End IfEnd SubPrivate Sub Command1_Click()    Dim osinfo As OSVERSIONINFO    Dim retvalue As Integer    osinfo.dwOSVersionInfoSize = 148    osinfo.szCSDVersion = Space$(128)    retvalue = GetVersionExA(osinfo)    If osinfo.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS Then        Call Win95SetDefaultPrinter    Else    ' This assumes that future versions of Windows use the NT method        Call WinNTSetDefaultPrinter    End IfEnd SubPrivate Sub Form_Load()    Dim r As Long    Dim Buffer As String    ' Get the list of available printers from WIN.INI    Buffer = Space(8192)    r = GetProfileString("PrinterPorts", vbNullString, "", _       Buffer, Len(Buffer))    ' Display the list of printer in the ListBox List1    ParseList List1, BufferEnd Sub					
  5. Projeyi çalıştırın ve yukarıdaki kodu, tüm kullanılabilir yazıcılar ile bir ListBox doldurur unutmayın.
  6. Listeden bir yazıcı seçin ve KomutDüğmesi Ek Yardım düğmesini tıklatarak varsayılan yapmak.
  7. Varsayılan yazıcı değiştiğini onaylayın: Başlat düğmesindeki, Ayarlar ' ı seçin, Yazıcılar ' ı seçin ve yazıcıyı varsayılan olarak işaretlenmiş denetleyin. Alternatif olarak, bilgisayarınızdaki herhangi bir uygulamadan varsayılan yazıcısına yazdırabilirsiniz.
Referanslar
Ek bilgi için, Microsoft Bilgi Bankası'ndaki makaleleri görüntülemek üzere aşağıdaki makale numaralarını tıklatın:
167735Düzeltme: Madde <a0>Yazıcılar</a0> koleksiyonundaki ayarı yazıcıya başarısız.
253612Düzeltme: Yazıcılar toplama Yazıcılar klasöründeki tüm yazıcıları içerebilir.
246772Al ve Windows'da varsayılan yazıcıyı ayarlama
Genel

Uyarı: Bu makalenin çevirisi otomatik olarak yapılmıştır

Özellikler

Makale No: 266767 - Son İnceleme: 12/05/2015 20:51:49 - Düzeltme: 3.3

Microsoft Visual Basic 4.0 Professional Edition, Microsoft Visual Basic 5.0 Professional Edition, Microsoft Visual Basic 6.0 Professional Edition, Microsoft Visual Basic 4.0 Enterprise Edition, Microsoft Visual Basic 5.0 Enterprise Edition, Microsoft Visual Basic Enterprise Edition for Windows 6.0, Microsoft Visual Basic 5.0 Learning Edition, Microsoft Visual Basic 6.0 Learning Edition

  • kbnosurvey kbarchive kbmt kbapi kbcodesnippet kbgdi kbhowto kbprint kbspooler KB266767 KbMttr
Geri bildirim