找回密码
 立即注册
查看: 13384|回复: 67

易语言post教程 - 飞龙

[复制链接]

7657

回帖

86万

基友

34万

积分

天下一番

Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

伯爵荣耀

发表于 2012-7-21 18:25:31 | 显示全部楼层 |阅读模式
预备知识:熟悉易语言的常用指令。(了解apiOOP,并且会使用常用控件。)

注:此教程是本人学会易语言post两个月后写完的,本人非大神,所以各位也不要指望看完这篇教程就马上成为大神

回复

使用道具 举报

7657

回帖

86万

基友

34万

积分

天下一番

Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

伯爵荣耀

 楼主| 发表于 2012-7-21 18:25:40 | 显示全部楼层
本帖最后由 飞龙 于 2012-7-21 18:28 编辑

封包

首先你要有一个概念,你的电脑是客户端,百度服务器是服务端。客户端与服务端想要通信,必须发送数据,这种数据叫做封包。

为什么叫封包呢?这好比你把一个东西打包裹邮寄给另外一个人,很形象吧。
回复 支持 反对

使用道具 举报

7657

回帖

86万

基友

34万

积分

天下一番

Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

伯爵荣耀

 楼主| 发表于 2012-7-21 18:25:51 | 显示全部楼层
本帖最后由 飞龙 于 2012-7-21 18:28 编辑

http协议

http协议(超文本传输协议)是建立在tcp/ip协议之上的一种数据传输协议。它是一种规范,说白了就是一种格式,不按照这种格式写的封包不能被服务器识别。

一个简单的封包,取百度搜索主页文本:
  1. GET / HTTP/1.1
  2. Accept: */*
  3. Accept-Language: zh-CN
  4. User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; NP06; .NET4.0C; .NET4.0E; InfoPath.2)
  5. Host: [url=http://www.baidu.com]www.baidu.com[/url]
  6. Connection: Keep-Alive
  7. Cache-Control: no-cache
复制代码
第一部分是请求行(request line)
又分为三部分:
方法 子地址 协议版本

方法:常用的只有post 或get。 一般来说,取网页文本的都是get,而发送信息的都是post,不过也有例外。所以按照抓过来的包如实填写即可。
子地址:主机后面的地址,比如http://tieba.baidu.com/f?kw=wow 的子地址就是/f?kw=wow。如果是http://tieba.baidu.com,则子地址为/。
协议版本:目前是1.1。

第二部分为请求头(request header)
对于服务器给你传的封包,这部分叫做响应头(response header)
各请求头的说明可以查百科,这里只介绍常见的几个。
Accept表示可接受的数据类型,"*/*"表示所有类型,一般来说这个就够。
Accept-Language表示接受语言,一般来说是中文的,国外服务器一般是英文的。
User-Agent,简称UA,标识你用的是什么浏览器,不同浏览器会有很大的不同,当然对于同一平台上的你可以随便。
Host即主机,就是说http标头和第一个/之前的文本
Connection,连接状态,一般为Keep-Alive。
Cookie估计是最重要的东西了。如果你在登录论坛或贴吧时选自动保存,那么下一次再上的话就会直接读取保存的信息来判断登录状态,这个信息就叫cookie。

如果是post,还可能有几个另外的标头
Cache-Control,cache是缓存,这个标头表示要不要存缓存,一般来说不用,值为"no-cache"。
Content-Type,数据类型,一般是网页填表,即。
Content-Length,数据长度,这个真心没什么好讲的,对于svxml这项可以不写。

第三部分 数据(可选)
为什么数据是可选的呢?因为get方法不用提交数据。post提交的数据在封包的最后面,与最后一个请求头之间隔一个空行。
回复 支持 反对

使用道具 举报

7657

回帖

86万

基友

34万

积分

天下一番

Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

伯爵荣耀

 楼主| 发表于 2012-7-21 18:25:59 | 显示全部楼层
本帖最后由 飞龙 于 2012-7-21 18:29 编辑

抓包

对于具体的一个封包操作,我们不能闭门造车,要抓包看看服务器和客户端之间具体进行了什么通讯。
对于浏览器抓包,我和其他人一样推荐httpwatch,抓软件的推荐wareshark,下载地址百度一下就有。
安装好插件后,打开IE,从“工具”工具栏的httpwatch项把它点出来。

它会附到IE的底部。左上角三个按钮最重要,第一个是开始记录,第二个是停止记录,第三个是清空内容。
点开始后会变成记录状态,这时我们进行的每一个操作都会被记录。这张图是我记录访问百度主页时的截图。当然,会有很多无用信息,比如加载图片什么的,无视就好。
点开我们要想的记录,在下面就可以看到数据流,包括响应头和请求头。左下角的框里面就是我们需要的。
回复 支持 反对

使用道具 举报

7657

回帖

86万

基友

34万

积分

天下一番

Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

伯爵荣耀

 楼主| 发表于 2012-7-21 18:26:12 | 显示全部楼层
本帖最后由 飞龙 于 2013-1-1 03:34 编辑

发送封包

当你在编辑栏输入“www.baidu.com”后按回车,就会载入百度搜索的页面。这个过程中你看似什么都没有做,实际上是浏览器帮你做的,它向百度某个主机发送了一个请求,服务器返回你想要看的网页html源码,经浏览器翻译后就呈现来屏幕上了。

但是你做的东西不能像浏览器这样自动,你就必须自己连接服务器,编写封包,并控制流程发送。

不同的语言有不同的封装好的类,但由于易语言自身的支持库不足以满足我们的需求,我们要直接调用API,或者COM(公共对象组件)。常用的有wininet(API), svxml(COM) ,winhttp(API或COM)。其中svxml最好用,因为它是模拟浏览器的对象,而且不留缓存。

(代码用易语言编写,其他语言请举一反三。)

第一步

要调用COM,首先要初始化。初始化就是调用一个API,声明如下:
  1. .DLL命令 加载COM, , "ole32.dll", "CoInitialize", , 当前线程上初始化COM库
  2.     .参数 pvReserved, 整数型, , 值为0
复制代码
然后调用如下:
  1. 加载COM (0)
复制代码
第二步 创建对象
  1. .局部变量 svxml, 对象
  2. svxml.创建 (“MSXML2.ServerXMLHTTP.6.0”, )
  3. ' 一定要写上版本 不然就没法用代理了
复制代码
第三步 进行设置

如果需要代理:
  1. svxml.方法 (“SetProxy”, 2, [文本型] 代理)
复制代码
如果不需要:
  1. svxml.方法 (“SetProxy”, 1, “ ”)
复制代码
然后设置超时
  1. svxml.方法 (“SetTimeouts”,[整数型] 超时, [整数型] 超时, [整数型] 超时, [整数型] 超时)
复制代码
四个超时都有具体含义,需为整数型,具体请翻MSDN

第四部 打开连接并设置请求头
  1. svxml.方法 (“open”, 方法, 完整网址, 真)
复制代码
方法为"POST"或"GET",都要大写,为文本类型。
最后一个布尔值表示是否为异步,把它选上。

接下来要设置的请求头有六个
  1. svxml.方法 (“SetRequestHeader”, “Accept”, [文本型] Accept)
  2. svxml.方法 (“SetRequestHeader”, “Accept-language”, [文本型] Accept_Language)
  3. svxml.方法 (“SetRequestHeader”, “User-Agent”, [文本型] User_Agent)
  4. svxml.方法 (“SetRequestHeader”, “Content-Type”, [文本型] Content_Type)
  5. svxml.方法 (“SetRequestHeader”, “Connection”, [文本型] Connection)
  6. svxml.方法 (“SetRequestHeader”, “Cache-Control”, [文本型] Cache_Control)
复制代码
按照封包的内容设置即可,Host已经在open里设置完了所以不用。
有可能还有几个
  1.     svxml.方法 (“SetRequestHeader”, “Cookie”, [文本型] Cookie)
  2.     svxml.方法 (“SetRequestHeader”, “Referer”, [文本型] Referer)
复制代码
(后面的属性要自己设置)

第五步 发送数据并取回响应信息及响应头
  1. svxml.方法 (“send”, [文本型] 数据)
复制代码
get的话数据留空
  1. svxml.逻辑方法 (“WaitForResponse”, -1)
复制代码
等待异步完成
  1. 响应头 = svxml.文本方法 (“GetAllResponseHeaders”, )
复制代码
当然也可以具体取某一项,比如:
  1. 响应头 = svxml.文本方法 (“GetResponseHeader”, “Set-Cookie”)
复制代码
  1. data = svxml.读属性 (“responseBody”, ).取字节集 ()
复制代码
这里不推荐直接取文本,因为会自动转码,在某些网页会很蛋疼。
因为本机ansi是gbk,所以我这样写
  1. .如果 (编码 = #编码_GBK) '本机编码直接返回
  2.     响应信息 = 到文本 (data))
  3. .否则
  4.     data = 编码转换 (data, 编码, #编码_GBK, )
  5.     响应信息 = 到文本 (data))
复制代码
当然,编码要事先通过判断网页的编码自行设置,大多数网页都是gbk的,手机网页大部分是utf-8的。

第六步 清除及销毁

如果有下一个发送操作,直接创建就好,它会自动把原先的抹掉。

最后,如果不再用这个对象了,要把现在的清除,关闭对象,还是调用API。声明:
  1. .DLL命令 卸载COM, , "ole32.dll", "CoUninitialize", , 当前线程上销毁COM库
复制代码
调用:
  1. svxml.清除 ()
  2. 卸载COM ()
复制代码
看了这么一大长串代码,我不知道你们有什么感受,反正我觉得如果每个封包都要打一遍不得累死= =
所以大家可以把它封装为函数。但是这样会导致传参过多。我的建议是封装成类,诸多协议头利用类初始化来赋值。它们一般不需要改,也就不用管它们。关于这部分的代码请见附录。
回复 支持 反对

使用道具 举报

7657

回帖

86万

基友

34万

积分

天下一番

Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

伯爵荣耀

 楼主| 发表于 2012-7-21 18:26:24 | 显示全部楼层
本帖最后由 飞龙 于 2012-7-21 18:32 编辑

实战登陆百度

告诉大家一个捷径:cookie中只有BDUSS项是有用的,其他的都没有。
在这一节,我用的是我封装好的svxml类,见附录1
接口采用常规的http

首先抓包(过程略去):
分析一下,双斜线为注释:
  1. POST /?login HTTP/1.1
  2. Accept: application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
  3. Referer: <a href="https://passport.baidu.com/?login" target="_blank">https://passport.baidu.com/?login</a> //测试一下就可以发现来路不用写也能成功。
  4. Accept-Language: zh-CN
  5. User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; NP06; .NET4.0C; .NET4.0E; InfoPath.2)
  6. Content-Type: application/x-www-form-urlencoded
  7. Accept-Encoding: gzip, deflate //这项填写后没多大用,或者返回来都是乱码。
  8. Host: passport.baidu.com
  9. Content-Length: 215
  10. Connection: Keep-Alive
  11. Cache-Control: no-cache
  12. Cookie: BAIDUID=F6D7A289F9CDF94113127DD966AF9EC1:FG=1; BAIDU_WISE_UID=wapp_1342195021834_751; WAPTIME=1342280325; BDUSS=******; PTOKEN=b2258f0edd91bae375f98629feb9cba7; STOKEN=05ffdbaa53bac2f2e911292e8afa10d8; SAVEUSERID=faea0bcaa6647bb77f48c970d5ed5d8098 //登录不需要cookie,所以省。

  13. tpl_ok=&next_target=&tpl=&skip_ok=&aid=&need_pay=&need_coin=&pay_method=&u=.%2F&return_method=get&more_param=&return_type=&psp_tt=0&password=<密码>&safeflg=0&isphone=false&username=<用户名>&verifycode=&mem_pass=on
复制代码
接着用代码来实现:
初始化实例:
  1. .局部变量 xmlhttp, SvXml
复制代码
接着 定义一个局部变量放文本
  1. .局部变量 postdata, 文本型
  2. postdata = “tpl_ok=&next_target=&tpl=mn&skip_ok=&aid=&need_pay=&need_coin=&pay_method=&u=http%3A%2F%2Fwww.baidu.com%2F&return_method=get&more_param=&return_type=&psp_tt=0&password=” + 密码 +“&safeflg=0&isphone=tpl&username= ” + 用户名 +“ &verifycode=&mem_pass=on
复制代码
用户名要求gbk编码,不过gbk就是本机编码倒也无所谓。大家也可以去找一些这样的url编码源码来看。

然后发送封包:
  1. .局部变量 retstream, 文本型
  2. .局部变量 rethdr, 文本型
  3. retstream = xmlhttp.访问网页 (“POST”, “<a href="https://passport.baidu.com/?login" target="_blank">https://passport.baidu.com/?login</a>”, postdata, , 4000, rethdr)
复制代码
接下来就是查看rethdr中有没有BDUSS。这里大家可以搜索文本,我这里用的是正则。
  1. .局部变量 正则, 正则表达式
  2. .局部变量 结果, 搜索结果
  3.     正则.创建 (“BDUSS=.{192};”, )
  4.     结果 = 正则.搜索 (rethdr, 1, )
  5.     .如果真 (结果.是否为空 ())
  6.         信息框 (“登录失败!”, 0, )
  7.         返回 ()
  8.     .如果真结束
  9.     Cookie = 结果.取匹配文本 (rethdr, )
  10.     信息框 (“登录成功!”, 0, )
复制代码
至此大功告成
回复 支持 反对

使用道具 举报

7657

回帖

86万

基友

34万

积分

天下一番

Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

伯爵荣耀

 楼主| 发表于 2012-7-21 18:26:43 | 显示全部楼层
本帖最后由 飞龙 于 2012-7-21 18:33 编辑

附录1:svxml类
by 飞龙,部分代码来自mars访问网页模块
  1. .版本 2
  2. .支持库 iconv

  3. .程序集 SvXml, , 公开
  4. .程序集变量 svxml, 对象
  5. .程序集变量 编码, 文本型
  6. .程序集变量 Cookie, 文本型
  7. .程序集变量 Referer, 文本型
  8. .程序集变量 Accept, 文本型
  9. .程序集变量 Accept_Language, 文本型
  10. .程序集变量 User_Agent, 文本型
  11. .程序集变量 Connection, 文本型
  12. .程序集变量 Content_Type, 文本型
  13. .程序集变量 Cache_Control, 文本型

  14. .子程序 _初始化, , , 当基于本类的对象被创建后,此方法会被自动调用

  15. 加载COM (0)
  16. .如果真 (svxml.创建 (“MSXML2.ServerXMLHTTP.6.0”, ) = 假)
  17.     svxml.创建 (“MSXML2.ServerXMLHTTP.5.0”, )
  18. .如果真结束
  19. Accept = “*/*”
  20. Accept_Language = “zh-cn”
  21. User_Agent = “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)”
  22. Connection = “Keep-Alive”
  23. Content_Type = “application/x-www-form-urlencoded”
  24. Cache_Control = “no-cache”
  25. 编码 = #编码_GBK

  26. .子程序 _销毁, , , 当基于本类的对象被销毁前,此方法会被自动调用

  27. svxml.清除 ()
  28. 卸载COM ()


  29. .子程序 中止, , 公开, 中止正在进行的异步操作

  30. svxml.方法 (“Abort”, )

  31. .子程序 重定义编码, , 公开
  32. .参数 新编码, 文本型

  33. 编码 = 新编码

  34. .子程序 取得对象, 对象, 公开

  35. 返回 (svxml)

  36. .子程序 访问网页, 文本型, 公开
  37. .参数 方法, 文本型, 可空, 默认GET
  38. .参数 完整网址, 文本型
  39. .参数 数据, 文本型, 可空, POST专用
  40. .参数 代理, 文本型, 可空
  41. .参数 超时, 整数型, 可空, 默认8000
  42. .参数 响应头, 文本型, 参考 可空
  43. .局部变量 data, 字节集

  44. .如果真 (是否为空 (超时))
  45.     超时 = 8000
  46. .如果真结束
  47. .如果真 (是否为空 (方法))
  48.     方法 = “GET”
  49. .如果真结束
  50. .如果 (是否为空 (代理))
  51.     svxml.方法 (“SetProxy”, 1, “”)
  52. .否则
  53.     svxml.方法 (“SetProxy”, 2, 代理)
  54. .如果结束
  55. svxml.方法 (“SetTimeouts”, 超时, 超时, 超时, 超时)
  56. svxml.方法 (“open”, 方法, 完整网址, 真)
  57. svxml.方法 (“SetRequestHeader”, “Accept”, Accept)
  58. svxml.方法 (“SetRequestHeader”, “Accept-language”, Accept_Language)
  59. svxml.方法 (“SetRequestHeader”, “User-Agent”, User_Agent)
  60. svxml.方法 (“SetRequestHeader”, “Content-Type”, Content_Type)
  61. svxml.方法 (“SetRequestHeader”, “Connection”, Connection)
  62. svxml.方法 (“SetRequestHeader”, “Cache-Control”, Cache_Control)
  63. .如果真 (Cookie ≠ “”)
  64.     svxml.方法 (“SetRequestHeader”, “Cookie”, Cookie)
  65. .如果真结束
  66. .如果真 (Referer ≠ “”)
  67.     svxml.方法 (“SetRequestHeader”, “Referer”, Referer)
  68. .如果真结束
  69. svxml.方法 (“send”, 数据)
  70. svxml.逻辑方法 (“WaitForResponse”, -1)
  71. .如果真 (取反 (是否为空 (响应头)))
  72.     响应头 = svxml.文本方法 (“GetAllResponseHeaders”, )
  73. .如果真结束
  74. ' 直接取ResponseText会自动转码
  75. data = svxml.读属性 (“responseBody”, ).取字节集 ()
  76. .如果 (编码 = #编码_GBK)
  77.     返回 (到文本 (data))
  78. .否则
  79.     data = 编码转换 (data, 编码, #编码_GBK, )
  80.     返回 (到文本 (data))
  81. .如果结束


  82. .子程序 置Cookie, , 公开
  83. .参数 New_Cookie, 文本型

  84. Cookie = New_Cookie


  85. .子程序 置Referer, , 公开
  86. .参数 New_Referer, 文本型

  87. Referer = New_Referer

  88. .子程序 重定义Accept, , 公开
  89. .参数 New_Accept, 文本型

  90. Accept = New_Accept


  91. .子程序 重定义Accept_Language, , 公开
  92. .参数 New_Accept_Language, 文本型

  93. Accept_Language = New_Accept_Language


  94. .子程序 重定义User_Agent, , 公开
  95. .参数 New_User_Agent, 文本型

  96. User_Agent = New_User_Agent


  97. .子程序 重定义Connection, , 公开
  98. .参数 New_Connection, 文本型

  99. Connection = New_Connection


  100. .子程序 重定义Content_Type, , 公开
  101. .参数 New_Content_Type, 文本型

  102. Content_Type = New_Content_Type


  103. .子程序 重定义Cache_Control, , 公开
  104. .参数 New_Cache_Control, 文本型

  105. Cache_Control = New_Cache_Control


  106. .子程序 访问网页文件, 字节集, 公开
  107. .参数 方法, 文本型, 可空, 默认GET
  108. .参数 完整网址, 文本型
  109. .参数 数据, 文本型, 可空, POST专用
  110. .参数 代理, 文本型, 可空
  111. .参数 超时, 整数型, 可空, 默认8000
  112. .参数 响应头, 文本型, 参考 可空
  113. .局部变量 data, 字节集

  114. .如果真 (是否为空 (超时))
  115.     超时 = 8000
  116. .如果真结束
  117. .如果真 (是否为空 (方法))
  118.     方法 = “GET”
  119. .如果真结束
  120. .如果 (是否为空 (代理))
  121.     svxml.方法 (“SetProxy”, 1, “”)
  122. .否则
  123.     svxml.方法 (“SetProxy”, 2, 代理)
  124. .如果结束
  125. svxml.方法 (“SetTimeouts”, 超时, 超时, 超时, 超时)
  126. svxml.方法 (“open”, 方法, 完整网址, 真)
  127. svxml.方法 (“SetRequestHeader”, “Accept”, Accept)
  128. svxml.方法 (“SetRequestHeader”, “Accept-language”, Accept_Language)
  129. svxml.方法 (“SetRequestHeader”, “User-Agent”, User_Agent)
  130. svxml.方法 (“SetRequestHeader”, “Content-Type”, Content_Type)
  131. svxml.方法 (“SetRequestHeader”, “Connection”, Connection)
  132. svxml.方法 (“SetRequestHeader”, “Cache-Control”, Cache_Control)
  133. .如果真 (Cookie ≠ “”)
  134.     svxml.方法 (“SetRequestHeader”, “Cookie”, Cookie)
  135. .如果真结束
  136. .如果真 (Referer ≠ “”)
  137.     svxml.方法 (“SetRequestHeader”, “Referer”, Referer)
  138. .如果真结束
  139. svxml.方法 (“send”, 数据)
  140. svxml.逻辑方法 (“WaitForResponse”, -1)
  141. .如果真 (取反 (是否为空 (响应头)))
  142.     响应头 = svxml.文本方法 (“GetAllResponseHeaders”, )
  143. .如果真结束
  144. ' 直接取ResponseText会自动转码
  145. data = svxml.读属性 (“responseBody”, ).取字节集 ()
  146. 返回 (data)
复制代码
回复 支持 反对

使用道具 举报

7657

回帖

86万

基友

34万

积分

天下一番

Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

伯爵荣耀

 楼主| 发表于 2012-7-21 18:26:51 | 显示全部楼层
本帖最后由 飞龙 于 2012-7-21 18:33 编辑

附录2: svxml对象使用说明
by fanxiaojie119

http://blog.csdn.net/fanxiaojie119/article/details/5187631

2012-7-20
[The End]
回复 支持 反对

使用道具 举报

19

回帖

-1015

基友

55

积分

凡人2阶 Lv.2

Rank: 1

发表于 2012-7-25 08:00:45 | 显示全部楼层
{:3_41:}
回复 支持 反对

使用道具 举报

4

回帖

18

基友

71

积分

凡人2阶 Lv.2

Rank: 1

发表于 2012-7-27 20:56:19 | 显示全部楼层
是好支持顶
回复 支持 反对

使用道具 举报

1809

回帖

6014

基友

6350

积分

通神6段 Lv.9

【再看削你后颈】

Rank: 5Rank: 5

发表于 2012-7-30 06:00:37 | 显示全部楼层
好NB!  支持看看。
回复 支持 反对

使用道具 举报

893

回帖

4

基友

2263

积分

通神4段 Lv.7

Rank: 4

伯爵荣耀

发表于 2012-7-31 23:15:56 | 显示全部楼层
顶:lol:lol
回复 支持 反对

使用道具 举报

378

回帖

8020

基友

5539

积分

萨菲尔斯

Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17

伯爵荣耀

发表于 2012-8-1 18:52:31 | 显示全部楼层
VB怎么破

点评

vb不灵 直接学vb.net吧  发表于 2012-8-1 20:27
回复 支持 反对

使用道具 举报

543

回帖

9457

基友

6601

积分

萨菲尔斯

Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17

发表于 2012-8-1 22:01:41 | 显示全部楼层
这些都会,只是想知道删帖的那些类怎么调用

点评

自己抓包试试 百度的功能千变万化 但是post或get的方法永远不变 只是内容换一下而已  发表于 2012-8-1 22:07

回复 支持 反对

使用道具 举报

82

回帖

163

基友

375

积分

凡人3阶 Lv.3

Rank: 2

发表于 2012-8-2 11:10:06 | 显示全部楼层
你不是是、大神?
回复 支持 反对

使用道具 举报

7

回帖

95

基友

240

积分

凡人3阶 Lv.3

Rank: 2

发表于 2012-8-2 16:21:44 | 显示全部楼层
怒顶
回复 支持 反对

使用道具 举报

98

回帖

1894

基友

1028

积分

通神3段 Lv.6

Rank: 3Rank: 3

发表于 2012-8-2 19:46:22 | 显示全部楼层
最近准备学习易语言。先顶下。:$
该会员没有填写今日想说内容.
回复 支持 反对

使用道具 举报

378

回帖

8020

基友

5539

积分

萨菲尔斯

Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17

伯爵荣耀

发表于 2012-8-3 10:17:59 | 显示全部楼层
来段VB安卓登录的源码啊 ~~ 没安装安卓模拟器

点评

我只有vb.net的= =  发表于 2012-8-8 11:30
啊啊啊啊啊啊
回复 支持 反对

使用道具 举报

40

回帖

146

基友

244

积分

凡人3阶 Lv.3

Rank: 2

发表于 2012-8-8 09:32:45 | 显示全部楼层
大神
回复 支持 反对

使用道具 举报

1196

回帖

5083

基友

6356

积分

通神6段 Lv.9

Rank: 5Rank: 5

发表于 2012-10-25 18:07:50 | 显示全部楼层
回复 支持 反对

使用道具 举报

119

回帖

285

基友

444

积分

凡人3阶 Lv.3

Rank: 2

发表于 2012-10-31 20:45:43 | 显示全部楼层
记录一下,天冷了窝在家里好好学习一下,谢谢飞龙
回复 支持 反对

使用道具 举报

7

回帖

0

基友

33

积分

凡人1阶 Lv.1

Rank: 1

发表于 2012-12-5 22:29:36 | 显示全部楼层
此教材非常之好,受益匪浅!
回复 支持 反对

使用道具 举报

857

回帖

1万

基友

5683

积分

通神6段 Lv.9

Rank: 5Rank: 5

发表于 2013-1-2 13:34:24 | 显示全部楼层
看不懂,留名
回复 支持 反对

使用道具 举报

39

回帖

63

基友

173

积分

凡人2阶 Lv.2

Rank: 1

发表于 2013-1-20 11:22:03 | 显示全部楼层
为什么我的post不行啊
回复 支持 反对

使用道具 举报

2903

回帖

1万

基友

1万

积分

仙人4层 Lv.13

方寸之仙

Rank: 7Rank: 7Rank: 7

发表于 2013-1-22 11:37:17 | 显示全部楼层
支持下~  
回复 支持 反对

使用道具 举报

89

回帖

46

基友

547

积分

通神1段 Lv.4

Rank: 2

发表于 2013-1-25 12:54:59 | 显示全部楼层
谢谢楼主分享
回复 支持 反对

使用道具 举报

239

回帖

780

基友

1129

积分

通神3段 Lv.6

Rank: 3Rank: 3

伯爵荣耀

发表于 2013-3-12 00:41:11 | 显示全部楼层
感谢飞龙大神!!!!!!
回复 支持 反对

使用道具 举报

72

回帖

340

基友

585

积分

通神1段 Lv.4

Rank: 2

发表于 2013-3-16 20:26:46 | 显示全部楼层
谢指点
回复 支持 反对

使用道具 举报

405

回帖

-29

基友

1082

积分

通神3段 Lv.6

啊啊啊啊啊啊啊啊啊

Rank: 3Rank: 3

伯爵荣耀

发表于 2013-3-17 14:06:52 | 显示全部楼层
回复 支持 反对

使用道具 举报

201

回帖

2514

基友

1300

积分

通神3段 Lv.6

Rank: 3Rank: 3

伯爵荣耀

发表于 2013-3-17 15:59:47 | 显示全部楼层
好厉害啊><
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|苍海国际 ( 鲁ICP备13020644号-1 )

GMT+8, 2024-11-22 01:59 , Processed in 0.098784 second(s), 24 queries .

Powered by Discuz! Theme By eRic Modified by 4bpa

© CangHai International We Do Our Rights!

返回顶部