Visual Basic .NETÀ» »ç¿ëÇÏ¿© ¿ø½Ã µ¥ÀÌÅ͸¦ ÇÁ¸°ÅÍ·Î º¸³»´Â ¹æ¹ý

±â¼ú ÀÚ·á: 322090 - ÀÌ ¹®¼­°¡ Àû¿ëµÇ´Â Á¦Ç° º¸±â.
¸ðµÎ È®´ë | ¸ðµÎ Ãà¼Ò

ÀÌ ÆäÀÌÁö¿¡¼­

¿ä¾à

ÀÌ ¹®¼­¿¡¼­´Â Win32 »ç¿ëÇÏ´Â ¹æ¹ýÀ» º¸¿© ÁÝ´Ï´Ù Visual Basic .NETÀ» »ç¿ëÇÏ¿© ¸¸µç ÇÁ·Î±×·¥¿¡¼­ ½ºÇ®·¯ ÇÔ¼ö.

ÀÚ¼¼ÇÑ ³»¿ë

Microsoft .NET Framework¿¡¼­ ¿ø½Ã µ¥ÀÌÅ͸¦ ÇÁ¸°ÅÍ·Î º¸³»·Á¸é ÇÁ·Î±×·¥À» Win32 ½ºÇ®·¯ ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© ÀÛ¾÷ÇØ¾ß ÇÕ´Ï´Ù. ÅëÇØ .NET Framework, PrintDocument, PrintController ¹× °ü·ÃµÈ Ŭ·¡½º¸¦ »ç¿ëÇÏ¿© ÀμâÇÒ ¼ö ÀÖ½À´Ï´Ù. ±×·¯³ª .NET Framework¿¡¼­ ¹Ì¸® ¼­½ÄÀÌ Á¤ÀÇµÈ ÇÁ¸°ÅÍ Áغñ µ¥ÀÌÅ͸¦ ÇÁ¸°ÅÍ·Î º¸³¾ ¼ö ¾ø½À´Ï´Ù.

¿ø½Ã µ¥ÀÌÅ͸¦ »ç¿ëÇÏ¿© ´ÙÀ½À» ¼öÇàÇÒ ¼ö ÀÖ´Â ÇÁ¸°ÅÍ·Î º¸³»¾ß ÇÒ ¼ö ÀÖ½À´Ï´Ù.
  • À̽ºÄÉÀÌÇÁ ½ÃÄö½º¸¦ º¸³À´Ï´Ù.
  • ´Ù¿î·Îµå ¹× ¼ÒÇÁÆ® ±Û²ÃÀ» »ç¿ëÇϽʽÿÀ.
  • ¹Ì¸® ÀμâµÈ ÆÄÀÏÀ» ½ºÇ®¸µÇϱ⿡.
ÀÌ·¯ÇÑ Çü½Ä ¹× ´Ù¸¥ Çü½ÄÀÇ ¿ø½Ã µ¥ÀÌÅÍ ÇÁ¸°ÅÍ·Î º¸³»·Á¸é Äڵ带 Win32 ½ºÇ®·¯ ÀÀ¿ë ÇÁ·Î±×·¥ ÇÁ·Î±×·¡¸Ó ÀÎÅÍÆäÀ̽º ÀÛ¾÷À» ¼öÇàÇØ¾ß ÇÕ´Ï´Ù (API). ´ÙÀ½ ÄÚµå´Â ¸Þ¸ð¸®·Î ¹Ì¸® ¼­½ÄÀÌ Á¤ÀÇµÈ ÆÄÀÏÀÇ ³»¿ëÀ» Àаí WritePrinter »ç¿ëÇÏ¿© ÇØ´ç ¹ÙÀÌÆ® ÇÁ¸°ÅÍ·Î º¸³»´Â ¹æ¹ýÀ» º¸¿© ÁÝ´Ï´Ù.

Âü°í: ³×ÀÌÆ¼ºê PrintDocument Àμâ ÀÛ¾÷ µ¿ÀÏÇÑ Àμâ ÀÛ¾÷À¸·Î ÀÖ´Â ÀÌ ¹æ¹ýÀ» »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù. Á÷Á¢ Àμâ ÀÛ¾÷À» º¸³¾ ¼ö ÀÖµµ·Ï .NET Framework Áß Çϳª¸¦ »ç¿ëÇØ¾ß ÇÕ´Ï´Ù.


¹Ì¸® ¼­½ÄÀÌ ÁöÁ¤µÈ µ¥ÀÌÅ͸¦ ÀμâÇÏ´Â ÇÁ·ÎÁ§Æ® ¸¸µé±â

ÇÁ·ÎÁ§Æ®¸¦ ¸¸µé·Á¸é ´ÙÀ½°ú °°ÀÌ ÇϽʽÿÀ.
  1. Visual Studio .NET ½ÃÀÛÇϽʽÿÀ. ÆÄÀÏ ¸Þ´º¿¡¼­ »õ·Î ¸¸µé±â¸¦ Ŭ¸¯ÇÑ ´ÙÀ½ ÇÁ·ÎÁ§Æ® ¸¦ Ŭ¸¯ÇϽʽÿÀ. ÇÁ·ÎÁ§Æ® Çü½ÄVisual Basic ÇÁ·ÎÁ§Æ® Æú´õ¸¦ Ŭ¸¯ÇϽʽÿÀ. ÅÛÇø´ ¸ñ·Ï Windows ÀÀ¿ë ÇÁ·Î±×·¥ À» Ŭ¸¯ÇÑ ´ÙÀ½ È®ÀÎ À» ´©¸¨´Ï´Ù. ±âº»ÀûÀ¸·Î Form1ÀÌ ¸¸µé¾îÁý´Ï´Ù.
  2. º¸±â ¸Þ´º¿¡¼­ µµ±¸ »óÀÚ¸¦ Ç¥½ÃÇÏ°í µµ±¸ »óÀÚ ¸¦ Ŭ¸¯ÇÑ ´ÙÀ½ Form1¿¡ ´ÜÃß ¸¦ Ãß°¡ÇϽʽÿÀ. ÀÌ ´ÜÃß´Â Button1À» À̶ó´Â °ÍÀÔ´Ï´Ù.
  3. ´Ù¸¥ ´ÜÃß ¸¦ Form1¿¡ Ãß°¡ÇϽʽÿÀ. ÀÌ ´ÜÃß´Â Button2°¡ ¸í¸íµË´Ï´Ù.
  4. Button1 À» µÎ ¹ø Ŭ¸¯ÇϽʽÿÀ. Æû¿¡ ´ëÇÑ ÄÚµå âÀÌ ³ªÅ¸³³´Ï´Ù.
  5. Button1_Click ¼­ºê·çƾ ´ÙÀ½ ÄÚµå·Î ¹Ù²ß´Ï´Ù:
        ' Click event handler for a button - designed to show how to use the
        ' SendFileToPrinter and SendBytesToPrinter functions.
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            ' Allow the user to select a file.
            Dim ofd As New OpenFileDialog()
            If ofd.ShowDialog(Me) Then
                ' Allow the user to select a printer.
                Dim pd As New PrintDialog()
                pd.PrinterSettings = New PrinterSettings()
                If (pd.ShowDialog() = DialogResult.OK) Then
                    ' Print the file to the printer.
                    RawPrinterHelper.SendFileToPrinter(pd.PrinterSettings.PrinterName, ofd.FileName)
                End If
            End If
        End Sub ' Button1_Click()
    					
  6. Button2_Click ¼­ºê·çƾÀ» ´ÙÀ½ ÄÚµå·Î ¹Ù²ß´Ï´Ù:
        ' Click event handler for a button - designed to show how to use the
        ' SendBytesToPrinter function to send a string to the printer.
        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            Dim s As String
            Dim pd As New PrintDialog()
    
            ' You need a string to send.
            s = "Hello, this is a test"
            ' Open the printer dialog box, and then allow the user to select a printer.
            pd.PrinterSettings = New PrinterSettings()
            If (pd.ShowDialog() = DialogResult.OK) Then
                RawPrinterHelper.SendStringToPrinter(pd.PrinterSettings.PrinterName, s)
            End If
        End Sub ' Button2_Click()
    					
  7. ÆÄÀÏ ¸Ç À§¿¡ ´ÙÀ½ Äڵ带 »ðÀÔÇϽʽÿÀ:
    Imports System.IO
    Imports System.Drawing.Printing
    Imports System.Runtime.InteropServices
    					
  8. Add the following code inside the main application namespace but outside any class definitions:
    Public Class RawPrinterHelper
        ' Structure and API declarions:
        <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)> _
        Structure DOCINFOW
            <MarshalAs(UnmanagedType.LPWStr)> Public pDocName As String
            <MarshalAs(UnmanagedType.LPWStr)> Public pOutputFile As String
            <MarshalAs(UnmanagedType.LPWStr)> Public pDataType As String
        End Structure
    
        <DllImport("winspool.Drv", EntryPoint:="OpenPrinterW", _
           SetLastError:=True, CharSet:=CharSet.Unicode, _
           ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
        Public Shared Function OpenPrinter(ByVal src As String, ByRef hPrinter As IntPtr, ByVal pd As Long) As Boolean
        End Function
        <DllImport("winspool.Drv", EntryPoint:="ClosePrinter", _
           SetLastError:=True, CharSet:=CharSet.Unicode, _
           ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
        Public Shared Function ClosePrinter(ByVal hPrinter As IntPtr) As Boolean
        End Function
        <DllImport("winspool.Drv", EntryPoint:="StartDocPrinterW", _
           SetLastError:=True, CharSet:=CharSet.Unicode, _
           ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
        Public Shared Function StartDocPrinter(ByVal hPrinter As IntPtr, ByVal level As Int32, ByRef pDI As DOCINFOW) As Boolean
        End Function
        <DllImport("winspool.Drv", EntryPoint:="EndDocPrinter", _
           SetLastError:=True, CharSet:=CharSet.Unicode, _
           ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
        Public Shared Function EndDocPrinter(ByVal hPrinter As IntPtr) As Boolean
        End Function
        <DllImport("winspool.Drv", EntryPoint:="StartPagePrinter", _
           SetLastError:=True, CharSet:=CharSet.Unicode, _
           ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
        Public Shared Function StartPagePrinter(ByVal hPrinter As IntPtr) As Boolean
        End Function
        <DllImport("winspool.Drv", EntryPoint:="EndPagePrinter", _
           SetLastError:=True, CharSet:=CharSet.Unicode, _
           ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
        Public Shared Function EndPagePrinter(ByVal hPrinter As IntPtr) As Boolean
        End Function
        <DllImport("winspool.Drv", EntryPoint:="WritePrinter", _
           SetLastError:=True, CharSet:=CharSet.Unicode, _
           ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
        Public Shared Function WritePrinter(ByVal hPrinter As IntPtr, ByVal pBytes As IntPtr, ByVal dwCount As Int32, ByRef dwWritten As Int32) As Boolean
        End Function
    
        ' SendBytesToPrinter()
        ' When the function is given a printer name and an unmanaged array of  
        ' bytes, the function sends those bytes to the print queue.
        ' Returns True on success or False on failure.
        Public Shared Function SendBytesToPrinter(ByVal szPrinterName As String, ByVal pBytes As IntPtr, ByVal dwCount As Int32) As Boolean
            Dim hPrinter As IntPtr      ' The printer handle.
            Dim dwError As Int32        ' Last error - in case there was trouble.
            Dim di As DOCINFOW          ' Describes your document (name, port, data type).
            Dim dwWritten As Int32      ' The number of bytes written by WritePrinter().
            Dim bSuccess As Boolean     ' Your success code.
    
            ' Set up the DOCINFO structure.
            With di
                .pDocName = "My Visual Basic .NET RAW Document"
                .pDataType = "RAW"
            End With
            ' Assume failure unless you specifically succeed.
            bSuccess = False
            If OpenPrinter(szPrinterName, hPrinter, 0) Then
                If StartDocPrinter(hPrinter, 1, di) Then
                    If StartPagePrinter(hPrinter) Then
                        ' Write your printer-specific bytes to the printer.
                        bSuccess = WritePrinter(hPrinter, pBytes, dwCount, dwWritten)
                        EndPagePrinter(hPrinter)
                    End If
                    EndDocPrinter(hPrinter)
                End If
                ClosePrinter(hPrinter)
            End If
            ' If you did not succeed, GetLastError may give more information
            ' about why not.
            If bSuccess = False Then
                dwError = Marshal.GetLastWin32Error()
            End If
            Return bSuccess
        End Function ' SendBytesToPrinter()
    
        ' SendFileToPrinter()
        ' When the function is given a file name and a printer name, 
        ' the function reads the contents of the file and sends the
        ' contents to the printer.
        ' Presumes that the file contains printer-ready data.
        ' Shows how to use the SendBytesToPrinter function.
        ' Returns True on success or False on failure.
        Public Shared Function SendFileToPrinter(ByVal szPrinterName As String, ByVal szFileName As String) As Boolean
            ' Open the file.
            Dim fs As New FileStream(szFileName, FileMode.Open)
            ' Create a BinaryReader on the file.
            Dim br As New BinaryReader(fs)
            ' Dim an array of bytes large enough to hold the file's contents.
            Dim bytes(fs.Length) As Byte
            Dim bSuccess As Boolean
            ' Your unmanaged pointer.
            Dim pUnmanagedBytes As IntPtr
    
            ' Read the contents of the file into the array.
            bytes = br.ReadBytes(fs.Length)
            ' Allocate some unmanaged memory for those bytes.
            pUnmanagedBytes = Marshal.AllocCoTaskMem(fs.Length)
            ' Copy the managed byte array into the unmanaged array.
            Marshal.Copy(bytes, 0, pUnmanagedBytes, fs.Length)
            ' Send the unmanaged bytes to the printer.
            bSuccess = SendBytesToPrinter(szPrinterName, pUnmanagedBytes, fs.Length)
            ' Free the unmanaged memory that you allocated earlier.
            Marshal.FreeCoTaskMem(pUnmanagedBytes)
            Return bSuccess
        End Function ' SendFileToPrinter()
    
        ' When the function is given a string and a printer name,
        ' the function sends the string to the printer as raw bytes.
        Public Shared Function SendStringToPrinter(ByVal szPrinterName As String, ByVal szString As String)
            Dim pBytes As IntPtr
            Dim dwCount As Int32
            ' How many characters are in the string?
            dwCount = szString.Length()
            ' Assume that the printer is expecting ANSI text, and then convert
            ' the string to ANSI text.
            pBytes = Marshal.StringToCoTaskMemAnsi(szString)
            ' Send the converted ANSI string to the printer.
            SendBytesToPrinter(szPrinterName, pBytes, dwCount)
            Marshal.FreeCoTaskMem(pBytes)
        End Function
    End Class
    					
  9. ºôµåÇÏ°í ´ÙÀ½ ÇÁ·Î±×·¥À» ½ÇÇàÇÏ·Á¸é F5 ۸¦ ´©¸¨´Ï´Ù.
  10. ·ÎµåÇÒ ÆÄÀÏÀÇ ³»¿ëÀ» ÀμâÇÏ·Á¸é Button1 Ŭ¸¯ÇϽʽÿÀ.
  11. ¹®ÀÚ¿­À» ÀμâÇÏ·Á¸é Button2 Ŭ¸¯ÇϽʽÿÀ. ¹®ÀÚ¿­ ¾øÀÌ formfeed ¸í·ÉÀÌ Àü¼ÛµÇ¹Ç·Î ÆäÀÌÁö¸¦ ¼öµ¿À¸·Î ²¨³»±â ÇÒ ¼ö ÀÖ½À´Ï´Ù.

ÂüÁ¶

Ãß°¡ Á¤º¸´Â ´ÙÀ½ ¹®¼­ ¹øÈ£¸¦ Ŭ¸¯ÇÏ¿© Microsoft ±â¼ú ÀÚ·á¿¡¼­ È®ÀÎÇϽʽÿÀ:
138594Win32 API¸¦ »ç¿ëÇÏ¿© ¿ø½Ã µ¥ÀÌÅ͸¦ ÇÁ¸°ÅÍ·Î º¸³»´Â ¹æ¹ý

¼Ó¼º

±â¼ú ÀÚ·á: 322090 - ¸¶Áö¸· °ËÅä: 2007³â 3¿ù 29ÀÏ ¸ñ¿äÀÏ - ¼öÁ¤: 7.4
º» ¹®¼­ÀÇ Á¤º¸´Â ´ÙÀ½ÀÇ Á¦Ç°¿¡ Àû¿ëµË´Ï´Ù.
  • Microsoft .NET Framework Software Development Kit 1.0 Service Pack 2
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Windows XP Professional
  • the operating system: Microsoft Windows XP 64-Bit Edition
Ű¿öµå:?
kbmt kbdswgdi2003swept kbhowtomaster KB322090 KbMtko
±â°è ¹ø¿ªµÈ ¹®¼­
Áß¿ä: º» ¹®¼­´Â Àü¹® ¹ø¿ª°¡°¡ ¹ø¿ªÇÑ °ÍÀÌ ¾Æ´Ï¶ó Microsoft ±â°è ¹ø¿ª ¼ÒÇÁÆ®¿þ¾î·Î ¹ø¿ªÇÑ °ÍÀÔ´Ï´Ù. Microsoft´Â ¹ø¿ª°¡°¡ ¹ø¿ªÇÑ ¹®¼­ ¹× ±â°è ¹ø¿ªµÈ ¹®¼­¸¦ ¸ðµÎ Á¦°øÇϹǷΠMicrosoft ±â¼ú ÀÚ·á¿¡ ÀÖ´Â ¸ðµç ¹®¼­¸¦ Çѱ۷ΠÁ¢ÇÒ ¼ö ÀÖ½À´Ï´Ù. ±×·¯³ª ±â°è ¹ø¿ª ¹®¼­°¡ Ç×»ó ¿Ïº®ÇÑ °ÍÀº ¾Æ´Õ´Ï´Ù. µû¶ó¼­ ±â°è ¹ø¿ª ¹®¼­¿¡´Â ¸¶Ä¡ ¿Ü±¹ÀÎÀÌ Çѱ¹¾î·Î ¸»ÇÒ ¶§ ½Ç¼ö¸¦ ÇÏ´Â °Íó·³ ¾îÈÖ, ±¸¹® ¶Ç´Â ¹®¹ý¿¡ ¿À·ù°¡ ÀÖÀ» ¼ö ÀÖ½À´Ï´Ù. Microsoft´Â ³»¿ë»óÀÇ ¿À¿ª ¶Ç´Â Microsoft °í°´ÀÌ ÀÌ·¯ÇÑ ¿À¿ªÀ» »ç¿ëÇÔÀ¸·Î½á ¹ß»ýÇÏ´Â ºÎ Á¤È®¼º, ¿À·ù ¶Ç´Â ¼ÕÇØ¿¡ ´ëÇØ Ã¥ÀÓÀ» ÁöÁö ¾Ê½À´Ï´Ù. Microsoft´Â ÀÌ·¯ÇÑ ¹®Á¦¸¦ ÇØ°áÇϱâ À§ÇØ ±â°è ¹ø¿ª ¼ÒÇÁÆ®¿þ¾î¸¦ ÀÚÁÖ ¾÷µ¥ÀÌÆ®Çϰí ÀÖ½À´Ï´Ù.

Çǵå¹é º¸³»±â