用汇编语言写QQ任我聊
[url=http://bbs.cfan.com.cn/thread-384930-1-1.html][size=5][color=red]用汇编语言写QQ任我聊[/color][/size][/url]zP%YH XO$@"?b-R
9Kz4x um2{
[size=4]转自电脑爱好者论坛,作者:zhangke VZ&[N%|q)Pc_
原帖和可执行文件下载地址: [/size][url=http://bbs.cfan.com.cn/thread-384930-1-1.html][size=4][color=#0000ff]http://bbs.cfan.com.cn/thread-384930-1-1.html[/color][/size][/url][size=4] |X}%J Xp
nh_3xP#P Z
[注意]原创,转载请注明!!!E9F(m8C eiAN
呵呵!一个小工具而已,就是没加为好友也可以和别人聊天,临时会话!跟群里的和网站上的那种原理是一样的!
[img]http://bbs.cfan.com.cn/bbs-ad/luntan/tiezi/qq.jpg[/img]
原理解析:
在Tencent的互动服务里面([/size][url=http://imis.qq.com/][size=4][color=#0000ff]http://imis.qq.com/[/color][/size][/url][size=4])可以为你生成网页代码放到自己的网页中,让别人在网站上点一下就可以给你留言!
程序就是利用的这个生成的代码,直接在浏览器中输入
tencent://message/?uin=你想聊天的QQ号码&Site=im.qq.com&Menu=yes
就可以和别人聊天了,取消临时会话的用户不行(这个就是临时会话嘛!)~2vJE&P&l*E&y[(g
下面是汇编程序源代码:
$Bq N;p5HSmpGtp
.386
.model flat,stdcall Nv.SL ca5L)PU
option casemap:none
DlgProc proto :DWORD,:DWORD,:DWORD,:DWORD
include \masm32\include\windows.incU&{*YO#v h+g.w+N3p
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc
include \masm32\include\masm32.inc#D'{4tYJ'|XR
include \masm32\include\shell32.inc ~,N'Hu.?2C4B)rn
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\user32.lib
includelib \masm32\lib\masm32.lib
includelib \masm32\lib\shell32.lib
.data?
QQnum db ?
hInstance HINSTANCE ?
swidth dd ?
sheight dd ?S!\i6u#^K8txw+^f
dwidth dd ?
dheight dd ?c[NdU6mfu0Lh
rect RECT <>
mystr db ?(Z#Xy3~,MP9~q4s
szTemp1 db ?
szTemp2 db ?
.data
str1 db "tencent://message/?uin=",07mS}R6iL
str2 db "&Site=im.qq.com&Menu=yes",0
MainDialog db "MyDialog",0
szMutex db "zhangkesqqtalker",0
ErrorText db "Program already run...",0
ErrorTitle db "Warning!!!",0
.const ,vpDWO SV
BTNSTART equ 1003
EDITNUM equ 1002
.code$W.aI#^q{L
m)I V\6r
start:
I/k&a1C&Pu\
Main proc'MxtmFI9m
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke DialogBoxParam,hInstance,addr MainDialog,NULL,addr DlgProc,NULL
invoke ExitProcess,0:B I)ET FP
Main endp:s0~Q B&TUh
DlgProc proc hWnd:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
.if uMsg==WM_INITDIALOG l7UXD%^LJ
invoke CreateMutex,NULL,FALSE,addr szMutex:K2B Tfs kL}x
invoke GetLastErrorK1A a'i*JxH5H9A)^
.IF eax == ERROR_ALREADY_EXISTS6_3^OtiA&J&Am
invoke MessageBox,NULL,addr ErrorText,addr ErrorTitle,MB_ICONWARNING
invoke ExitProcess,NULLbb|c#|
.ENDIF
;上面几行代码的作用的防止程序多开(即只能运行一个实例) |xg,Ik O7bY
invoke GetSystemMetrics,SM_CXSCREEN ;#{k6B,iJs k
mov swidth,eax ;$\*ac)@E.u(jCem
invoke GetSystemMetrics,SM_CYSCREEN ;[/| V F3uF4~8v
mov sheight,eax ; eXfv:~P
invoke GetWindowRect,hWnd,addr rect ;
mov eax,rect.right ;这几行是为下面invoke SetWindowPos做准备 opW*@1N__r7j5x
sub eax,rect.left ; RoZ De*[_
mov dwidth,eax ;RIT!a-?6U
sub swidth,eax ;使窗体出现在屏幕中心'S*c"_ JDe]T
mov eax,rect.bottom ;2IP8[2T!`X A3A
sub eax,rect.top ;
mov dheight,eax ;其中不明白的地方看一下Platform SDK就可以了 *fMwS d]y
sub sheight,eax ;
shr sheight,1 ;8w(ys+\^^1_u
shr swidth,1 ;
invoke SetWindowPos,hWnd,HWND_NOTOPMOST,swidth,sheight,dwidth,dheight,SWP_SHOWWINDOW
.elseif uMsg==WM_COMMAND
mov eax,wParam;Ci!Mq0~)CK
.if ax==BTNSTART
invoke szCopy,addr str1,addr mystrMa({L%exC S
invoke GetDlgItemText,hWnd,EDITNUM,addr QQnum,11
invoke szCatStr,addr mystr,addr QQnum
invoke szCatStr,addr mystr,addr str21|w3vl h7g E
invoke ShellExecute,NULL,NULL,addr mystr,NULL,NULL,SW_HIDE V5{heF8M
.endif
.elseif uMsg==WM_CLOSE
invoke EndDialog,hWnd,0W7?bx s!lE&ly
.else
mov eax,FALSEB;T ?*};@(f
retYxZp*u{8X
.endif
mov eax,TRUE
ret*i9j/IvxU)j {
DlgProc endp*{%V6^'JkJ2`A y
end start
sr?~8|
忘了说!补充一句,使用工具为MASM32!!!
!R qz4rPI1w
有任何问题请与我联系:zk_invincible@163.com
[/size] [attach]1084[/attach]
页:
[1]