GetPrinterData

N

news.usinor.com

Hi,

I have some problems to use GetPrinterData Win32 API. I can't get the result
of this API when the ValueName is a REG_SZ or a MULTI_REG_SZ.

Can anybody help me ?

Thanks,

Delfim.

this a part of my code :



<DllImport("winspool.Drv", CharSet:=CharSet.Ansi,
EntryPoint:="GetPrinterDataA", _
SetLastError:=True, ExactSpelling:=True, _
CallingConvention:=CallingConvention.StdCall)> _
Private Shared Function GetPrinterData( _
ByVal hPrinter As IntPtr, _
<MarshalAs(UnmanagedType.LPStr)> ByVal pValueName As String, _
ByRef pType As Integer, _
ByRef pData As IntPtr, _
ByVal nSize As Integer, _
ByRef pcbNeeded As Integer) As Integer
End Function

Public Function GetPrinterData(ByVal PrinterName As String, ByVal ValueName
As String) As Object
Dim hPrinter As IntPtr
Dim pData As IntPtr = IntPtr.Zero
Dim cBuf As Integer
Dim pcbNeeded As Integer
Dim pType As Integer
Dim ret As Integer
Dim oData As Object

hPrinter = OpenPrinter(PrinterName)
ret = GetPrinterData(hPrinter, ValueName, pType, IntPtr.Zero, 0,
pcbNeeded)
If pcbNeeded <= 0 Then
Throw (New System.Exception("Unable to allocate memory"))
End If

pData = Marshal.AllocHGlobal(pcbNeeded)
ret = GetPrinterData(hPrinter, ValueName, pType, pData, pcbNeeded, cBuf)
If ret <> 0 Then
Throw New Win32Exception(Marshal.GetLastWin32Error())
End If

Select Case pType
Case REG_DWORD
oData = pData.ToInt32

Case REG_SZ
oData = pData 'Marshal.PtrToStringAuto(pData)

Case Else
oData = pData
End Select

ClosePrinter(hPrinter)

Return oData
End Function
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top