当前位置: 代码迷 >> 汇编语言 >> 小弟我的win32汇编程序的“导出到文件”功能有有关问题,请高手赐教
  详细解决方案

小弟我的win32汇编程序的“导出到文件”功能有有关问题,请高手赐教

热度:220   发布时间:2016-05-02 04:46:33.0
我的win32汇编程序的“导出到文件”功能有问题,请高手赐教
初学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
  相关解决方案