21,458
社区成员
发帖
与我相关
我的任务
分享
;_ShowMessage子程序用来将消息查表翻译成字符串,源程序如下:
_ShowMessage proc _uMsg,_wParam,_lParam
local @szBuffer[128]:byte
pushad
;********************************************************************
; 查找消息的说明字符串
;********************************************************************
mov eax,_uMsg
mov edi,offset dwMsgTable
mov ecx,MSG_TABLE_LEN
cld
repnz scasd
.if ZERO?
sub edi,offset dwMsgTable + sizeof dword
shr edi,2
mov eax,edi
mov ecx,MSG_STRING_LEN
mul ecx
add eax,offset szStringTable
;********************************************************************
; 翻译格式并发送到 Notepad 窗口
;********************************************************************
invoke wsprintf,addr @szBuffer,addr szFormat,\
_uMsg,eax,_wParam,_lParam
invoke _SendtoNotepad,addr @szBuffer
.endif
popad
ret
_ShowMessage endp
IF AddressSize = 16
THEN
Use CX for CountReg;
ELSE IF AddressSize = 64 and REX.W used
THEN Use RCX for CountReg; FI;
ELSE
Use ECX for CountReg;
FI;
WHILE CountReg ≠ 0
DO
Service pending interrupts (if any);
Execute associated string instruction;
CountReg ← (CountReg – 1);
IF CountReg = 0
THEN exit WHILE loop; FI;
IF (Repeat prefix is REPZ or REPE) and (ZF = 0)
or (Repeat prefix is REPNZ or REPNE) and (ZF = 1)
THEN exit WHILE loop; FI;
OD;