能力值:
( LV4,RANK:50 )
|
-
-
2 楼
模块应该是这样的:
Main proc hWnd,wMsg,wParam,lParam
mov eax,wMsg(消息)
.if eax == WM_CLOSE
.elseif eax == WM_INITDIALOG
.elseif eax == WM_COMMAND
.else
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret
gMain endp
|
能力值:
( LV4,RANK:50 )
|
-
-
3 楼
_ProcWinMain 是个回调函数,请查看MSDN来学习编写这个函数的方法
|
能力值:
(RANK:210 )
|
-
-
4 楼
没有理解我的意思楼上的两位,可能我没说明白
我的意思是我写的这个程序是没有窗口的,我只是自己写个函数来处理接受消息而已。这个函数类似于回调函数。请问这样行吗?
|
能力值:
( LV4,RANK:50 )
|
-
-
5 楼
没有窗口怕是不行吧。系统是按窗口来分发消息的。如果没有窗口。系统怎么知道消息是给你的啊。
|
能力值:
( LV4,RANK:50 )
|
-
-
6 楼
恩,要写没有窗口的进程吗?没有写过
但是要写的话写个dll岂不是更好?
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
看看我这个没窗口的程序,通过定时器来处理消息!
.486
.model flat,stdcall
option casemap:none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include 数据
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include windows.inc
include kernel32.inc
includelib kernel32.lib
include user32.inc
includelib user32.lib
killProc proto :dword
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.data
sbar db "文件夹选项",0
.data?
hInstance HINSTANCE ?
CommandLine LPSTR ?
Timerid UINT ?
lpString byte 127 dup(?)
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 代码段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.code
TimerProc PROC hWnd:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD
LOCAL fid :dword
LOCAL fwin :dword
LOCAL slen :dword
invoke GetForegroundWindow ;取前台窗口句柄
mov fwin,eax
invoke GetWindowText, fwin,addr lpString,100 ;取窗口标题
.if eax==0
ret
.endif
invoke lstrlen, offset lpString ;获得长度
mov slen,eax
invoke CharUpperBuff,offset lpString,slen ;转为大写
invoke lstrcmp,addr lpString, addr sbar ;比较文本
.if eax==0
invoke killProc,fwin
;invoke SendMessage,fwin,WM_CLOSE,NULL,NULL
.endif
ret
TimerProc endp
killProc PROC hWnd:DWORD
LOCAL pid:dword
LOCAL ProcHandle:dword
invoke GetWindowThreadProcessId,hWnd,addr pid
invoke OpenProcess,PROCESS_ALL_ACCESS,FALSE, pid
mov ProcHandle,eax
.if ProcHandle!=0
invoke TerminateProcess,ProcHandle,0
invoke CloseHandle,ProcHandle
.endif
ret
killProc ENDP
;************************************************************
whileStar PROC
LOCAL @stMsg:MSG
.while TRUE
invoke GetMessage,addr @stMsg,NULL,0,0
.break .if (!eax)
invoke TranslateMessage,addr @stMsg
invoke DispatchMessage,addr @stMsg
.endw
;......
ret
whileStar endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 程序开始
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
start:
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke GetCommandLine
mov CommandLine,eax
invoke SetTimer,NULL,NULL,100, addr TimerProc ;定时器:100ms
mov Timerid,eax
invoke whileStar ;进入消息循环,直到收到退出消息
invoke KillTimer,NULL,Timerid
invoke ExitProcess,NULL
;********************************************************************
end start
|
能力值:
( LV4,RANK:50 )
|
-
-
8 楼
Timer都出来了
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
楼上的,怎么呢?
|