初学win32汇编,用的是RadASM, 而且又不会调试,所以请各位高手这个程序的问题原因。
问题:
1. 执行“获取窗口”按钮后,为什么列表框里的每一项尾部都显示有"||".
2. “导出到文件”按钮的功能是把列表框里的内容导出到一个文件里,可是当执行“导出到窗口”按钮后,
导出文件里为什么总是只有一行内容??
3. 哪位高手有关于程序调试的教程,比较适合我这个初学者的,如果有请与俺共享。这样俺就可以在以后的
日子里,如果程序有问题就可以自己调试找出原因。就不用总是找别人帮忙。
程序代码如下:
;********************************
; ASM文件
;*********************************
.386
.model flat,stdcall
option casemap:none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;Include
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;Equ
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ICO_MAIN equ 100
DLG_MAIN equ 1
IDC_WINLIST equ 1000
IDC_GET equ 1001
IDC_CLEAN equ 1002
IDC_OUTFILE equ 1003
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.data?
hInstance dd ?
hWinMain dd ?
hDeskWnd dd ?
hFirstWnd dd ?
hBrotWnd dd ?
hFile dd ?
dwDistanceLow dd ?
dwDistanceHigh dd ?
dwCounter dd ?
szClassName db 128 dup (?)
szBuffer db 2048 dup (?)
szBuf db 256 dup (?)
szTitle db 128 dup(?)
.const
szText db '确定要清除 ?',0
szCaption db '提示',0
szOutFileName db 'Out.txt',0
szForm db '%s',0dh,0ah,0
szFormat db '%d>.窗口标题:%s; 窗口类名:%s',0dh,0ah,0
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;代码段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.code
_ProcDlgMain proc uses ebx edi esi hWnd,wMsg,wParam,lParam
LOCAL @dwCountList
LOCAL @dwBytesWrite
mov eax,wMsg
.if eax == WM_CLOSE
invoke CloseHandle,hFile
invoke EndDialog,hWnd,NULL
;**************************************************
.elseif eax == WM_INITDIALOG
push hWnd
pop hWinMain
;**************************************************
.elseif eax == WM_COMMAND
mov eax,wParam
.if ax == IDC_GET
invoke GetDesktopWindow ;得到桌面窗口的句柄
mov hDeskWnd,eax
invoke GetWindow,eax,GW_CHILD ;寻找桌面窗口的第一个子窗口
mov hFirstWnd,eax
mov hBrotWnd,eax
mov dwDistanceLow,0
mov dwDistanceHigh,0
mov dwCounter,0
.while hBrotWnd
invoke GetParent,hBrotWnd
.if !eax
mov ecx,dwCounter
inc ecx
mov dwCounter,ecx
invoke GetWindowText,hBrotWnd,addr szTitle,sizeof szTitle
invoke GetClassName,hBrotWnd,addr szClassName,sizeof szClassName
invoke RtlZeroMemory,addr szBuffer,sizeof szBuffer
invoke wsprintf,addr szBuffer,addr szFormat,dwCounter,addr szTitle,\
addr szClassName
invoke SendDlgItemMessage,hWnd,IDC_WINLIST,LB_ADDSTRING,\
0,addr szBuffer
invoke GetWindow,hBrotWnd,GW_HWNDNEXT
mov hBrotWnd,eax
.else
invoke GetWindow,hBrotWnd,GW_HWNDNEXT
mov hBrotWnd,eax
.endif
.endw
;*******************************************************************************************
.elseif ax == IDC_OUTFILE
invoke CreateFile,addr szOutFileName,GENERIC_WRITE,\
FILE_SHARE_READ,NULL,OPEN_ALWAYS,\
FILE_ATTRIBUTE_NORMAL,NULL
.if eax != INVALID_HANDLE_VALUE