2008年8月18日星期一

vb技巧3

获得系统中的所有字体列表
在Form1中加入一个ListBox,并在Form1中加入如下代码:
Private Sub Form_Load()
Dim counter As Integer

For counter = 0 To Screen.FontCount - 1
List1.AddItem Screen.Fonts(counter)
Next
End Sub

Private Sub List1_Click()
Static tempheight As Single

If tempheight = 0 Then tempheight = List1.Height
List1.Font.Name = List1.List(List1.ListIndex)
List1.Height = tempheight
End Sub
返回
如何关闭一个程序
下面演示如何利用FindWindow函数找到窗口并利用SendMessage函数关闭窗口
在Form1中加入如下代码:
Private Declare Function FindWindow Lib "user32" Alias _
"FindWindowA" (ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long

Private Declare Function PostMessage Lib "user32" Alias _
"PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, _
ByVal wParam As Long, lParam As Any) As Long

Const WM_CLOSE = &H10

Private Sub Form_Click()
Dim winHwnd As Long
Dim RetVal As Long

winHwnd = FindWindow(vbNullString, "Form1")
Debug.Print winHwnd

If winHwnd <> 0 Then
RetVal = PostMessage(winHwnd, WM_CLOSE, 0&, 0&)
If RetVal = 0 Then
MsgBox "发送消息错误."
End If
Else
MsgBox "Form1窗口不存在"
End If
End Sub
运行程序,点击Form1,窗口就被关闭
返回

获得当前用户名
在Form1中加入如下代码:
Private Declare Function GetUserName Lib "advapi32.dll" Alias _
"GetUserNameA" (ByVal lpBuffer As String, nSize As Long) _
As Long

Private Sub Form_Load()
Dim s As String
Dim cnt As Long
Dim dl As Long
Dim CurUser As String

cnt = 199
s = String$(200, 0)
dl = GetUserName(s, cnt)
If dl <> 0 Then CurUser = Left$(s, cnt) Else CurUser = ""
Debug.Print CurUser
End Sub
返回

获得Windows启动方式
在Form1中加入一个CommandButton、一个Label并加入如下代码
Option Explicit

Private Declare Function GetSystemMetrics Lib "user32" _
(ByVal nIndex As Long) As Long

Const SM_CLEANBOOT = 67

Private Sub Command1_Click()
Select Case GetSystemMetrics(SM_CLEANBOOT)
Case 1: Label1 = "安全模式."
Case 2: Label1 = "支持网络的安全模式."
Case Else: Label1 = "Windows运行在普通模式."
End Select
End Sub
点击Command1就可以看到Windows是以何种方式启动的。
返回

如何交换鼠标按键
在程序中定义如下API函数
Declare Function SwapMouseButton& Lib "user32" _
(ByVal bSwap as long)

要交换鼠标按键,将bSwap参数设置为True。要恢复正常设置,将bSwap设置为False。
然后调用函数就可以交换和恢复鼠标按键了。
返回

怎样关闭Windows
使用ExitWindowsEx函数,函数有两个参数确定如何关闭Windows,其中第二个参数未使用
设置为0

Public Const EWX_LOGOFF = 0
Public Const EWX_SHUTDOWN = 1
Public Const EWX_REBOOT = 2
Public Const EWX_FORCE = 4
Declare Function ExitWindowsEx Lib "user32" Alias _
"ExitWindowsEx" (ByVal uFlags As Long, ByVal dwReserved _
As Long) As Long

If you wanted to forcefully reboot the computer use the following code:
如果想强制重新启动计算机,函数应该这样使用:
t& = ExitWindowsEx(EWX_FORCE OR EWX_REBOOT, 0)
返回

如何获得Windows95已经运行的时间
要获得Windows95运行的时间,使用以下函数:
Declare Function GetTickCount& Lib "kernel32" ()
函数返回的是以毫秒计算的时间。
在16位Windows下,使用GetCurrentTime 函数。
返回

翻转一个字符串
下面的函数利用递归原理获得字符串的翻转字符串
Function reversestring(revstr As String) As String
' revstr: 要翻转的字符串
' 返回值:翻转后的字符串

Dim doreverse As Long

reversestring = ""
For doreverse = Len(revstr) To 1 Step -1
reversestring = reversestring & Mid$(revstr, doreverse, 1)
Next

End Function
返回

获得、设置鼠标双击间隔时间
获得鼠标双击间隔时间:
Public Declare Function GetDoubleClickTime Lib "user32" Alias _
"GetDoubleClickTime" () As Long
函数返回以毫秒为单位的鼠标双击间隔时间。
设置鼠标双击间隔时间
Declare Function SetDoubleClickTime Lib "user32" Alias _
"SetDoubleClickTime" (ByVal wCount As Long) As Long
其中的参数wCount为以毫秒为单位的新的时间间隔的长度。
返回

10 获得系统中鼠标的键数
获得系统中鼠标支持的键数(两键或三键),首先在程序中做如下定义:
Declare Function GetSystemMetrics Lib "user32" Alias _
"GetSystemMetrics" (ByVal nIndex As Long) As Long

Public Const SM_CMOUSEBUTTONS = 43
然后在程序中调用GetSystemMetrics函数
number& = GetSystemMetrics(SM_CMOUSEBUTTONS)
返回值为系统支持的鼠标键数(返回0,则系统中没有安装鼠标:-) )
下面是GetSystemMetrics函数参数nIndex的定义:

SM_ARRANGE Flags specifying how the system arranged minimized windows. For more information about minimized windows, see the following Remarks section.
SM_CLEANBOOT 返回系统启动方式:
0 正常启动
1 安全模式启动
2 网络安全模式启动
SM_CMOUSEBUTTONS 返回值为系统支持的鼠标键数,返回0,则系统中没有安装鼠标。
SM_CXBORDER,
SM_CYBORDER 返回以相素值为单位的Windows窗口边框的宽度和高度,如果Windows的为3D形态,则
等同于SM_CXEDGE参数
SM_CXCURSOR,
SM_CYCURSOR 返回以相素值为单位的标准光标的宽度和高度
SM_CXDLGFRAME,
SM_CYDLGFRAME 等同与SM_CXFIXEDFRAME and SM_CYFIXEDFRAME
SM_CXDOUBLECLK,
SM_CYDOUBLECLK 以相素值为单位的双击有效的矩形区域
SM_CXEDGE,SM_CYEDGE 以相素值为单位的3D边框的宽度和高度
SM_CXFIXEDFRAME,
SM_CYFIXEDFRAME 围绕具有标题但无法改变尺寸的窗口(通常是一些对话框)的边框的厚度
SM_CXFRAME,SM_CYFRAME 等同于SM_CXSIZEFRAME and SM_CYSIZEFRAME
SM_CXFULLSCREEN,
SM_CYFULLSCREEN 全屏幕窗口的窗口区域的宽度和高度
SM_CXHSCROLL,
SM_CYHSCROLL 水平滚动条的高度和水平滚动条上箭头的宽度
SM_CXHTHUMB 以相素为单位的水平滚动条上的滑动块宽度
SM_CXICON,SM_CYICON 系统缺省的图标的高度和宽度(一般为32*32)
SM_CXICONSPACING,
SM_CYICONSPACING 以大图标方式查看Item时图标之间的间距,这个距离总是大于等于
SM_CXICON and SM_CYICON.
SM_CXMAXIMIZED,
SM_CYMAXIMIZED 处于顶层的最大化窗口的缺省尺寸
SM_CXMAXTRACK,
SM_CYMAXTRACK 具有可改变尺寸边框和标题栏的窗口的缺省最大尺寸,如果窗口大于这个
尺寸,窗口是不可移动的。
SM_CXMENUCHECK,
SM_CYMENUCHECK 以相素为单位计算的菜单选中标记位图的尺寸
SM_CXMENUSIZE,
SM_CYMENUSIZE 以相素计算的菜单栏按钮的尺寸
SM_CXMIN,SM_CYMIN 窗口所能达到的最小尺寸
SM_CXMINIMIZED,
SM_CYMINIMIZED 正常的最小化窗口的尺寸
SM_CXMINTRACK,
SM_CYMINTRACK 最小跟踪距离,当使用者拖动窗口移动距离小于这个值,窗口不会移动。
SM_CXSCREEN,
SM_CYSCREEN 以相素为单位计算的屏幕尺寸。
SM_CXSIZE,SM_CYSIZE 以相素计算的标题栏按钮的尺寸
SM_CXSIZEFRAME,
SM_CYSIZEFRAME 围绕可改变大小的窗口的边框的厚度
SM_CXSMICON,
SM_CYSMICON 以相素计算的小图标的尺寸,小图标一般出现在窗口标题栏上。
M_CXVSCROLL,
SM_CYVSCROLL 以相素计算的垂直滚动条的宽度和垂直滚动条上箭头的高度
SM_CYCAPTION 以相素计算的普通窗口标题的高度
SM_CYMENU 以相素计算的单个菜单条的高度
SM_CYSMCAPTION 以相素计算的窗口小标题栏的高度
SM_CYVTHUMB 以相素计算的垂直滚动条中滚动块的高度
SM_DBCSENABLED 如果为TRUE或不为0的值表明系统安装了双字节版本的USER.EXE,为FALSE或0则不是。
SM_DEBUG 如果为TRUE或不为0的值表明系统安装了debug版本的USER.EXE,为FALSE或0则不是。
SM_MENUDROPALIGNMENT 如果为TRUE或不为0的值下拉菜单是右对齐的否则是左对齐的。
SM_MOUSEPRESENT 如果为TRUE或不为0的值则安装了鼠标,否则没有安装。
SM_MOUSEWHEELPRESENT 如果为TRUE或不为0的值则安装了滚轮鼠标,否则没有安装。(Windows NT only)
SM_SWAPBUTTON 如果为TRUE或不为0的值则鼠标左右键交换,否则没有。

没有评论: