[不顶别来]成功解决SplashScreen启动慢问题

dylike 2009-01-05 07:21:46
本来不想发出来的,毕竟这些都是抢饭碗的东西.
而且我也学坏了,写了10年程序,共享了9年,今年学会私有了.
作了N久思想斗争,还是写出来.本帖没分,只有创意和灵感.

下载演示程序:
批量ENC加密1.exe

原因: .NET中的SplashScreen虽然名为启动画面,但实际显示出来还是要等N久,名不符其不实.
思路: 1 要显示图片 2 要能居中甚至置顶 3 要能自由控制,像窗体设计时那样 4 要能在主程序加载完成时自动消失
创意: 1 VB6的程序,只要只用自带控件的,而不需要另加载额外控件的,均能免运行库运行
2 VB6是VB.NET的前身,代码类似
3 加载图片并且居中或置顶只需API,可以免运行库
4 把VB6的窗体加个图片背景(加载画面),用它来启动目标程序(.NET程序),完成后自行END
实践:
1 打开VB6,新建工程,指定窗体背景图,设置窗体大小并居中显示(由于VB6默认单们是"缇",我多年不用忘了怎么算成PIX,结果算了个半天).
2 将以下代码中关键部分换成你自己的:

Option Explicit
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) '由于VB6与VB.NET代码执行速度有出入,所以需要SLEEP来帮忙
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long '这个API用来使该窗体置顶(居于其他窗口之上,注意:不是月亮之上,哈哈)
Dim CMD As String '定义一个字串变量,用来接收启动参数
Private Sub Form_Load()
On Error Resume Next '不考虑程序是否会出错,如有错误仍然执行到END语句
CMD = Command '该字串变量赋值为启动参数,如: 1.exe 参数
If Trim(Command) <> "" Then '一定要,以免误操作
SetWindowPos Me.hwnd, -1, 0, 0, 0, 0, 3 '设置置顶
Me.Show '强制显示窗体
Me.Refresh '光强制显示是不行的,还得刷新一下
Shell CMD, vbNormalFocus '打开由参数指定的目标程序
Sleep (2000) '等待2秒,一般设置为2-5秒,看你的目标程序自己调整
End '任务完成,结束
Else
MsgBox "无效载入程序", vbOKOnly + vbCritical, "DYLIKELOADER" '如果用户非法操作,则提示
End
End If
End Sub


小结:如同拍一部电影一样,不要撑死在一个面包上,利用多种工具完成一个自己想要的效果,将解决很多高级困难.
说明: 上次有个朋友拿我的一个加解密DLL去用在收费软件上,实在是.....这次学坏了,我把里面的DLL和EXE都模糊了几次,没有授权也没法用这个DLL了,哎~被逼的.当然.你下载到的只是一个文件,是我用一个BAT和一个DLL和两个EXE打包了.目的是用户双击该文件后自动执行BAT,以参数方式启动DYLIKELOADER.EXE.

打包的好处是只需要一个文件就可以执行,但不能在同目录内与其他文件交互,看自己需要了,一般没事不要打包.

问:那么这样做出来的VB6的EXE如何用呢?
答:比如你的EXE叫ABC.EXE,用它做BCD.EXE的启动画面效果.就在命令行的情况下输入: ABC.EXE BCD.EXE

问:为什么不直接用这个VB6的EXE来启动目标程序,而使用命令参数呢?
答:如果你不想做个通用的,即用参数的,当然可以直接启动目标程序,我是为了以后不想为每个目标程序都做一次启动画面,所以用参数的方式.

问:回复该帖能有多少分?
答:恭喜你,回复本帖你将得到零分!
......................
...全文
1086 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
lsh2216024 2009-01-18
  • 打赏
  • 举报
回复
ding
up
dylike 2009-01-12
  • 打赏
  • 举报
回复
呵呵.不想解释什么.真正的程序员是可以明白为什么的.
现在我自己有网站了.这里反正也少来了.
对了.记得瑞星对打包的EXE的确会报毒的,至于是不是病毒,我不想浪费力气多说,反正我的卡巴没的毒.
是否抢饭碗么,要看你不能做一个比我更快的启动画面,否则,你的客户可只会选择我的产品.哈哈.
水哥阿乐 2009-01-11
  • 打赏
  • 举报
回复
批量ENC加密1.exe有病毒,这篇文章我一个字晕,这就是能抢饭的东东
zengfanying 2009-01-05
  • 打赏
  • 举报
回复
学习
forever_zw 2009-01-05
  • 打赏
  • 举报
回复
ding
forever_zw 2009-01-05
  • 打赏
  • 举报
回复
ding
yanlongwuhui 2009-01-05
  • 打赏
  • 举报
回复
效果不错,支持下
dylike 2009-01-05
  • 打赏
  • 举报
回复
一个美女或许她内心不美,但人们往往很在乎她的外在美,不是吗?呵呵.虽然只是显示一个画面,但它的作用却更好地代替了SplashScreen.不是吗?
水如烟 2009-01-05
  • 打赏
  • 举报
回复
觉得你的代码和SplashScreen的本意无关,你这的代码只是显示一个logo而不是SplashScreen
dylike 2009-01-05
  • 打赏
  • 举报
回复
不能加密?不可能啊.是显示"您无权使用本组件:DYENC.DLL"还是没有任何提示?
保存的时候要选择保存到的目录,可以与原文件夹相同,达到直接覆盖的目的.
我这测试了N久,而且多个测试均没有问题.难道还有其他诡秘的原因导致无法加密?
ijwsoft 2009-01-05
  • 打赏
  • 举报
回复
不能加密.连添加文本型文件都不行,不信你再试试

16,556

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧