Win32汇编获取和设置文本框的内容

    科技2022-07-10  175

    看一下Win32汇编如何获取和设置文本框的内容;

    资源文件如下;

    #include <resource.h> #define ICO_MAIN 0x1000 //图标 #define DLG_MAIN 1 #define IDC_TXT1 2001 #define IDC_TXT2 2002 ICO_MAIN ICON "Main.ico" DLG_MAIN DIALOG 350, 250, 120, 150 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "对话框demo模板" FONT 9, "宋体" { EDITTEXT IDC_TXT1, 5, 15, 100, 25, ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP EDITTEXT IDC_TXT2, 5, 60, 100, 25, ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP DEFPUSHBUTTON "获取并设置", IDOK, 58, 125, 50, 14 CONTROL "", -1, "Static", SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE, 6, 110, 103, 1 }

        在资源文件中,定义对话框;定义2个文本框,标识分别是IDC_TXT1,IDC_TXT2; 

    ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ; by bobo ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> .386 .model flat, stdcall option casemap :none ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> include windows.inc include user32.inc includelib user32.lib include kernel32.inc includelib kernel32.lib ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ; Equ 等值定义 ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ICO_MAIN equ 1000h ;图标 DLG_MAIN equ 1 IDC_TXT1 equ 2001 IDC_TXT2 equ 2002 ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> .data? hInstance dd ? sztxt1 db 1024 dup (?) ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> .code ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> _ProcDlgMain proc uses ebx edi esi hWnd,wMsg,wParam,lParam mov eax,wMsg .if eax == WM_CLOSE invoke EndDialog,hWnd,NULL .elseif eax == WM_INITDIALOG invoke LoadIcon,hInstance,ICO_MAIN invoke SendMessage,hWnd,WM_SETICON,ICON_BIG,eax .elseif eax == WM_COMMAND mov eax,wParam .if ax == IDOK ;invoke EndDialog,hWnd,NULL invoke GetDlgItemText,hWnd,IDC_TXT1,addr sztxt1,sizeof sztxt1 invoke SetDlgItemText,hWnd,IDC_TXT2,addr sztxt1 .endif .else mov eax,FALSE ret .endif mov eax,TRUE ret _ProcDlgMain endp ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> start: invoke GetModuleHandle,NULL mov hInstance,eax invoke DialogBoxParam,hInstance,DLG_MAIN,NULL,offset _ProcDlgMain,NULL invoke ExitProcess,NULL ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> end start

    asm代码中,在 .data? 段,用dup定义一个db类型的区域;

            sztxt1        db    1024 dup (?) 

    在按下按钮的消息处理分支 .if    ax == IDOK 里面,调用 GetDlgItemText 和 SetDlgItemText,获取第一个文本框的值,设置为第二个文本框的值;

    获取到第一个文本框的值是存在 sztxt1 里,然后用 sztxt1 的值去设置第二个文本框的内容; sztxt1前面加addr;

            invoke    GetDlgItemText,hWnd,IDC_TXT1,addr sztxt1,sizeof sztxt1         invoke    SetDlgItemText,hWnd,IDC_TXT2,addr sztxt1

    编译和构建的过程如下;

    构建以后的文件; 

     

    可参阅此 

            https://blog.csdn.net/bcbobo21cn/article/details/104188812

    运行一下,如下;

     

    Processed: 0.023, SQL: 8