VB程序员博客

VB程序开发

例如窗体上有一个text1,在里面输入 的文字 下次打开 的时候 还在,但是要求这个数据不是用另外 的文件保存的,而是保存在自身中!怎么做呀?高手指教 !需要保存在外部环境中,如数据库、注册表、配制文件等from1.login 窗体加载事件
text1.text='要输入的数据'
这个就不用另外保存啊.而且每次打开也有.
或者直接属性里面TEXT:输入值不保存到外面的办法好象只有保存到资源文件中吧。。。其他的没有见过。楼主的方法不是行不通,而是太复杂了。

所谓文件的改写,实际上是重新创建一个文件,删除原来的文件。

你可以让你的 .exe 文件临时生成并启动一个 .bat 之类的文件,类似程序自杀,但后者的使命是重写 .exe 文件,并把你的文字加进去。
如果不退出程序,可以在标准模块定义为全局变量来保存;否则,需要保存在外部环境中可以是可以,但是这样做有点流氓。试试这个,应该是你要的

Private Sub Form_Load()
Text1.Text = GetSetting(App.Title, "settings", "text1.text")  '启动时加载数据
End Sub

Private Sub Form_Unload(Cancel As Integer)
SaveSetting App.Title, "settings", "text1.text", Text1.Text    '关闭时保存数据
End Sub
<
在EXE中先建个资源,程序运行时修改exe文件中的资源。正在运行的程序文件,好象能读不能写。

要达到楼主的目的,恐怕只有用“偷梁换柱”的方式了:

程序本身结构为:主程序 + 附加处理程序 + 存贮数据区
适合处理少量数据(大量数据可以用一个临时文件来处理,完成后删除)。

  在程序退出时,把‘附加处理程序’释放出来,并用 Shell + 参数 启动它。然后附加程序短暂延时(等待系统关闭主程序),把数据写到主程序的存贮区。
  附加程序再次用 Shell + 参数2 启动主程序,附加程序退出。主程序把附加程序文件删除,然后 End 。

我只会在数据库只保存.<
实际上就是要写两个程序,然后把编译后的程序直接拼装在一起。
当然附加程序要在后面,这样直接运行时,就只执行主程序了,附加程序不会运行。
拼接和释放的方法可以参考这个贴子中我的“exe文件中直接捆绑swf文件”的方法。

还有,主程序应该从 Sub Main 启动,免得最后删除附加程序时,还突然冒个窗体出来,就有点“不雅”了。

主程序和附加程序都从命令行参数来判断要进行什么操作。
忘了贴链接:
http://topic.csdn.net/u/20091115/00/178feb53-4747-49aa-aa43-9f1d57cbc44f.html


http://bestopview.com/showtp.asp?code=600001&date=091222
我想保存600001的图片,但无法用右键,求教方法,谢谢!!!

试试是不是每次打开时内容会变:

上面的图片好象不是“实时行情”。

不知这个如何:

Chen8013:

我还是不行,我的IE为7.05730等一会儿,鼠标移到图的左上角有保存菜单出现现在证实 3F 的图片是“实时行情”。


原帖见http://topic.csdn.net/u/20091111/21/217768bc-0a70-48e0-96cd-d6834ce7862f.html
经过大家和老马的指点,偶终于找到解决之道了!在此衷心感谢老马和各位的帮助,哈哈,喜悦之情难以言表啊!
解决方法见我的博客
http://www.86lg.com/view.asp?id=80卖卖关子,欢迎大家来我小舍逛逛。板凳端回家……………………解决了?

问题是…..还是怪啊.

安全软件不可能会对这些键进行访问拦截的……解决就好解决就好解决就好恭喜楼主…………….
<


原帖见http://topic.csdn.net/u/20091111/21/217768bc-0a70-48e0-96cd-d6834ce7862f.html
经过大家和老马的指点,偶终于找到解决之道了!在此衷心感谢老马和各位的帮助,哈哈,喜悦之情难以言表啊!
解决方法见我的博客
http://www.86lg.com/view.asp?id=80卖卖关子,欢迎大家来我小舍逛逛。板凳端回家……………………解决了?

问题是…..还是怪啊.

安全软件不可能会对这些键进行访问拦截的……解决就好解决就好解决就好恭喜楼主…………….
<


原帖见http://topic.csdn.net/u/20091111/21/217768bc-0a70-48e0-96cd-d6834ce7862f.html
经过大家和老马的指点,偶终于找到解决之道了!在此衷心感谢老马和各位的帮助,哈哈,喜悦之情难以言表啊!
解决方法见我的博客
http://www.86lg.com/view.asp?id=80卖卖关子,欢迎大家来我小舍逛逛。板凳端回家……………………解决了?

问题是…..还是怪啊.

安全软件不可能会对这些键进行访问拦截的……解决就好解决就好解决就好恭喜楼主…………….
<


要求 1 最好不用webbrowser,实在没别的办法也凑合了.
    2 最重要的:不是取源码 是页面上的文字.
    3 进程要同步的.
急!!!!@V@
先谢!!

如果webbrowser凑合了。取 webbrowser.doucument.body.innerText我上面说的不很清楚:
因为页面上有很多数据在源文件上看不到
是js刷出来的 我用了很多办法都没得到解决办法
曾经想用webbrowser生成静态html后在保存 但这个办法效率太低
因为有很多图片什么的要显示 webbrowser有段时间一直是busy
而 webbrowser.Document又如何saveAS?

如何因为这个问题再抓包分析….
那我宁可牺牲时间来用webbrowser<
是js刷出来的 我用了很多办法都没得到解决办法

ajax??

我记得有个对象是html的组件,用winsock+那个也可以执行一下脚本

但是这个涉及这些脚本的具体实现方案了,还有是不是也引用了外部脚本等等,这个不一定的…..

如果精益求精的考虑是这样的,不过这个方案也未必比webbrowser要优化思路:
1. 用inet取得网页源代码
2. 用正则分析此源代码,得到想要文字

http://q.stock.sohu.com/cn/600250/index.shtml
帮我分析下吧
我需要这个网页上的几个部分
1 南纺股份
(600250)7.434.21%+0.302009-11-25 15:00均 价: 7.19现手: 51总金额: 4638最高: 7.44涨停: 7.84昨收: 7.13市盈率: 92.18总手: 64497换手率: 2.49%最低: 7.01跌停: 6.42今开: 7.06
—————————————
2 个股概况(这部分 源文件里有)
—————————————
3 所属板块
—————————————–
4 1日买卖量对比(这部分 源文件里有)
———————————————-
5 最好是能把flash需要刷的数据提取出来 能在flash控件里显示//5 最好是能把flash需要刷的数据提取出来 能在flash控件里显示

没懂…看到flash了,你需要提出这个数据还要干什么?<
楼上的liuxiaoyi666,哪儿都有你的身影呀,呵呵,看来真的想再得个星星我有个从新浪读股票数据的代码,和你交换如何 ^_^!

给我两个Q币,或者是帮我的QQ宠买点药和食物.偶的小可爱快挂了

可以取到以下数据

Public Enum 数据
    股票名字 = 0
    今日开盘价 = 1
    昨日收盘价 = 2
    当前价格 = 3
    今日最高价 = 4
    今日最低价 = 5
    买一竞买价 = 6
    卖一竞卖价 = 7
    成交的股票数 = 8
    成交金额 = 9
    买一股 = 10
    买一价 = 11
    买二股 = 12
    买二价 = 13
    买三股 = 14
    买三价 = 15
    买四股 = 16
    买四价 = 17
    买五股 = 18
    买五价 = 19
    卖一股 = 20
    卖一价 = 21
    卖二股 = 22
    卖二价 = 23
    卖三股 = 24
    卖三价 = 25
    卖四股 = 26
    卖四价 = 27
    卖五股 = 28
    卖五价 = 29
    日期 = 30
    时间 = 31
End Enum <script>document.domain='sohu.com';PEAK_ODIA=parent.PEAK_ODIA; </script> <script>PEAK_ODIA(['price_A1',['cn_600250','南纺股份','7.43','4.21%','+0.30','']]) </script> <script>PEAK_ODIA(['price_A2',['7.19','92.18','51','64497','4638','2.49%','7.44','7.01','7.84','6.42','7.13','7.06','18.60','2.98']]) </script> <script>PEAK_ODIA(['quote_m_r',"['14:58','7.43','7.1883','490','36'],['14:59','7.43','7.1902','487','36'],['15:00','7.43','7.1904','51','4']"]) </script> <script>PEAK_ODIA(['quote_k_r',"[20091125','7.06','7.43','7.44','7.01','64497','4638','2.49%','+0.30','4.21%']"]) </script> <script>PEAK_ODIA(['quote_wk_r',"['20091125','7.50','7.43','7.95','7.01','287389.67','21618','419.98%','13.00%','0.88','20091123']"]) </script> <script>PEAK_ODIA(['quote_mk_r',"['20091125','6.40','7.43','7.95','6.15','1106784.87','79121','644.70%','4.21%','0.30','20091102']"]) </script> <script>PEAK_ODIA(['index',['zs_000001','上证指数','3290.16','+66.64','/zs/000001/index.shtml'],['zs_399001','深证成指','13814.55','+361.27','/zs/399001/index.shtml'],['zs_399101','中小板综','5666.04','+187.10','/zs/399101/index.shtml']]) </script> <script>PEAK_ODIA(['perform',['4%','74','7.43','19','7.44','288','7.45','432','7.46','64','7.47','30','7.42','125','7.41','463','7.40','307','7.38','1','7.37','10','34511','29986']]) </script> <script>PEAK_ODIA(['dealdetail',['15:00','-7.43','4%','51','4'],['14:59','-7.43','4.21%','136','10'],['14:59','-7.43','4.21%','51','4'],['14:59','7.44','4.35%','62','5'],['14:59','-7.43','4.21%','30','2'],['14:59','-7.43','4.21%','123','9'],['14:59','-7.43','4.21%','85','6'],['14:58','7.43','4.21%','157','12'],['14:58','7.43','4.21%','7','0.52'],['14:58','7.43','4.21%','127','9'],['14:58','7.43','4.21%','97','7'],['14:58','-7.42','4.07%','47','3'],['14:58','-7.43','4.21%','55','4']]) </script> <script>PEAK_ODIA(['pricedetail',['7.37','428','32','27%'],['7.38','1388','102','100%'],['7.40','1334','99','99%'],['7.41','219','16','12%'],['7.42','345','26','69%'],['7.43','1026','76','38%'],['7.44','62','5','100%']]) </script> <script>PEAK_ODIA(['sector',['8','创投板块','2.75%','/cn/bk_8.shtml'],['23','纺织服装','3.44%','/cn/bk_23.shtml'],['46','券商重仓','3.42%','/cn/bk_46.shtml'],['64','外贸板块','3.62%','/cn/bk_64.shtml'],['119','低价','3.47%','/cn/bk_119.shtml'],['370','长三角','3.47%','/cn/bk_370.shtml'],['451','江苏板块','3.88%','/cn/bk_451.shtml']]) </script> <script>PEAK_ODIA(['changein5m',['cn_600826','兰生股份','16.71','2.82%','/cn/600826/index.shtml'],['cn_600969','郴电国际','13.25','2.07%','/cn/600969/index.shtml'],['cn_600019','宝钢股份','8.93','2.06%','/cn/600019/index.shtml'],['cn_600765','中航重机','23.12','1.71%','/cn/600765/index.shtml'],['cn_600594','益佰制药','18.27','1.61%','/cn/600594/index.shtml'],['cn_600557','康缘药业','21.31','1.52%','/cn/600557/index.shtml'],['cn_600340','*ST国祥','13.58','1.48%','/cn/600340/index.shtml'],['cn_600750','江中药业','23.10','1.36%','/cn/600750/index.shtml'],['cn_600323','南海发展','11.29','1.34%','/cn/600323/index.shtml'],['cn_600135','乐凯胶片','9.31','1.09%','/cn/600135/index.shtml']]) </script> <script>PEAK_ODIA(['time',['2009','11','25','15','00','59']]) </script>

用抓包工具分析一下,你说的是这个东西吧??<

liuxiaoyi666:
好象不是这个东西 yahoo上看的比较清楚看到某时刻的数据和他们变量名 但不清楚是怎么被flash播放器读进去的楼主,你的要求达不到,别浪费时间了。你找个抓包工具….这算是ajax,这部分数据是时时抓取的,你样flash的数据也能取出来了….

不过你需要不停的读falsh放弃了

其他的有办法取道数据吗?<
<
<
http://s2.biz.itc.cn/cn/script/hq-1.3.5.js

所属板块的信息在这个文件里呢….不过不用看了,这个混淆过了,很难破译了…加上一大堆的unicode

编码….还是webbrowser吧….webbrowser.document.getElementById("BIZ_IS_sector").innerHTML楼主可以参考一下
http://topic.csdn.net/u/20091030/19/d94e3052-945e-4cae-8463-c9af347e1b34.html<
<
<
<
<
飘过,帮顶<


要求 1 最好不用webbrowser,实在没别的办法也凑合了.
    2 最重要的:不是取源码 是页面上的文字.
    3 进程要同步的.
急!!!!@V@
先谢!!

如果webbrowser凑合了。取 webbrowser.doucument.body.innerText我上面说的不很清楚:
因为页面上有很多数据在源文件上看不到
是js刷出来的 我用了很多办法都没得到解决办法
曾经想用webbrowser生成静态html后在保存 但这个办法效率太低
因为有很多图片什么的要显示 webbrowser有段时间一直是busy
而 webbrowser.Document又如何saveAS?

如何因为这个问题再抓包分析….
那我宁可牺牲时间来用webbrowser<
是js刷出来的 我用了很多办法都没得到解决办法

ajax??

我记得有个对象是html的组件,用winsock+那个也可以执行一下脚本

但是这个涉及这些脚本的具体实现方案了,还有是不是也引用了外部脚本等等,这个不一定的…..

如果精益求精的考虑是这样的,不过这个方案也未必比webbrowser要优化思路:
1. 用inet取得网页源代码
2. 用正则分析此源代码,得到想要文字

http://q.stock.sohu.com/cn/600250/index.shtml
帮我分析下吧
我需要这个网页上的几个部分
1 南纺股份
(600250)7.434.21%+0.302009-11-25 15:00均 价: 7.19现手: 51总金额: 4638最高: 7.44涨停: 7.84昨收: 7.13市盈率: 92.18总手: 64497换手率: 2.49%最低: 7.01跌停: 6.42今开: 7.06
—————————————
2 个股概况(这部分 源文件里有)
—————————————
3 所属板块
—————————————–
4 1日买卖量对比(这部分 源文件里有)
———————————————-
5 最好是能把flash需要刷的数据提取出来 能在flash控件里显示//5 最好是能把flash需要刷的数据提取出来 能在flash控件里显示

没懂…看到flash了,你需要提出这个数据还要干什么?<
楼上的liuxiaoyi666,哪儿都有你的身影呀,呵呵,看来真的想再得个星星我有个从新浪读股票数据的代码,和你交换如何 ^_^!

给我两个Q币,或者是帮我的QQ宠买点药和食物.偶的小可爱快挂了

可以取到以下数据

Public Enum 数据
    股票名字 = 0
    今日开盘价 = 1
    昨日收盘价 = 2
    当前价格 = 3
    今日最高价 = 4
    今日最低价 = 5
    买一竞买价 = 6
    卖一竞卖价 = 7
    成交的股票数 = 8
    成交金额 = 9
    买一股 = 10
    买一价 = 11
    买二股 = 12
    买二价 = 13
    买三股 = 14
    买三价 = 15
    买四股 = 16
    买四价 = 17
    买五股 = 18
    买五价 = 19
    卖一股 = 20
    卖一价 = 21
    卖二股 = 22
    卖二价 = 23
    卖三股 = 24
    卖三价 = 25
    卖四股 = 26
    卖四价 = 27
    卖五股 = 28
    卖五价 = 29
    日期 = 30
    时间 = 31
End Enum <script>document.domain='sohu.com';PEAK_ODIA=parent.PEAK_ODIA; </script> <script>PEAK_ODIA(['price_A1',['cn_600250','南纺股份','7.43','4.21%','+0.30','']]) </script> <script>PEAK_ODIA(['price_A2',['7.19','92.18','51','64497','4638','2.49%','7.44','7.01','7.84','6.42','7.13','7.06','18.60','2.98']]) </script> <script>PEAK_ODIA(['quote_m_r',"['14:58','7.43','7.1883','490','36'],['14:59','7.43','7.1902','487','36'],['15:00','7.43','7.1904','51','4']"]) </script> <script>PEAK_ODIA(['quote_k_r',"[20091125','7.06','7.43','7.44','7.01','64497','4638','2.49%','+0.30','4.21%']"]) </script> <script>PEAK_ODIA(['quote_wk_r',"['20091125','7.50','7.43','7.95','7.01','287389.67','21618','419.98%','13.00%','0.88','20091123']"]) </script> <script>PEAK_ODIA(['quote_mk_r',"['20091125','6.40','7.43','7.95','6.15','1106784.87','79121','644.70%','4.21%','0.30','20091102']"]) </script> <script>PEAK_ODIA(['index',['zs_000001','上证指数','3290.16','+66.64','/zs/000001/index.shtml'],['zs_399001','深证成指','13814.55','+361.27','/zs/399001/index.shtml'],['zs_399101','中小板综','5666.04','+187.10','/zs/399101/index.shtml']]) </script> <script>PEAK_ODIA(['perform',['4%','74','7.43','19','7.44','288','7.45','432','7.46','64','7.47','30','7.42','125','7.41','463','7.40','307','7.38','1','7.37','10','34511','29986']]) </script> <script>PEAK_ODIA(['dealdetail',['15:00','-7.43','4%','51','4'],['14:59','-7.43','4.21%','136','10'],['14:59','-7.43','4.21%','51','4'],['14:59','7.44','4.35%','62','5'],['14:59','-7.43','4.21%','30','2'],['14:59','-7.43','4.21%','123','9'],['14:59','-7.43','4.21%','85','6'],['14:58','7.43','4.21%','157','12'],['14:58','7.43','4.21%','7','0.52'],['14:58','7.43','4.21%','127','9'],['14:58','7.43','4.21%','97','7'],['14:58','-7.42','4.07%','47','3'],['14:58','-7.43','4.21%','55','4']]) </script> <script>PEAK_ODIA(['pricedetail',['7.37','428','32','27%'],['7.38','1388','102','100%'],['7.40','1334','99','99%'],['7.41','219','16','12%'],['7.42','345','26','69%'],['7.43','1026','76','38%'],['7.44','62','5','100%']]) </script> <script>PEAK_ODIA(['sector',['8','创投板块','2.75%','/cn/bk_8.shtml'],['23','纺织服装','3.44%','/cn/bk_23.shtml'],['46','券商重仓','3.42%','/cn/bk_46.shtml'],['64','外贸板块','3.62%','/cn/bk_64.shtml'],['119','低价','3.47%','/cn/bk_119.shtml'],['370','长三角','3.47%','/cn/bk_370.shtml'],['451','江苏板块','3.88%','/cn/bk_451.shtml']]) </script> <script>PEAK_ODIA(['changein5m',['cn_600826','兰生股份','16.71','2.82%','/cn/600826/index.shtml'],['cn_600969','郴电国际','13.25','2.07%','/cn/600969/index.shtml'],['cn_600019','宝钢股份','8.93','2.06%','/cn/600019/index.shtml'],['cn_600765','中航重机','23.12','1.71%','/cn/600765/index.shtml'],['cn_600594','益佰制药','18.27','1.61%','/cn/600594/index.shtml'],['cn_600557','康缘药业','21.31','1.52%','/cn/600557/index.shtml'],['cn_600340','*ST国祥','13.58','1.48%','/cn/600340/index.shtml'],['cn_600750','江中药业','23.10','1.36%','/cn/600750/index.shtml'],['cn_600323','南海发展','11.29','1.34%','/cn/600323/index.shtml'],['cn_600135','乐凯胶片','9.31','1.09%','/cn/600135/index.shtml']]) </script> <script>PEAK_ODIA(['time',['2009','11','25','15','00','59']]) </script>

用抓包工具分析一下,你说的是这个东西吧??<

liuxiaoyi666:
好象不是这个东西 yahoo上看的比较清楚看到某时刻的数据和他们变量名 但不清楚是怎么被flash播放器读进去的楼主,你的要求达不到,别浪费时间了。你找个抓包工具….这算是ajax,这部分数据是时时抓取的,你样flash的数据也能取出来了….

不过你需要不停的读falsh放弃了

其他的有办法取道数据吗?<
<
<
http://s2.biz.itc.cn/cn/script/hq-1.3.5.js

所属板块的信息在这个文件里呢….不过不用看了,这个混淆过了,很难破译了…加上一大堆的unicode

编码….还是webbrowser吧….webbrowser.document.getElementById("BIZ_IS_sector").innerHTML楼主可以参考一下
http://topic.csdn.net/u/20091030/19/d94e3052-945e-4cae-8463-c9af347e1b34.html<
<
<
<
<
飘过,帮顶<


我的VB自安装好以来,就不能保存开发环境的设置,每次开打VB都需要重新设置一下,超级麻烦!不知道谁遇到过这样的情况,又是怎么解决的?期待解决中…
重装VB,导入老马网站上的VBIDE初始化的注册表值,都试过了,米用的…
强烈期待解决…不是被阉割了的VB安装包吧?如果VB安装包在其它地方正常的话,就要看操作系统是否有问题了?安装完整的操作系统和VB。沉得相当地快啊!<
果然是被处理过的,搜索个原版吧。我用的就是这个啊,
感觉很好啊。。用迅雷搜个,多的是 找下载量大的评价好的是啊,换版本吧~~~还是安装个原版的好装英文版的吧,用习惯就好了找个完整安装包!重新安装!<
启动VB布置好版面后,正常关闭VB,然后再启动VB看看VB是否是你最后的设置版面。
这个……….我一般不使用处理过的………都是下载原版,再自己打SP6….好的!我试试,安装英文原版!
但愿老天保佑啊!<
帖子回复不多啊,看样子大家都可以用咯?<
没遇到过。

即使‘阉割’,也不用把这个割掉吧,在注册表中保存点信息,这部分的代码也没多少。

你要从你的系统或相关软件方面找原因。
下了好些版本都是一样!谁有没有“非阉割版”的啊?只能说明是楼主电脑的问题(操作系统有问题或如 18F 所说)。算了,认命了RPWT,haha<
我晕,还不行啊?

你系统咋回事?簡單些,重裝一下VB吧。<


Dim rs1 As New ADODB.Recordset
  con.Execute "insert into Mb_picture(MemberID,NO_AA) values('" & Me.txt_memberid.Text & "','AA')"
  Set rs1 = Rec_Func("select * from Mb_picture where MemberId like '" & Me.txt_memberid.Text & "'")
  If rs1.RecordCount > 0 Then
 
  '提供一个没有使用的文件号
  SourceFile = FreeFile
  '打开文件
  Open ImageFile For Binary Access Read As SourceFile
  '取的文件长度
  FileLength = LOF(SourceFile)
 
  If FileLength = 0 Then
    MsgBox Str_filepath & "无内容或不存在!"
  End If
  NumBlocks = FileLength BLOCKSIZE        '得到数据库块的个数
  LeftOver = FileLength Mod BLOCKSIZE      '得到剩余字节数
  ReDim byteData(BLOCKSIZE) '重新定义数据块的大小
  rs1.Fields("pict_t").Value = Null
  For i = 1 To NumBlocks
    Get SourceFile, , byteData()  '读到内存块中
    rs1.Fields("pict_T").AppendChunk byteData()  '''报错''''在此环境中不允许操作!!
  Next i
  ReDim byteData(LeftOver)
  Get SourceFile, , byteData()
  rs1.Fields("pict_T").AppendChunk byteData  '''''''在此环境中不允许操作!!
  Close SourceFile
End If
Exit Sub

rs1.Fields("pict_T").AppendChunk byteData()  '''报错''''在此环境中不允许操作!!

请问这是什么原因??

路过,学习


'模块
  Private Declare Function capCreateCaptureWindow Lib "avicap32.dll" Alias "capCreateCaptureWindowA" (ByVal lpszWindowName As String, ByVal dwStyle As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hWndParent As Long, ByVal nID As Long) As Long
  Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
   
  Private Const WS_CHILD = &H40000000
  Private Const WS_VISIBLE = &H10000000
  Private Const WM_USER = &H400
  Private Const WM_CAP_START = &H400
  Private Const WM_CAP_EDIT_COPY = (WM_CAP_START + 30)
  Private Const WM_CAP_DRIVER_CONNECT = (WM_CAP_START + 10)
  Private Const WM_CAP_SET_PREVIEWRATE = (WM_CAP_START + 52)
  Private Const WM_CAP_SET_OVERLAY = (WM_CAP_START + 51)
  Private Const WM_CAP_SET_PREVIEW = (WM_CAP_START + 50)
  Private Const WM_CAP_DRIVER_DISCONNECT = (WM_CAP_START + 11)
   
  Private Preview_Handle    As Long
   
  Public Function CreateCaptureWindow(hWndParent As Long, Optional x As Long = 0, Optional y As Long = 0, Optional nWidth As Long = 132, Optional nHeight As Long = 172, Optional nCameraID As Long = 0) As Long
          Preview_Handle = capCreateCaptureWindow("Video", WS_CHILD + WS_VISIBLE, x, y, nWidth, nHeight, hWndParent, 1)
          SendMessage Preview_Handle, WM_CAP_DRIVER_CONNECT, nCameraID, 0
          SendMessage Preview_Handle, WM_CAP_SET_PREVIEWRATE, 30, 0
          SendMessage Preview_Handle, WM_CAP_SET_OVERLAY, 1, 0
          SendMessage Preview_Handle, WM_CAP_SET_PREVIEW, 1, 0
          CreateCaptureWindow = Preview_Handle
  End Function
   
  Public Sub Disconnect(nCaptureHandle As Long, Optional nCameraID = 0)
          SendMessage nCaptureHandle, WM_CAP_DRIVER_DISCONNECT, nCameraID, 0
  End Sub
Public Function CapturePicture(nCaptureHandle As Long) As StdPicture
      Clipboard.Clear
      SendMessage nCaptureHandle, WM_CAP_EDIT_COPY, 0, 0
      Set CapturePicture = Clipboard.GetData
  End Function

'窗体,一个Picture1控件和一个command控件
  Dim Video_Handle    As Long
   
  Private Sub Form_Load()
          Video_Handle = CreateCaptureWindow(Picture1.hwnd)
End Sub
   
  Private Sub Form_Unload(Cancel As Integer)
          Disconnect Video_Handle
  End Sub
   
Private Sub Command1_Click()
          Set Picture1.Picture = Module1.CapturePicture(Video_Handle)
          SavePicture Picture1.Picture, "c: est.jpg"
  End Sub

Picture1控件显示图像比例为132*172,但是程序保存的图片比例却为640*480
问题:我想只保存Picture1控件显示的图像,比例为132*172,那么应该如何做呢?