プリンタ名の取得

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
初心者

プリンタ名の取得

#1 投稿記事 by 初心者 »

登録されているプリンタ名を取得したいのですが、方法を教えてください。
また、デフォルトプリンタの判別方法もお願いします。
hira
記事: 203
登録日時: 2005年5月31日(火) 20:14
お住まい: 兵庫県
連絡する:

#2 投稿記事 by hira »

簡単な例を挙げると

コード: 全て選択

#prompt

Declare Function GetProfileString Lib "kernel32" Alias "GetProfileStringA" (lpAppName As *Byte, lpKeyName As *Byte, lpDefault As *Byte, lpReturnedString As *Byte, nSize As DWord) As DWord

Dim nBufferSize As DWord,nReadSize As DWord
Dim nCount As DWord
Dim pPrinterInfo As *PRINTER_INFO_5
Dim i As Long
Dim szDefaultPrinterName[ELM(1024)] As Byte

GetProfileString("windows","device","",szDefaultPrinterName,1024)
'カンマ以降を削除
i=0
Do
	If szDefaultPrinterName=Asc(",") Then
		szDefaultPrinterName=0
		Exit Do
	End If
	i=i+1
Loop

'プリンタ一覧を返却
EnumPrinters(PRINTER_ENUM_LOCAL,NULL,5,pPrinterInfo,0,nBufferSize,nCount)
pPrinterInfo=malloc(nBufferSize)
EnumPrinters(PRINTER_ENUM_LOCAL,NULL,5,pPrinterInfo,nBufferSize,nReadSize,nCount)

If nCount Then
	For i=0 To nCount-1
		'デフォルトプリンタかどうか調べる
		If lstrcmp(pPrinterInfo.pPrinterName,szDefaultPrinterName)=0 Then
			Print MakeStr(pPrinterInfo.pPrinterName);"[Default]"
		Else
			Print MakeStr(pPrinterInfo.pPrinterName)
		End If
	Next
End If

free(pPrinterInfo)


ネットワークプリンタだとうまくいかないかもしれません。
初心者

#3 投稿記事 by 初心者 »

hira様

ありがとうございます。
とても参考になりました。

しかし、サンプル通りの#promptでは問題無いのですが、フォームを作り同じコードを書くと以下の行で警告が出ます。

EnumPrinters(PRINTER_ENUM_LOCAL,NULL,5,pPrinterInfo,0,nBufferSize,nCount)

[警告] "EnumPrinters"の第4パラメータが、*PRINTER_INFO_5から*Byteに強制変換されています。

動作はしますが気になります。
なんとかならないでしょうか?
trio

#4 投稿記事 by trio »

EnumPrinters(PRINTER_ENUM_LOCAL,NULL,5,pPrinterInfo As *Byte,0,nBufferSize,nCount)

に直せば大丈夫だと思われます(試してませんが)
警告が出る理由に関してはヘルプのキャストの項目を参考にして下さい

今分からなくともそのうち分かるようになるかと
返信する