プリンタ名の取得

返信する


答えを正確に入力してください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: プリンタ名の取得

by trio » 2007年3月19日(月) 21:47

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

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

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

by 初心者 » 2007年3月19日(月) 18:15

hira様

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

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

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

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

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

by hira » 2007年3月18日(日) 21:55

簡単な例を挙げると

コード: 全て選択

#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)


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

プリンタ名の取得

by 初心者 » 2007年3月14日(水) 18:30

登録されているプリンタ名を取得したいのですが、方法を教えてください。
また、デフォルトプリンタの判別方法もお願いします。

ページトップ