tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re: AddPrinterDriverがうまくいきません
投稿日: 2010/10/20(Wed) 10:49
投稿者魔界の仮面弁士
AddPrinterDriver の Level は、2, 3, 4, 6, 8 を指定できるはずですが、
今回使用するのは Lavel3 なのですね?


以下、掲示板に直書きしたコードです。未検証。

> Private Declare Function AddPrinterDriver Lib "winspool.drv" Alias "AddPrinterDriverW" _
>                 (ByVal pName As String, _
>                 ByVal Level As Integer, _
>                 ByRef pDriverInfo As DRIVER_INFO_3) As Integer

Private Declare Unicode Function AddPrinterDriver Lib "winspool.drv" _
   (ByVal pName As String, _
    ByVal Level As Integer, _
    ByRef pDriverInfo As DRIVER_INFO_3 _
  ) As <MarshalAs(UnmanagedType.Bool)> Boolean

'DRIVER_INFO_3 を Structure として実装した場合は ByRef pDriverInfo、
'DRIVER_INFO_3 を Class として実装した場合は ByVal pDriverInfo にします。
'戻り値は、元が BOOL 型なので Boolean 型にし、そこに UnmanagedType.Bool を付与します。


> Public Structure DRIVER_INFO_3
>     Public cVersion As Long
>     Public pName As String
>     Public pEnvironment As String
>     Public pDriverPath As String
>     Public pDataFile As String
>     Public pConfigFile As String
>     Public pHelpFile As String
>     Public pDependentFiles As String
>     Public pMonitorName As String
>     Public pDefaultDataType As String
> End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode, Pack:=4)> _
Private Structure DRIVER_INFO_3
    Public cVersion As UInteger
    Public pName As String
    Public pEnvironment As String
    Public pDriverPath As String
    Public pDataFile As String
    Public pConfigFile As String
    Public pHelpFile As String
    Public pDependentFiles As String
    Public pMonitorName As String
    Public pDefaultDataType As String
End Structure

'CharSet は Declare 側と一致させます(Ansi/Unicode/Auto)。
'Pack は…多分 4 で良いと思いますが未調査です。
'cVersion は、元が DWORD なので UInt32 か Int32 型にしてください。


>     Dim di As New DRIVER_INFO_3
Class なら New する必要がありますが、
Structure の場合は New は不要です。本題とは無関係ですが。


>     If AddPrinterDriver(String.Empty, 3, di) = 0 Then
ローカルにインストールする場合には、第 1 引数には
String.Empty ではなく、Nothing を指定してください。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。