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)
ネットワークプリンタだとうまくいかないかもしれません。
簡単な例を挙げると
[code]#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[i]=Asc(",") Then
szDefaultPrinterName[i]=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[i].pPrinterName,szDefaultPrinterName)=0 Then
Print MakeStr(pPrinterInfo[i].pPrinterName);"[Default]"
Else
Print MakeStr(pPrinterInfo[i].pPrinterName)
End If
Next
End If
free(pPrinterInfo)[/code]
ネットワークプリンタだとうまくいかないかもしれません。