SAIL软件工作室

********欢迎来我的空间做客,空间有什么不足的地方请大家指正!对VB有兴趣的朋友可以加我QQ:251475547。如果有什么问题你可以给我留言或QQ联系我!********

'需要引用Microsoft ActiveX Data Objects 2.0 Liberary或以上版本。

'附加指定路径的数据库。MDFfile=数据库文件路径;LDFfile=日志文件路径;DBName=数据库名称;Address=服务器地址;UserID=服务器登录名;Passw=服务器登录密码

Function AdditionalDB(ByVal MDF_Name As String, ByVal LDF_Name As String, ByVal DBName As String, Optional ByVal Address As String, _

                  Optional ByVal UserID As String, Optional ByVal Passw As String) As Boolean

    Dim db As New ADODB.Connection

    On Error GoTo errs

    '连接服务器

    Call db.Open("provider=sqloledb;Persist Security Info=False;server=" & Address & ";user id=" & UserID & ";password=" & Passw)

    '开始附加数据库

    Call db.Execute("sp_attach_db'" & DBName & "','" & MDF_Name & "','" & LDF_Name & "'")

    db.Close   '关闭数据库连接

    AdditionalDB = True

    Exit Function

errs:

    AdditionalDB = False

End Function

'分离指数据库。DBName=数据库名称;Address=服务器地址;UserID=服务器登录名;Passw=服务器登录密码

Function DetachDB(ByVal DBName As String, Optional ByVa

将窗体至于指定窗体顶部的方法网上很少有介绍,介绍得最多的就是将指定窗体至于所有窗体的顶部,这个问题也困扰了我很长时间,一直没有找到方法,一次偶然的机会让我在网上终于找到解决的方法了,现将解决方法贴出来供大家参考,解决方法有两种:

方法一是利用VB自身的Show方法实现,如我们要将窗体FormB永远置于窗体FormA的顶部,代码如下写:

FormB.Show ,FormA     

VB的Show方法我想大家都不陌生,而且应该是用得最多的方法了,但是很多人都没有注意该方法的最后一个参数,常常只注意了第一个参数,包括我也是,从来没有注意过最后一个参数,甚至都不晓得后面还有一个参数。使用该方法的优点是代码少,子窗体可以随父窗体最小化而最小化,随父窗体的还原而还原,随父窗体的卸载而卸载。缺点是MSDN里面介绍说后面一个参数是一个字符串表达式,但是我认为是一个窗体对象,而不是简单的字符串,这样一来造成该方法只能用在本程序,不能作用于外部窗体。

方法二是利用API函数实现,代码如下:

Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Private Declare Function ShowWindowA Lib "user32" Alias "ShowWindo

前段时间下载了一个SQL2005数据库系统,觉得用起来相对不错,故特意拿出来与大家一起分享!下面是下载地址:

http://115.com/file/c2pwyw1m

http://115.com/file/be2btbw7

将两个包下载后解压出来,里面包含了一个SQL 2005 ISO光盘文件,可解压安装,也可以用虚拟光驱直接加载安装,安装不交简单,没有以前的SQL 2000安装复杂!

在使用使用timeSetEvent多媒体定时器时经过我反复的测试得出一个规律,如下:

一、在调用timeSetEvent多媒体函数做定时器是千万不可以调用别的定时器或定时函数进行定时。比如在调用timeSetEvent函数定时的同时在在工程里面使用系统自带的Timer控件定时,或调用另外的多媒体定时函数定时,这样程序就会崩溃。;

二、多媒体定时器应遵循以下3个步骤:  

1.   确定最大和最小周期  

可以用timeGetDevCaps函数确定多媒体定时器服务提供的最大和最小定时器事件周期,这些数值对不同的计算机是不同的,也与Windows运行方式有关。  

2.   建立最小定时器精度  

在启动定时器事件前,应用程序必须建立想要使用的最小定时器精度,在定时器服务事件结束之后,还必须清除该精度。  

最小定时器精度可以根据第一步返回的结果确定。可以使用timeBeginPeriod和timeEndPeriod函数来设置和清除最小定时器精度,每个timeBeginPeriod调用都必须有一个timeEndPeriod与之对应,而且两个函数必须指定相同的最小精度。  

3.   启动定时器事件  

与该步骤相关的两个函数为timeSetEvent和timeKillEvent,详细细节可以查阅MSDN中这两个函数的定义。有三个要注意的地方:一是一旦启动定时器就一定不要忘记把它关

文章图片

这两天在写程序是大量需要用图标文件,于是找了很多关于从EXE,DLL,OCX文件内部提取图标的软件,最后找了一个效果还不错,就自己弄了一个VB的代码,效果虽然不如那个软件,不能对图标组进行分组,还不能多个图标保存一个文件,目前图标分组问题已经解决了,只是代码还有些乱就不拿出来了。但是总的来说还是很不错的,直接从EXE,DLL,OCX文件内部读出所有图标,按照图标索引可以直接保存,而且保存的图标不是真,支持32位256*256的超大图标获取与保存。

http://115.com/file/bel74iw3#

获取PE文件图标.rar

文章图片

最近在网上找到了一个虚拟串口的工具,觉得很不错,而且还支持二次开发,于是我用VB做了一个,效果还不错,这类源码网上几乎没有,故贴出来共大家学习,有部分功能没有写,不过个人觉得现在已经够用了,如果有想进一步完善的可以在这个基础上继续完善。有几个API函数我没能正常使用,不晓得原因,有高手知道望赐教。支持WIN7下运行。DLL是已经破解了的,程序基本上是和官方程序是兼容的,可以放心使用。

http://dl.dbank.com/c000qgfc9t

自己写的一个可以替换LTrim,RTrim,及 Trim 函数个一个函数,大家都知道LTrim,RTrim,及 Trim 这三个函数只能去除左边或者右边或两端的“空格“符,但是不能指定任意指定的匹配字符,这是一个遗憾的事,这里为了一会使用方便特意写了类似的一个函数来替换它们。

'*************************************************************************

'**函 数 名:LRTrim

'**输    入:ByVal Text(String)被查询字符串                  -

'**        :ByVal Matching(String)匹配字符              -

'**        :Optional ByVal Pattern(Integer = 0)

'**          截断方向;0=从左边去除,1=从右边去除,2=从两边去除 -

'**输    出:(String)从指定方向去除指定字符后的字符串 -

'**功能描述:从指定方向去除指定字符后的字符串

'**作    者:陈峰

'*************************************************************************

Private Function LRTrim(ByVal Text As String, ByVal Matching As String, Optional ByVal Pattern As Integer = 0) As String

    Dim StrFinish As Long, i As Long, j As Long, StrLen As Long, StrStart As

Const HKEY_LOCAL_MACHINE = &H80000002

 Const KEY_ALL_ACCESS = (&H20000 Or &H1 Or &H8 Or &H10) And (Not &H100000)

Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long

Private Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal uloptions As Long, ByVal samDesired As Long, phkResult As Long) As Long

Private Declare Function RegEnumValue Lib "advapi32.dll" Alias "RegEnumValueA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpValueName As String, lpcbValueName As Long, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long

Private Sub EnumComm()    '通过注册表枚举串口

    Dim hKey As Long, rName As String, rData As String

    RegOpenKeyEx HKEY_LOCAL_MACHINE, "HARDWARE\DEVICEMAP\SERIALCOMM", 0, KEY_ALL_ACCESS, hKey

    If hKey <> 0 Then

        Dim Cnt As Long, rType As Long

        Cnt = 0

        rName = Space(20): rData = Space(20)

        While RegEnumValue(hKey, Cnt, rName, 20, 0, rType, ByVal rData, 20) <> 259&

            Cnt = Cnt + 1

   &n

文章图片

截图程序,完全实现和QQ相同截图功能,支持顶层焦点窗体矩形区域获取,支持双击矩形区域截图,支持系统热键操作(Ctrl+C=完成截图;Ctrl+S=保存截图;Esc=取消截图)。给大家体验一下,有什么好的建议麻烦通知一下。

http://115.com/file/cl1mtio6#

新QQ截屏.exe

找了几天,今天终于找到使用方法了,所以共享给大家。该函数不光能加载资源中的光标,图像,图标同样可以。

Option Explicit

Private Declare Function LoadImage Lib "user32" Alias "LoadImageA" (ByVal hInst As Long, ByVal lpsz As Long, ByVal un1 As Long, ByVal n1 As Long, ByVal n2 As Long, ByVal un2 As Long) As Long

Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long

Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long

Private Declare Function GetModuleHandle Lib "kernel32" Alias "GetModuleHandleA" (ByVal lpModuleName As String) As Long

  Private Declare Function SetCursor Lib "user32" (ByVal hCursor As Long) As Long

'-----------------从资源中加载图像信息------------------------

' ID=资源ID; ImageType=要加载的资源类型(BITMAP=0,ICON=1,CURSOR=2)

Public Function LoadResImage(ByVal ID As Long, Optional ByVal RType As Long = 0) As Long

    Dim hInst As Long

    If App.LogMode = 0 Then '如果运行在IDE环境下,需要加载含有相应资源的EXE文件(当前可执行文件)。

        LoadLibrary App.ExeName + ".exe"          '载入EXE文件

        hInst = GetModuleHa