|
|
|
VB问题全功略(46) |
[上一页](46)[下一页] |
226、如何知道您的机器中预设打印机的机型、驱动程序及连接端口?(二) 227、如何在程序中更改预设的打印机? 228、如何读取及设定
NumLock / CapsLock / ScrollLock 的值? 229、如何在
Windows95/98 中如何自动结束由 Shell 启动之 DOS 视窗? 230、如何开启文件属性窗口
226、如何知道您的机器中预设打印机的机型、驱动程序及连接端口?(二)
在 问题: 如何知道您的机器中预设打印机的机型、驱动程序及连接端口 中我们曾经提过使用
GetProfileString API 到 Win.ini 文件中抓取这些资料,其实如果不使用 API,我们还是可以使用 Printer
物件很轻易的就得到我们要的资料!
Printer
物件有很多个属性,其中三个是:
DeviceName:返回驱动程序支持的周边设备名称。 DriverName:返回
Printer 物件的驱动程序名称。 Port:返回连接端口。
使用实例如下:
Private Sub
Command1_Click() Debug.Print Printer.DeviceName Debug.Print
Printer.DriverName Debug.Print Printer.Port End Sub Printer
物件还有很多好用的属性及方法,例如设定打印机的打印方向 (Orientation)、纸张大小 (PaperSize)、打印份数
(Copies)、打印品质 (PrintQuality)、放大缩小 (Zoom)...等,大家可以自行到线上手册或 Msdn
上查询!
227、如何在程序中更改预设的打印机?
在上一个单元中,我们使用 Printer
物件来取得机器中预设打印机的机型、驱动程序及连接端口,那是否可以更改预设打印机呢?可以的,不过除了 Printer 物件之外,这次我们要多用一个
Printers 集合物件!
先来看一段程序码:
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)
相同!
使用者在 Combo1 中选定打印机后,在 Command1_Click 中,我们便可以将 Combo1
的索引值带入Printers
集合物件的索引值,重新设定新的预设打印机。
这样子的设定只有在程序中有效,程序结束后,预设打印机会恢复成原来的预设打印机!
228、如何读取及设定 NumLock / CapsLock / ScrollLock 的值?
若只是要取得这三个按键 (NumLock / CapsLock / ScrollLock)
的状态,只要呼叫 GetKeyState API 就可以了! 若是要设定这三个按键的状态,则要呼叫 GetKeyboardState 及
SetKeyboardState 二个 API!
在表单的声明区中,加入以下的声明及模组:
Private
Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As
Integer Private Declare Function GetKeyboardState Lib "user32"
(pbKeyState As Byte) As Long Private Declare Function SetKeyboardState
Lib "user32" (lppbKeyState As Byte) As Long
Private Sub
SetKeyState(intKey As Integer, fTurnOn As
Boolean) '取得键盘目前的状态,设定您想设定的任意键,再将其他键还成之前的状态,只改变一个键值 Dim abytBuffer(0
To 255) As Byte GetKeyboardState abytBuffer(0) abytBuffer(intKey) =
CByte(Abs(fTurnOn)) SetKeyboardState abytBuffer(0) End
Sub
Function GetCapslock() As Boolean '返回 Capslock
的状态 GetCapslock = CBool(GetKeyState(vbKeyCapital) And 1) End
Function
Function GetNumlock() As Boolean '返回 Numlock
的状态 GetNumlock = CBool(GetKeyState(vbKeyNumlock) And 1) End
Function
Function GetScrollLock() As Boolean '返回 ScrollLock
的状态 GetScrollLock = CBool(GetKeyState(vbKeyScrollLock) And 1) End
Function
Sub SetCapslock(Value As Boolean) '设定 Capslock
的状态 Call SetKeyState(vbKeyCapital, Value) End Sub
Sub
SetNumlock(Value As Boolean) '设定 Numlock 的状态 Call
SetKeyState(vbKeyNumlock, Value) End Sub
Sub SetScrollLock(Value
As Boolean) '设定 ScrollLock 的状态 Call SetKeyState(vbKeyScrollLock,
Value) End Sub 实际运用的方式如下:
Private Sub
Command1_Click() SetScrollLock True ' 设定 ScrollLock 为 On End
Sub
Private Sub Command2_Click() MsgBox "ScrollLock:" &
GetScrollLock ' 取得 ScrollLock 状态 End Sub
229、如何在 Windows95/98 中如何自动结束由 Shell 启动之 DOS 视窗?
以前,在 Windows 3.1、Windows for Workgroups 3.11 及
Windows NT 3.51 中,当您从 VB 程序中使用 Shell 去启动一个 Batch 文件或 MS-DOS 程序,当 Batch 文件或
MS-DOS 程序结束后,会自动关闭 DOS 视窗。
但是,到了 Windows 95/98 之后,自动关闭的功能不见了,所以当您使用
Shell 去启动一个 Batch 文件或 MS-DOS 程序之后,总是会留下一个 DOS 视窗在工作列中,还要使用者自己去将这个 DOS
视窗关闭。
要避免这种情形发生,其实很简单,只要在您原来执行的 Shell 指令中加上 "/C"
就可以了!语法如下:
h = Shell("COMMAND.COM /C <pathname>")
加上
"/C" 之后,在 Windows 95/98 中 DOS 视窗便会自动关闭,而在 在 Windows 3.1、Windows for
Workgroups 3.11 及 Windows NT 3.51 中也不会有问题产生!
看个实例吧:
Private
Sub Command1_Click() h = Shell("COMMAND.COM /C
c:\windows\command\edit.com") End Sub 当您结束 Edit.com 时,DOS 视窗便会自动关闭!
230、如何开启文件属性窗口
声明: Type SHELLEXECUTEINFO cbSize As Long fMask As Long hwnd
As Long lpVerb As String lpFile As String lpParameters As
String lpDirectory As String nShow As Long hInstApp As
Long lpIDList As Long lpClass As String hkeyClass As
Long dwHotKey As Long hIcon As Long hProcess As Long End
Type
Public Const SEE_MASK_INVOKEIDLIST = &HC Public Const
SEE_MASK_NOCLOSEPROCESS = &H40 Public Const SEE_MASK_FLAG_NO_UI =
&H400
Declare Function ShellExecuteEX Lib "shell32.dll" Alias
"ShellExecuteEx" (SEI As SHELLEXECUTEINFO) As Long
代码: ' 使用:
ShowProps("c:\command.com",Me.hWnd) Public Sub ShowProps(FileName As
String, OwnerhWnd As Long) Dim SEI As SHELLEXECUTEINFO Dim r As
Long With SEI .cbSize = Len(SEI) .fMask = SEE_MASK_NOCLOSEPROCESS
Or SEE_MASK_INVOKEIDLIST Or SEE_MASK_FLAG_NO_UI .hwnd =
OwnerhWnd .lpVerb = "properties" .lpFile = FileName .lpParameters
= vbNullChar .lpDirectory = vbNullChar .nShow = 0 .hInstApp =
0 .lpIDList = 0 End With r = ShellExecuteEX(SEI) End Sub
|
|