Private Declare Function ShellExecuteAny Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As Any, ByVal lpDirectory As Any, ByVal nShowCmd As Long) As Long
Const SW_SHOWMINNOACTIVE = 7
Sub PrintAnyFile(FileToPrint As String)
Dim Ret As Long
Ret = ShellExecuteAny(Me.hwnd, "print", FileToPrint, ByVal 0&, ByVal 0&, SW_SHOWMINNOACTIVE)
End Sub
'实际使用案例如下:
Private Sub Command1_Click()
PrintAnyFile Text1.Text
End Sub
Private Sub Form_Load()
'利用 Printers 集合物件取得所有打印机
For i = 0 To Printers.Count - 1
'在 Combo1 中依序加入打印机名称
Combo1.AddItem Printers(i).DeviceName
Next
'将目前的预设打印机放在 Combo1.Text 中
Combo1.Text = Printer.DeviceName
End Sub
Private Sub Command1_Click()
'未选择
If Combo1.ListIndex = -1 Then
MsgBox "打印机未更改,请先选择打印机!"
Exit Sub
End If
'使用者选定之打印机设定为预设打印机
Set Printer = Printers(Combo1.listindex)
End Sub
在这一段程序中,我们在 Form_Load 中先利用 Printers 集合物件找出所有的打印机名称,放在 Combo1 中,记得 Combo1 不可将 Sorted 设成 True,这样子的话,Combo1 的索引值 (Index) 便会和 Printers 集合物件的索引值 (Index) 相同!