[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
本帖最后由 myzam 于 2011-4-1 21:06 编辑

shotgraph图像组件的用法,
   
1--create image object
   set oimg=createobject("shotgraph.image")
2--image对象的方法
   createimage 方法:   oimg.createimage(size1,size2,num)
   设置要创建的图片文件的尺寸大小为size1 x size2,size1<=320,size<=240.
   大于这个数的按这320或240计算。
   num设置要创建的图片文件里要使用的颜色个数,这里是颜色个数可以认为的指定,如你的图片要用5个颜色就指定5个,这5个颜色是你配置好的颜色,不要错误的理解为是5个基本的色素。每个颜色通个方法
   setcolor定义。
  
   gifimage 方法:oimg.gifimage bgcolor,forcolor,path
   path表示创建的图片文件要存放的路径。保存的图片格式是一切windows图片格式包含swf也可以。
   bgcolor背景色,取逻辑值,这里是比较宽松的
   非0等价于true,0等价于false。
   如:set oimg=createobject("shotgraph.image")
           t=oimg.createimage (200,200,3)

           oimg.setcolor 0,255,255,200

           oimg.gifimage 1,0,"test.gif"
           背景是通过setcolor 0来定义的,必须是0
           要应用背景gifimage必须是是1,*
           要屏蔽背景色必须是0,*。你也可以直接使用 vb常数true,false。
    绘制线方法: line x,y,x+h,y+k
                 x,y代表对角线起点坐标,h,k代表长,宽。
    绘制点的方法:line x,y,x,y
    绘制椭圆和园的方法:ellipse x,y,x+h,y+k
    绘制正方形的方法:fillrect x,y,x+h,y+k
    填色的方法
    绘制线,点时,设置颜色的方法是 setdrawcolor num
    num 为setcolor定义的颜色编号。
    绘制圆,椭圆时,设置颜色的方法是 setbgcolor num
    num的含义同上。
    setcolor定义颜色的方法:setcolor num ,red,green,blue
    num为颜色编号,0分配给图片背景使用。1,2,...分配给点,线,椭圆,圆,长方形使用。

  既然我说的是方法,请注意方法的用法是 oimg.method. 它们不是函数是方法!
  如果你要去返回值就这么用 t=oimg.method () .
  再次提醒注意:未注册版本生成的图片大小为320x240,能不能突破这个限制,网上说注册就行,
经过我试验不必要,你只要把图片保存为swf格式就可以了。
看实例:
  1. set oshell=createobject("wscript.shell")
  2. set oimg=createobject("shotgraph.image")
  3. x=200
  4. y=200
  5. oimg.createimage x,y,8
  6. oimg.setcolor 0,255,100,12
  7. oimg.setcolor 1,125,0,0
  8. oimg.setdrawcolor 1
  9. oimg.line 50,50,100,100
  10. oimg.gifimage 1,0,"test.swf"
  11. oshell.run "test.swf",3
复制代码
利用循环语句把步长设置为小数,将得到高精度图像。

TOP

17# wc726842270
我那天有时间时,我更新一下,给出点简单清楚的实例。
对了,你问的4色,是指你的图片中要用的4色。
rgb的r是red,g是green,b是blue。

TOP

本帖最后由 wc726842270 于 2011-4-1 00:27 编辑

一始看以为颜色的模式是CMYK,但细看却不是。不过问一下题外话,RGH这个H代表什么啊
PS:“'4是指图像中要用到4种颜色,颜色按编号引用”有些不理解,它不是按照RGB的规则么?为什么要指定4种呢。RGB再通过色阶不可以达到一般的要求么(有点跑题了,呵呵),运行了一下很有意思。
枫中残雪:风停了,我的心却在动,让我心中的寒意走向远方

TOP

今天上网逛,看到一个vbscom非常好。这是一个画图组件。生成的图像非常漂亮。
组件名叫shotgraph,下载地此为http://aspxhome.com/article/uplo ... 200792612313895.rar
给出一个生成gif的程序:
  1. set obj=CreateObject("shotgraph.image")
  2. size=201
  3. 'Calling the CreateImage method
  4. obj.CreateImage size,size,4
  5. '4是指图像中要用到4种颜色,颜色按编号引用
  6. obj.SetColor 0,255,255,255
  7. obj.SetColor 1,0,0,0
  8. obj.SetColor 2,255,108,0
  9. obj.SetColor 3,0,0,204
  10. '0~3代表颜色编号,后面的三个数字是rgh数。
  11. obj.SetBgColor 0
  12. obj.FillRect 0,0,size-1,size-1
  13. '画正方形,填充色是编号为0的颜色,后面的是对角线坐标。程序有错误,颜色编号只能从1开始,不能用0,后面的语句和这句一样的道理。
  14. obj.SetDrawColor 1
  15. 'Drawing the line
  16. obj.Line size-1,0,0,size-1
  17. 'Color 2 will be used for filling
  18. obj.SetBgColor 2
  19. 'Draw the big circle
  20. obj.Ellipse 5,5,size-6,size-6
  21. 'Color 2 will be used for filling
  22. obj.SetBgColor 3
  23. 'Draw the small circle
  24. obj.Ellipse 5,(size-5)/4,size/2,(size-5)*3/4
  25. 'Create the image file named test.gif
  26. obj.GifImage 0,1,"test.gif" '图片可以保持为一切windows图片,包括swf文件也可以。
复制代码
上面的代码生成的图片如下:有了这个画图组件,利用vbs画函数的图像的问题就解决了。利用这个com去生成图片,用windows图片查看器去
不断的显示图片,真的在vbs里面画图很完美了。shotgraph很小,小到安装时你都不没感觉。

最大的遗憾是图片的长宽受限制。其它的都非常好。


===========上面的语句有问题==下面的为正确的===========================
  1. set obj=createobject("shotgraph.image")
  2. obj.createimage 300,200,3
  3. obj.setcolor 1,0,255,0
  4. obj.setcolor 2,0,0,255
  5. obj.setbgcolor 1
  6. obj.fillrect 0,0,300,200
  7. obj.setdrawcolor 2
  8. obj.line 0,0,200,200
  9. obj.gifimage 0,1,"test.gif"
复制代码
==================================运动的直线
  1. set oshell=createobject("wscript.shell")
  2. set obj=createobject("shotgraph.image")
  3. obj.createimage 300,200,3
  4. obj.setcolor 1,0,255,0
  5. for i=0 to 20
  6. obj.setdrawcolor 1
  7. obj.line i,i,400-i*i,i*i  '改为 obj.line i,i,i,i 就是点
  8. obj.gifimage 0,1,"test.gif"
  9. wscript.sleep 500
  10. oshell.run "test.gif"
  11. next
复制代码
要申请金山快盘的 请点我的邀请链接,我也好到金上去弄2分。谢谢支持哦。
要请链接为&nbsp;&nbsp;&nbsp;&nbsp; 推荐金山快盘,5.6G的免费空间,可以存照片、文档等,可以自动同步快盘里的文件,在哪都能编辑使用,不怕硬盘损坏,系统崩溃,电脑丢失,病毒破坏等,文件永不丢失的网络硬盘!非常喜欢! &nbsp;&nbsp;&nbsp;&nbsp; 点击下面的的地址立即试用:   http://k.wps.cn/register/?invite=dbkvsx
=====================动态的画抛物线, 特别注意,支持小数步长,如step 0.05
  1. set oshell=createobject("wscript.shell")
  2. set obj=createobject("shotgraph.image")
  3. obj.createimage 300,200,3
  4. obj.setcolor 1,0,255,0
  5. for i=0 to 100
  6. obj.setbgcolor 1
  7. obj.fillrect i,i^2*0.02,i+1,i^2*0.02+1
  8. obj.gifimage 0,1,"test.gif"
  9. wscript.sleep 500
  10. oshell.run "test.gif"
  11. next
复制代码
1

评分人数

TOP

郁闷。
为啥学bat的人那么多。学vbs的那么少。
vbs无论从入门,到功能都比bat强很多。郁闷。
我想是不是因为vbs里面的英文太多了。

TOP

13# myzam


        今天上网看写或读取剪切板的内容。方法真是很多。但看来看去,思路大致都是利用复制,粘贴去获得,写读剪切板的内容。真的是万紫千红。
有一种方法我觉得是不错的,一个网页文件里面可以嵌入文本框对象,而有文本框对象就可以进行复制与粘贴。这就隐含了读写剪切板。
     于是打开注册表在根键HKCU(这里注册的是classes=类),这是一个与类有关的键。网页中的按钮啊,文本框啊常这么写:
<form>
   <input type='text'/>
     <input type='button'/>
</form>
这里就在网页里面嵌入了一个窗体对象。所一我在HKCU键里搜索,就发现了一大堆与窗体有关的类,
如:forms.form.1,-forms.textbox.1,比照网页文件里面的窗体与文本框的关系,我想窗体是父类,文本框是子类,于是参考了其它的脚本,写下了下面的脚本,测试成功,离开了网页,文本框对象我们可以创建,但是你看不到。只有依附于网页等,你才可以显示出文本框!所以文本框的属性和网页中的是一样的。因为,你更本调用的就是网页中的那个文本框。
发到这里分享。
  1. set oform=createobject("forms.form.1") '创建窗体对象
  2. set  otextbox=oform.add("forms.textbox.1") '创建文本框对象
  3. otextbox.value="hello world"  '赋值给文本框
  4. otextbox.selstart=0
  5. otextbox.sellength=8 '以上两句是选择文本框里面的内容
  6. '如果你是用的是多行文本框,就加这样一句:otextbox.multiline=true
  7. otextbox.copy
  8. wscript.echo otextbox.textlength '显示一下我选中的文本长度。
复制代码
------------------------------------
读取剪切板内容 Clipboard Text  read by Textbox
  1. set oform=createobject("forms.form.1")
  2. set otextbox=oform.add("forms.textbox.1")
  3. otextbox.paste
  4. wscript.echo otextbox.value
  5. 'value属性和text属性的效果一样
复制代码
在理解上面的代码上,你想象中在进行html文件的编写。你在编写一个窗体,窗体里面有嵌入了一个文本框,这样代码就好理解了。


到这里我才发现原来网页中用的那些对象原来可以按照这样的方法脱离开网页而生存下去。
我还得测试一下能不能直接使用文本框对象,也就是说不创建窗体对象可以不?网页中是可以的。但是网页中是不是在隐含的使用文本框对象呢?
测试好了在贴。
经测试,发现不行,这说明如下的网友代码:
<input type='text'/>
虽然没有显示的创建窗体,但是html是在后台默默的创建了窗体的。


一点思考:不一定对。我猜测窗体com是按类似于如下的方式组织的:


<package>
   <component id='forms.form.1'>
       <public>
                      <method  name='add'>
              ...
       </public>
       <script language=vbs>
                  set  add=createcomponent("forms.textbox.1")

      </script>
   </component>
   <component id='forms.textbox.1'>
        <public>
             <method id='paste/'/>
              <method id='copy'/>

       </public>
        <script language=vbs>
              function paste
                     ....
             end function
               function copy
                     ....
             end function

         </script>
        ......
   </component>
     <component id='button'>
        ......
   </component>

</package>


---------------------------------------
所以vbs才会这样调用com

set  form=createobject("forms.fomr.1")
set textbox=form.add("forms.textbox.1")
。。。。。。
这样的嵌套结构就决定了,一定要先创建窗体form,然后才能调用textbox对象。

-------------------------------------------------
一个有趣的问题:
   set form=createobject("forms.form.1")
set textbox=form.add("forms.image.1")
textbox.picture=loadpicture("f:\sunset.jpg")
for i=1 to 5
   wscript.echo hex(textbox.picture)
next
按上面的方式运行结果是数字,这些数字代表什么呢?
---------------------------
我突然来了点灵感:
显示的数字是8位16进制,我认为前4为为line,后4位为column。代表图片的行列大小。
对于loadpicture的认识,有了一点认识。就是可以用来获取图片的高宽。
如:
  set t=loadpicture("f:\sunset.jpg")
   wscript.echo t.width,t.height
这个函数居然可以创建对象。好奇怪。但是这样得到的值和真实的快高不一样,图片是800x600,于是把获得的数字t.width除以800,得到了26.45875,
修改上面的程序
   set t=loadpicture("f:\sunset.jpg")
   wscript.echo int(t.width/26.45875),int(t.height/26.45875)
再运行,发现基本是
800x600,于是信心大增,把int该为round函数,居然对上号。于是有拿第二张图片测试,这次通过了。但是t返回的数值代表什么呢?还在思考中。
当然在网页中有图片框时这个函数的用法很简单,用法如名。

TOP

11# wc726842270


我觉得可以。mshta是hta的宿主,专门用来解释hta文件的。而hta文件里面是可以嵌入脚本的,可以嵌入脚本就可以调用run(或exec)方法。而调用run就可以执行
bat文件。但我没试过。

TOP

10# myzam


还有就是,不能老在Windows里面转圈,还得了解一下UNIX里面的Shell、Perl等
^_^
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

本帖最后由 wc726842270 于 2011-3-28 21:32 编辑

用你的一句话来说"对与错并不重要"
重要的是为什么会是这个结果,也就是说过程,其实跟1L基本一个意思
我问个小问题
常见BAT通过MSHTA来调用VBS。那么能不能在VBS中用MSHTA来调用BAT呢?先思考一下,要说出为什么!!(思考交给别人)
PS:关于MSHTA的材料可不全啊,不过可以从宿主的角度着手
枫中残雪:风停了,我的心却在动,让我心中的寒意走向远方

TOP

本帖最后由 myzam 于 2011-3-28 19:23 编辑

9# wc726842270


     我在大学里面学的是basic ,fortran。那时我没电脑。我印象最深刻的是我算一个数值积分,程序运行了近4分钟才算完,那时的电脑是TR-80机,真的好慢,还有一次我参加抽签考试,看的是编程打到三角,平时我都会的,到哪参加考试时紧张,直到时间要用完时才编号,好险。后来工作了有电脑了。弄了点dos。之后弄了点vb。后来别人告诉我,要牛逼就去学vc,而学delphi是
明智的选择,于是又去弄了弄delphi。结果是什么都没学好。在后来由去弄了下汇编。乱七八糟的弄了一大堆,到头来我是什么都没学好。
其实,说穿了还是工作中用不了多少。工作中能常用的就记的住。我在想,大学里面学的basic到现在我都还能记住,
更本原因是工作中,我有时要用来数值计算。其它的老是忘记,所以学好查手册我觉得是最好的办法。vbs越看越觉得是无底洞。
我都在想这个世界上有没有对vbs精通的人存在了。vbs的语法和20年前的basic语言差不多。但是是现在的vbs功能太强大,几乎是无所不能。
现在想想其实学什么语言都差不多。现在的高级语言都有共性。人的精力是有限的,专心一门语言就可以了。如果感觉精力旺盛,可以再去了解
一下其它的语言。
学编程其实也是不误正业,我觉得就和有的人喜欢打牌是一个道理。呵呵。
  现在的高级语言分为B,C,D(BASIC,C,DELPHI),这个世界上有没有人精通这三门语言的?真的不知道有没有。
微软的vb(vbs)是比较易懂的一门语言,感谢微软,它带着我们走进了现代的面向对象的编程。
所真的bat真的很古老,它不是面向对象的。如果只学bat那就意味着永远都停留在古代。我不是说古代就不好。
学bat之于,也学一点现代一点的高级语言。我想这是一种不错的选择。

TOP

本帖最后由 wc726842270 于 2011-3-27 22:42 编辑

说的非常好,个人认为VBS是一个“高不成低不就”的脚本语言。刚接触不容易学,也没有像DOS一样走过一个时代(也就是后来的CMD。虽说不是,但是也是相通的)而VBS对语法,和英语还有更高的技术要有足够的了解(比如COM技术等)。虽然原因很多,但最直观的就是它不是主流。不过要是想学习技术的学习一下会是一个不错的选择。给大家一篇文章
http://www.jb51.net/article/14772.htm
枫中残雪:风停了,我的心却在动,让我心中的寒意走向远方

TOP

本帖最后由 myzam 于 2011-3-27 22:26 编辑

7# Batcher
怎么可能没看呢。我都看了几遍了。不知道为啥,参加vbs讨论的人那么少。我就是想把人气弄起来再说。有了人啥都好办嘛。

TOP

6# myzam


你学VBS的时候没有找几个教程看看?
这些基础知识在Script56.chm里面讲的很清楚啊。

Windows脚本技术(script56.chm)
http://bbs.bathome.net/thread-1985-1-1.html
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

5# wc726842270
对的。
刚开始接触msgbox时,点确定和取消按钮,效果都一样。
于是就想怎么做才可以让点击确定去执行a代码,点击取消就去执行b代码。
于是就 想 msgbox在运行后是不是有一个放回值。
这样就设计了下面的测试代码:
  1. t=msgbox("hello world",vbyesno,"我的测试")
  2.       wscript.echo t
复制代码
发现有放回值是6,7.

另外,bat中有很强的字符串截取功能。在vbs中也有,只是功能不那么强大。
下面几个fso对象的方法就具有字符串截取功能
getbasename
getdrivename
getextensionname
getfilename
getparentfoldername

p="k:\gg\uu\ha.abc"
set fso=createobject("scripting.filesystemobject")
wscript.echo fso.getdrivename(p)

-------------------------------------------显示驱动器类型
  1. set oshell=createobject("wscript.shell")
  2. set fso=createobject("scripting.filesystemobject")
  3. set drives=fso.drives
  4. for each i in drives
  5.   
  6.   if (i.drivetype mod 4)=0 then wscript.echo i&"It is CD"
  7.   if (i.drivetype mod 4)=1 then wscript.echo i&"It is flappy"
  8.   if (i.drivetype mod 4)=2 then wscript.echo i&"It is hard-disk"
  9. next
  10.    wscript.echo "Drives-count="&drives.count
复制代码
运行结果如下图

TOP

和MSGBOX一样INPUTBOX的按钮也是很有意思的,确定和取消也代表了不同的含意(当然最好是有个变量接住这个输入值)
枫中残雪:风停了,我的心却在动,让我心中的寒意走向远方

TOP

返回列表