主题:[转帖]Windows系统控制(1998-1999收集整理)
凡尘
[专家分:9680] 发布于 2006-02-27 14:24:00
避免按 [ENTER] 键产生的“嘀”声
当你在文本框(Text Box)中输入完信息然后按 [Enter] 键,你就会听到计算机喇叭发出难听的“嘀”声。
你可以通过以下方法避免此声:
假设文本框为 Text1,在 KeyPress 事件中输入以下代码:
Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = Asc(vbCr) Then
KeyAscii = 0
End If
End Sub
当你运行程序后,按 [Enter] 键就再也不会听到那难听的声音了。
VB剪贴板的用法
董平
VB中剪贴板的应用是很重要的,它能使你简化程序并能增强程序功能。下下面就把常用的几个用于VB剪贴板的语句作一介绍:
一、CLEAR(,,STACK&)
用于关闭文件,清除文件缓冲区的内容和其它一些设置初始值的工作。其中STACK&为设置堆栈大小。
二、CLIPBOARD.GETDATA([FORMAT])
从剪板中返回一个图片。其中FORMAT的值有2、3、8、9具体对应请参照文末的表格。
三、CLIPBOARD.GETFROMAT(FORMAT)
返回TRUE&FALSE,指示剪贴板中是否是指定的格式。其中FORMAT的值有1、2、3、8、9、&HBF00几项。
四、CLIPBOARD.GETTEXT([FORMAT])
从剪贴板上返回一串文本。FORMAT的值可以是1、&HBF00,如果没有所要的字串则返回一个空串“”。
五、CLIPBOARD.SETDATA DATA[,FORMAT]
在剪贴板一使用指定格式放置一个图片。DATA是放在剪贴板上的图片;FORMAT可以是如下值之一:2、3、8、9。
六、CLIPBOARD.SETTEXTDATA[,FORMAT]
在剪贴板中使用指定格式的一个文本串。DATA是要放入剪板的文本数据;FORMAT可选值为:1、&HBF00。
注:0为自动适应格式(缺省格式)
动态改变屏幕设置
我们经常看到许多 Win95 的应用程序(尤其是游戏)在运行它的时候改变屏幕的设置,运行完后恢复,在 VB 中,我们可以用以下方法实现:
定义
Private Declare Function lstrcpy _
Lib "kernel32" Alias "lstrcpyA" _
(lpString1 As Any, lpString2 As Any) _
As Long
Const CCHDEVICENAME = 32
Const CCHFORMNAME = 32
Private Type DEVMODE
dmDeviceName As String * CCHDEVICENAME
dmSpecVersion As Integer
dmDriverVersion As Integer
dmSize As Integer
dmDriverExtra As Integer
dmFields As Long
dmOrientation As Integer
dmPaperSize As Integer
dmPaperLength As Integer
dmPaperWidth As Integer
dmScale As Integer
dmCopies As Integer
dmDefaultSource As Integer
dmPrintQuality As Integer
dmColor As Integer
dmDuplex As Integer
dmYResolution As Integer
dmTTOption As Integer
dmCollate As Integer
dmFormName As String * CCHFORMNAME
dmUnusedPadding As Integer
dmBitsPerPel As Integer
dmPelsWidth As Long
dmPelsHeight As Long
dmDisplayFlags As Long
dmDisplayFrequency As Long
End Type
Private Declare Function _
ChangeDisplaySettings Lib _
"User32" Alias "ChangeDisplaySettingsA" (_
ByVal lpDevMode As Long, _
ByVal dwflags As Long) As Long
函数
Public Function SetDisplayMode(Width As _
Integer,Height As Integer, Color As _
Integer) As Long
Const DM_PELSWIDTH = &H80000
Const DM_PELSHEIGHT = &H100000
Const DM_BITSPERPEL = &H40000
Dim NewDevMode As DEVMODE
Dim pDevmode As Long
With NewDevMode
.dmSize = 122
If Color = -1 Then
.dmFields = DM_PELSWIDTH Or DM_PELSHEIGHT
Else
.dmFields = DM_PELSWIDTH Or _
DM_PELSHEIGHT Or DM_BITSPERPEL
End If
.dmPelsWidth = Width
.dmPelsHeight = Height
If Color <> -1 Then
.dmBitsPerPel = Color
End If
End With
pDevmode = lstrcpy(NewDevMode, NewDevMode)
SetDisplayMode = ChangeDisplaySettings(pDevmode, 0)
End Function
例子调用:改变为 640x480x24位:
i = SetDisplayMode(640, 480, 24)
如果成功返回 0 。
回复列表 (共5个回复)
沙发
凡尘 [专家分:9680] 发布于 2006-02-27 14:15:00
在VB中显示动画鼠标图标
Win95 的动画鼠标为应用程序增色不少,而 VB 则只提供一般的鼠标图标支持。要用 VB 显示动画鼠标形状,你可以使用以下方法:
函数声明:
Public Const GCL_HCURSOR = -12
Declare Function ClipCursor Lib "user32" (lpRect As Any) As Long
Declare Function DestroyCursor Lib "user32" (ByVal hCursor As Any) As Long
Declare Function LoadCursorFromFile Lib "user32" Alias "LoadCursorFromFileA" (ByVal
lpFileName As String) As Long
Declare Function SetClassLong Lib "user32" Alias "SetClassLongA" (ByVal hwnd As Long,
ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Declare Function GetClassLong Lib "user32" Alias "GetClassLongA" (ByVal hwnd As Long,
ByVal nIndex As Long) As Long
使用:
Dim mhBaseCursor As Long, mhAniCursor As Long
Dim lResult As Long
mhAniCursor = LoadCursorFromFile("c:\windows\cursors\appstart.ani")
lResult = SetClassLong((hwnd), GCL_HCURSOR, mhAniCursor)
使用Win95的动画光标
谭翁
在Windows 95系统中具有一个Windows 3.x所不具备的特性――支持动画的光标文件。你可以在Windows 95目录中的Cursors子目录下看到这些动画的光标文件,它们均具有扩展名*.ANI。在程序中使用相应的动画光标能够极大地改善程序的外观,本文介绍了如何在你的Visual Basic应用程序中使用Windows 95所附带的动画光标文件。
使用动画光标文件
要在Visual Basic的应用程序中使用Windows 95所附带的动画光标,你需要使用下列Windows 应用程序编程接口(API)函数:
LoadCursorFormFile,用于从磁盘上载入光标文件;
ClipeCursor,用于将光标限制在一个固定的矩形区域内;
GetWindowRect,用于获取该矩形区域,在下面的样例程序中就是程序主窗体的本身;
SetClassLong,用于设置和提取窗口类的数据,以使光标被显示在窗体上;
GetClassLong函数,在退出应用程序之前,需要将应用程序的缺省光标设置回程序执行以前的光标,所以需要在程序运行时首先对以前的光标状态进行备份,这项工作由该函数来完成;
DestroyCursor,在正确显示了光标之后,需要使用该函数来取消载入的光标。
样例程序
下面的样例程序将在窗体区域内显示出C:\WIN95\CURSORS目录下的APPSTART.ANI动画光标文件,如果你的Windows 95路径不同的话,你需要修改样例程序以正确显示出动画光标。
在Visual Basic中开始一个新的工程,采用缺省的方法建立Form1。
在Form1上创建一个命令按钮控件,采用缺省的方法建立Command1。将它的Caption属性设置为“显示动画光标”。
在Form1上创建第二个命令按钮控件,采用缺省的方法建立Command2。将它的Caption属性设置为“恢复缺省光标”。
创建一个新的模块,采用缺省的方法建立Module1.Bas。将如下的声明,类型和常量语句添加到Module1.Bas的通用声明部分中:
Option Explicit
Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Public Const GCL_HCURSOR = (-12)
Declare Function ClipCursor Lib "user32" (lpRect As Any) As Long
Declare Function DestroyCursor Lib "user32" (ByVal hCursor As Long) As Long
Declare Function LoadCursorFromFile Lib "user32" Alias "LoadCursorFromFileA"
(ByVal lpFileName As String) As Long
Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long,
lpRect As RECT) As Long
Declare Function SetClassLong Lib "user32" Alias "SetClassLongA"
(ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Declare Function GetClassLong Lib "user32" Alias "GetClassLongA"
(ByVal hwnd As Long, ByVal nIndex As Long) As Long
注意上面的声明语句需要书写在一行内。
将如下的语句添加到Form1的通用声明部分中:
Option Explicit
Dim mhBaseCursor As Long
Dim mhAniCursor As Long
将如下的代码添加到Form1的Form_Load事件中:
Private Sub Form_Load()
Dim lResult As Long
mhBaseCursor = GetClassLong((Me.hwnd), GCL_HCURSOR)
End Sub
将如下的代码添加到Command1的单击事件中:
Private Sub Command1_Click()
Dim lResult As Long
Dim RT_FormArea As RECT
mhAniCursor = LoadCursorFromFile("c:\win95\cursors\appstart.ani")
lResult = SetClassLong((Me.hwnd), GCL_HCURSOR, mhAniCursor)
lResult = GetWindowRect((Me.hwnd), RT_FormArea)
lResult = ClipCursor(RT_FormArea)
End Sub
将如下的代码添加到Command2的单击事件中:
Private Sub Command2_Click()
Dim lResult As Long
Dim RT_ScreenArea As RECT
RT_ScreenArea.Top = 0
RT_ScreenArea.Left = 0
RT_ScreenArea.Bottom = Screen.Height \ Screen.TwipsPerPixelX
RT_ScreenArea.Right = Screen.Width \ Screen.TwipsPerPixelY
lResult = ClipCursor(RT_ScreenArea)
lResult = SetClassLong((Me.hwnd), GCL_HCURSOR, mhBaseCursor)
lResult = DestroyCursor(mhAniCursor)
End Sub
通过按下F5键来运行该程序,单击“显示动画光标”命令按钮,则在窗体的范围内光标变成为APPSTART.ANI光标,并且光标被限制在窗体的范围内。单击“恢复缺省光标”命令按钮,则窗体中的光标被恢复为缺省的光标。注意,在退出该样例程序之前,需要单击“恢复缺省光标”命令按钮,否则将不能在系统中正确进行其它操作。
板凳
凡尘 [专家分:9680] 发布于 2006-02-27 14:15:00
在VB中获取和修改计算机名字
山东 许振华
在Win 95中,计算机有一个名字。运行regedit,在“HKEY-LOCAL-MACHINE\System\CurrentControlSet\control\ComputerName\ComputerName”中将发现“ComputerName”=“Default”( 或其它字符串),在regedit下可以查看和修改这个名字。我们还可在程序中通过Win32API提供的GetComputerName、SetComputerName这两个函数来查看和修改计算机的名字。下面以VB为例来探讨如何编写一个可查看和修改计算机名字的程序。
1、 插入一个新模块,在其中添加如下代码:
'声明 GetComputerName
Declare Function GetComputerName Lib"kernel 32"Alias "GetComputerNameA"(Byval lpBuffer As String,nSize As Long)As Long
'声明 SetComputerName
Declare Function SetComputerName Lib"kernel 32"Alias "SetComputerNameA"(Byval lp ComputerName As String)As Long
'定义一个获取计算机名字的函数
Public Function GetCName (CName ) As Boolean
Dim sComputerName As String '计算机的名字
Dim lComputerName As Long '计算机名字的长度
Dim lResult As Long 'GetComputerName的返回值
Dim RV As Boolean
'GetCName返回值,若为TRUE则表示操作成功
lComputerNameLen =256
sComputerName = Space (lComputerNameLen)
lResult =GetComputerName (sComputerName,lCompputerNameLen)
If lResult <>0 Then Cname = Left$ (sComputerName,lComputerNameLen)
RV =True
Else
RV =False
End If
GetCName =RV
End Function
'定义一个修改计算机名字的函数
Public Function SetCName (CName ) As Boolean
Dim lResult As Long
Dim RV As Boolean
lResult =SetComputerName (CName)
If lResult <>0 Then
RV =True 修改成功
Else
RV =False
End If
SetCName =RV
End Function
2、 在窗体中添加一命令按钮Command1,双击该按钮并在其中添加如下代码:
Sub Command1-Click ()
DIM CN AS String
x = GetCName (CN)
Print "This Computer Name is :",CN
CN="MYCOMPUTER"
x = SetCName (CN )
Print "Now the Computer name is :",CN
End Sub
3、 保存上述设置和代码,然后按F5运行该程序,观察其运行结果。
需要说明的是:(1)修改完计算机的名字后必须重新启动才能有效;(2)计算机名字中只能含有字母、数字和下面的几种符号:!、@、#、$、%、^、 ;、'、)、(、· 、- 、{、}、~、(3)程序的运行环境为:VB4.0(32)、Win 95中文版。
取得并设置双击间隔时间
取得双击间隔时间:
Declare Function GetDoubleClickTime Lib "user32" Alias "GetDoubleClickTime" () As Long
使用:
返回千分之一秒的时间间隔数。
设置双击间隔时间:
Declare Function SetDoubleClickTime Lib "user32" Alias "SetDoubleClickTime" (ByVal wCount As Long) As Long
使用:
wCount 为千分之一秒的时间间隔数。
突破SendKeys的限制
SendKeys 不能实现一些特殊的键, 如 Alt+PrintScr 。 不过使用 API ,可以改变这样的状况。
声明:
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal Scan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
使用:
'一个抓屏的例子
Const VK_SNAPSHOT As Byte = &H2C
' 把应用窗口图象放到剪贴板:
Call keybd_event(VK_SNAPSHOT, 0, 0, 0)
'?把整个屏幕抓到剪贴板:
Call keybd_event(VK_SNAPSHOT, 1, 0, 0)
可以用该方法抓 AVI 图象。
3 楼
凡尘 [专家分:9680] 发布于 2006-02-27 14:16:00
禁止使用 Alt-Tab 或 Ctrl-Alt-Del
Private Declare Function EnableWindow Lib "user32" (ByVal hWnd As Integer, ByVal aBOOL As Integer) As Integer
Private Declare Function IsWindowEnabled Lib "user32" (ByVal hWnd As Integer) As Integer
Private Declare Function GetMenu Lib "user32" (ByVal hWnd As Integer) As Integer
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, ByVal lpvParam As Any, ByVal fuWinIni As Long) As Long
Private TaskBarhWnd As Long
Private IsTaskBarEnabled As Integer
Private TaskBarMenuHwnd As Integer
'禁止或允许使用 Alt-Tab
Sub FastTaskSwitching(bEnabled As Boolean)
Dim X As Long, bDisabled As Long
bDisabled = Not bEnabled
X = SystemParametersInfo(97, bDisabled, CStr(1), 0)
End Sub
'禁止使用Ctrl-Alt-Del
Public Sub DisableTaskBar()
Dim EWindow As Integer
TaskBarhWnd = FindWindow("Shell_traywnd", "")
If TaskBarhWnd <> 0 Then
EWindow = IsWindowEnabled(TaskBarhWnd)
If EWindow = 1 Then
IsTaskBarEnabled = EnableWindow(TaskBarhWnd, 0)
End If
End If
End Sub
'允许使用Ctrl-Alt-Del
Public Sub EnableTaskBar()
If IsTaskBarEnabled = 0 Then
IsTaskBarEnabled = EnableWindow(TaskBarhWnd, 1)
End If
End Sub
禁止 Ctrl+Alt+Del
声明(For Win95):
Const SPI_SCREENSAVERRUNNING = 97
Private Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, lpvParam As Any, ByVal fuWinIni As Long) As Long
使用:
'禁止
Dim pOld As Boolean
Call SystemParametersInfo(SPI_SCREENSAVERRUNNING, True, pOld, 0)
'开启
Dim pOld As Boolean
Call SystemParametersInfo(SPI_SCREENSAVERRUNNING, False, pOld, 0)
用Visual Basic实现Windows的重启动
刘强
在安装Windows应用程序时,由于更改了系统设定,常常必须要重新启动Windows能使更改有效。这就造成频繁的退出Windows再键入“WIN”进入Windows,显得十分繁琐。笔者使用Visual Basic语言编写了一个小程序,可以实现Windows的重新启动,甚至可以实现系统的重新启动。其方法是调用Windows的应用接口函数API:ExitWindows。它支持两个参数。第一个参数决定了退出Windows的方式。可选择参数有:&h42~重新启动Windows、&h43~系统热启动,第二个参数为恒为0。建立应用程序的步骤如下:
(1)进入Visual Basic设计环境,新建一个工程项目Project1,在窗体中设置按钮数组Command1(0)、Command1(1)和Command1(3).各个对象的属性如下:
form1: caption:启动工具
backcolor:&H00C0C0C0&
command1(0) caption:程序重新启动Windows
command1(1) caption:系统热启动
Command1(3) caption:退出
(2)代码设计。首先在窗体的通用代码区(General)内对所调用的WindowsAPI函数进行声明如下:
Declare Function exitwindows Lib "User" (ByVal dwReturnCode As Long, ByVal wReserved As Integer) As Integer
程序代码如下:
Sub Command1_Click (index As Integer)
Select Case index
Case 0
i = exitwindows(&H43, 0)’热启动
Case 1
i = exitwindows(&H42, 0)’重新启动Windows
Case 3
End ’退出
End Select
End Sub
(3)程序调试通过后以一定的文件名存盘,激活File菜单中的Make Exe File…,可以编译成可执行文件,然后退出VB环境,在程序管理器中新建一个程序项,在程序项特性对话框的命令行一栏中输入编译生成的EXE文件的正确路径,并选择一个合适的图标,点“确认”就在相应的组窗口中生成了图标。你就可以在安装软件过程中使用这一工具大大简化重新启动的步骤,有兴趣的读者不妨试一试。
借用Windows系统的标准ABOUT窗口
吴斌
ABOUT窗口是应用程序向用户传达自身一些基本信息的最佳方式。Windows系统的许多软件,如程序管理器、文件管理器、书写器等,都带有一个风格一致的ABOUT窗口。在这些软件中,只要选择“帮助”菜单命令“关于XXX...”,就会弹出这个标准ABOUT窗口,其中显示有关Windows及相应软件的版本、工作方式和版权等信息。在VB应用程序中,可以通过调用API函数ShellAbout,方便地借用这个标准ABOUT窗口,并将自己的基本信息加入其中。
首先,在module文件中加入下列声明语句:
Declare Function ExtractIcon% Lib "shell.dll" (ByVal hinst%, ByVal lpszExeName$,ByVal iIcon%)
Declare Function GetWindowWord Lib "User"( ByVal hWnd As Integer,ByVal nIndex As Integer)As Integer
Declare Function ShellAbout Lib "shell.dll"(ByVal hWnd As Integer,ByVal szApp As String,ByVal szOtherStuff As String,ByVal hIcon As Integer)As Integer
Public Const GWL_EXSTYLE=(-20)
Public Const GWL_STYLE=(-16)
Public Const GWL_WNDPROC=(-4)
Public Const GWW_HINSTANCE=(-6)
然后,在调用ABOUT窗口的菜单项的Click事件中加入下列代码:
Dim Ret As Integer
Dim Icon As Integer
Dim Inst As Integer
Inst=GetWindowWord(Me.hWnd,GWW_HINSTANCE)
'从可执行文件中抽取图标
Icon=ExtractIcon(Inst,"DEMO.EXE",0)
'调用Windows系统标准ABOUT窗口
Ret=ShellAbout (Me.hWnd,"1234","123" & Chr$(13) & Chr$(10) & "123456",Icon)
4 楼
凡尘 [专家分:9680] 发布于 2006-02-27 14:16:00
VB调用API函数技巧--如何得到磁盘上剩余空间的值
最直接的方法是调用API函数 GetDiskFreeSpace,函数声明如下:
Declare Function GetDiskFreeSpace Lib "kernel32" Alias "GetDiskFreeSpaceA" (ByVal lpRootPathName As String, lpSectorsPerCluster As Long, lpBytesPerSector As Long, lpNumberOfFreeClusters As Long, lpTtoalNumberOfClusters As Long) As Long
计算规则:磁盘上剩余空间(字节)=磁道(Sector) *剩余扇区 *每扇区的字节数
VB调用API函数技巧--如何得到磁盘上剩余空间的值
最直接的方法是调用API函数 GetDiskFreeSpace,函数声明如下:
Declare Function GetDiskFreeSpace Lib "kernel32" Alias "GetDiskFreeSpaceA" (ByVal lpRootPathName As String, lpSectorsPerCluster As Long, lpBytesPerSector As Long, lpNumberOfFreeClusters As Long, lpTtoalNumberOfClusters As Long) As Long
计算规则:磁盘上剩余空间(字节)=磁道(Sector) *剩余扇区 *每扇区的字节数
改变 Win95 的 Shell
如果你用过组件编程,你肯定熟悉 Regsvr32.exe.一般来说,注册/反注册部件都可以利用它完成.但是如果有众多的控件需要管理,每次都要在"运行"对话框敲入regsvr32 .....的命令很繁.其实留心一点,你肯定能找到通过Win95 的shell功能来对ocx,dll等文件建立关联,快速注册/反注册部件.解决方案:
(1)启动regedit,打开HKEY_CLASSES_ROOT主键,寻找.dll和.ocx(一般来说.dll文件已被管理,文件类型为dll file; .ocx可以自行添加);
(2) 添加Shell子键,再加入类似 Register和Unregister的子键,它们会出现在鼠标右键单击.dll和.ocx文件时,弹出的Popup菜单中.
(3)最后加入 command键,再在右侧的窗体内加入命令行语句,例如:
c:\windows\system\regsvr32.exe %1;
c:\windows\system\regsvr32.exe /u %1;
其中Windows路径可以根据实际情况调整,另外regsvr32的路径也可以自行调整.关闭regedit,再回到资源管理器看看效果.呵呵,是不是很 Cool!
其实编程也可以轻松搞定.几个API函数就可以轻松搞定:RegCreateKey, RegSetvalue, Getsystemdirectory等等.
通过这个小例子,你可以构造属于自己的Shell天地,别让Winzip,UltraEdit长期"霸占" Shell(开个玩笑)
系统菜单上的图标
在 Windows 95 的系统工具栏(“开始”按钮的工具栏)上加上自己的图标似乎是一件很时髦的事。在 VB5 中,我们可以用比较简单的方法地实现这一技术:
VB5 的企业版及专业版的 CD-ROM 上其实提供了许多有关 VB 的一些很有用的东西。我们现在讨论的问题的解决方法也在此列。打开你的 CD-ROM,在 \TOOLS\UNSUPOPRT\SYSTRAY 这个目录里就提供了一个 ActiveX 控件的源代码。此控件的目的就是在系统菜单上加上自己的图标。你可以把它编译成一个 OCX 供调用或直接在程序里面包含此模块。
5 楼
凡尘 [专家分:9680] 发布于 2006-02-27 14:17:00
禁止使用 Alt+F4 关闭窗口
Private Declare Function DeleteMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long
Private Declare Function GetMenuItemCount Lib "user32" (ByVal hMenu As Long) As Long
Private Const MF_BYPOSITION = &H400&
Private Sub Form_Load()
Dim hwndMenu As Long
Dim c As Long
hwndMenu = GetSystemMenu(Me.hwnd, 0)
c = GetMenuItemCount(hwndMenu)
DeleteMenu hwndMenu, c - 1, MF_BYPOSITION
c = GetMenuItemCount(hwndMenu)
DeleteMenu hwndMenu, c - 1, MF_BYPOSITION
End Sub
如何在VB中实现Undo(撤消)功能?
在许多应用程序中,例如许多编辑软件都有UNDO功能。它给我们带来了方便。那么在VB中能不能实现UNDO功能呢?答案是肯定的。下面介绍一下对于标准的文本框或组合框实现UNDO功能的示例代码。
Declare Function SendMessage Lib"user"(ByVal hWnd As Integer,ByVal wMsg As Integer,wParam As Integer,lparam As Any) As Long
Global Const WM_USER=&h400
Global Const EM_UNDO=WM_USER+23
UndoResult=SendMessage(myControl.hWnd,EM_UNDO,0,0)
利用 App.Path 读取「应用程序所在之目录」
程 序 开 启 文 件 时 , 若 没 有 指 定 文 件 的 目 录 , 则 所 开 启的 将 是 「 目 前 目 录 」 的 文 件 , 但 目 前 目 录 是 经 常 改 变 的, 如 果 指 定 目 录 , 则 将 来 安 装 程 序 时 , 被 开 启 的 文 件 必须 安 装 于 指 定 目 录 中 , 比 较 没 有 弹 性 。
解 决 以 上 问 题 的 方 法 利 用 以 下 方 法 开 启 文 件 :
Open App.Path + "\" + "文件名称" For ┅
并 且 将 被 开 启 的 文 件 与 可 执 行 文 件 放 在 同 一 目 录 即 可 , 因为 App.Path 所 代 表 的 就 是 应 用 程 序 所 在 的 目 录 。
不 过 使 用 App.Path 有 一 件 事 情 要 特 别 注 意 , 当 App.Path 位于 根 目 录 时 , 则 App.Path 最 右 边 的 字 符 为 "\", 例 如 "c:\", 但 如 果 App.Path 不 在 根 目 录 , 则 App.Path 最 右边 的 字 符 不 为 "\", 例 如 "d:\kj\app1", 因 此欲 求 取 应 用 程 序 所 在 目 录 某 一 文 件 的 完 整 路 径 名 称 , 应该 使 用 以 下 方 法 :
Dim fullpath As String
If Right(App.Path, 1) = "\" Then ' 若 App.Path 为根目录
fullpath = App.Path + "文件名称"
Else
fullpath = App.Path + "\" + "文件名称"
End If
' fullpath 等于 "文件名称" 的完整路径名称
如何将程序建立成「启动」资料夹的捷径。
如 果 我 们 希 望 某 一 程 序 在 Windows 被 启 动 时 , 自 动 被 执行 , 可 以 为 此 一 程 序 建 立 捷 径 , 并 且 将 捷 径 复 制 到 「启动」资 料 夹 中 , 这 件 事 情 以 手 动 来 进 行 很 容 易 , 但 如 果 撰 写程 序 , 该 如 何 达 成 呢 ?
方 法 如 下 :(Text1 为 布 置 在 表 单 上 的 TextBox)
Text1.LinkTopic = "Progman|Progman"
Text1.LinkMode = 2 ' 手动
Text1.LinkExecute "[ShowGroup(启动, 4)]"
Text1.LinkExecute "[AddItem(可执行文件完整路径, 捷径名称)]"
假 设 我 们 想 把 "c:\vb5db\myprog.exe" 建 立 成「启 动」资 料 夹 名 称 为「我 的 程 序」的捷 径 , 则 最 后 一 行 的 LinkExecute 应 该 如 下 :
Text1.LinkExecute "[AddItem(c:\vb5db\myprog.exe, 我的程序)]"
在 VB 程序中如何设定 Mouse 光标的位置?
使用 SetCursorPos Windows API, 以下是调用的方法:
1. API 的声明:
Private Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long
注:如果以上的声明放在「一般模块」底下, 应将 Private 保留字去掉。
2. 调用范例:
ret = SetCursorPos( X, Y) ' (X, Y) 为欲设定的鼠标座标,座标单位是 Pixel(像素)
如何改变桌面的图片?
此一问题需调用 SystemParametersInfo API 函数,细节如下:
1. API 的声明:
Const SPI_SETDESKWALLPAPER = 20
Const SPIF_UPDATEINIFILE = &H1
Private Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, ByVal lpvParam As Any, ByVal fuWinIni As Long) As Long
注:如果以上的声明放在「一般模块」底下, 应在 Const 之前加上 Public 保留字, 并且将 Private 保留字去掉。
2. 程序范例:
Call SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, BMP图档名称, SPIF_UPDATEINIFILE)
例如:
' 1. 将桌面图片设定成 c:\windows\setup.bmp
Call SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, "c:\windows\setup.bmp", SPIF_UPDATEINIFILE)
' 2. 将桌面图片清掉
Call SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, "", SPIF_UPDATEINIFILE)
程序如下:
Call SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, BMP图档名称, SPIF_UPDATEINIFILE)
例如:
' 1. 将桌面图片设定成 c:\windows\setup.bmp
Call SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, "c:\windows\setup.bmp", SPIF_UPDATEINIFILE)
' 2. 将桌面图片清掉
Call SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, "", SPIF_UPDATEINIFILE)
但以上程序设定图片之后, 必须等到下次 Windows 重新启动时才生效, 如果希望设定之后立刻生效,则程序须修改如下:
Const SPIF_SENDWININICHANGE = &H2
Call SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, "c:\windows\setup.bmp", SPIF_UPDATEINIFILE + SPIF_SENDWININICHANGE )
此外希望只有本次使用 Windows 时改变桌面图片(下次开机时还原原状), 则程序如下:
Call SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, "c:\windows\setup.bmp", SPIF_SENDWININICHANGE ) ' 去掉 SPIF_UPDATEINIFILE
如何在DOS程序结束执行时,自动将其关闭?
在 VB 程序中启动 DOS 程序(或指令)的方法是:
Shell "DOS可执行文件名", vbNormalFocus
例如:
Shell "Xcopy c:\temp\*.* d:\temp\*.*", vbNormalFocus
但是当以上的 Xcopy 程序结束执行时, 却会残留着 DOS 窗口没有被关闭,如果想要让 DOS 程序结束执行时, DOS 窗口自动被关闭, 则应该使用以下方法来启动 DOS 程序:
Shell "Command.com /C DOS可执行文件名", vbNormalFocus
例如:
Shell "Command.com /C Xcopy c:\temp\*.* d:\temp\*.*", vbNormalFocus
我来回复