WaVe's Home

All About Program

导航

我的第一个Assembly程序

Posted on 2004-08-21 23:13  WaVe  阅读(259)  评论(1)    收藏  举报

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; StartC.asm by WaVe
; windows开始菜单标题更改程序
; 只能在windows xp下使用
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  .386
  .model flat, stdcall
  option casemap :none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include 文件定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include  windows.inc
include  user32.inc
includelib user32.lib
include  kernel32.inc
includelib kernel32.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Equ 等值定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DLG_MAIN equ  1h
IDAPPLY  equ  101h
IDC_ORI  equ  102h
IDC_NEW  equ  103h
ICO_MAIN equ  104h
IDC_STATIC equ  -1h
IDS_CL  equ  0ah,0dh
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  .data
szShell_TrayWnd db  'Shell_TrayWnd',0
szBUTTON db  'BUTTON',0
szWarning db  'Window Not Found!',IDS_CL,'You May Using',IDS_CL,'Win2000 or Win98',0
szCaption db  'Erorr',0  
szOriCap db  6 dup (?),0
szNewCap db  6 dup (?),0

  .data?
hInstance dd  ?
hTrayWnd dd  ?
hStart  dd  ?

icxScreen dd  ?
icyScreen dd  ?
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 代码段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  .code
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

_ProcDlgMain proc uses ebx edi esi hWnd,wMsg,wParam,lParam

  mov eax,wMsg
  .if eax == WM_CLOSE
close:   invoke EndDialog,hWnd,NULL

  .elseif eax == WM_INITDIALOG
   invoke LoadIcon,hInstance,ICO_MAIN
   invoke SetDlgItemText,hWnd,IDC_ORI,offset szNewCap
   invoke GetDlgItem,hWnd,IDC_NEW
   invoke SetFocus,eax
   invoke GetWindowText,hStart,offset szOriCap,7
   invoke SetDlgItemText,hWnd,IDC_ORI,offset szOriCap

   invoke SetWindowPos,hWnd,NULL,icxScreen,icyScreen,0,0,SWP_NOSIZE

  .elseif eax == WM_COMMAND
   mov eax,wParam
   .if ax == IDAPPLY
    .if hStart!=0

     invoke GetDlgItemText,hWnd,IDC_NEW,offset szNewCap,7
     invoke SetWindowText,hStart,offset szNewCap
     invoke SetDlgItemText,hWnd,IDC_ORI,offset szNewCap
    .elseif hStart == 0
     invoke MessageBox,hWnd,offset szWarning,offset szCaption,MB_OK
    .endif
   .elseif ax == IDOK
    invoke EndDialog,hWnd,NULL

   .endif
  .elseif eax == EN_UPDATE
   mov eax,wParam
   .if ax == IDC_ORI || ax == IDC_NEW
    invoke GetDlgItemText,hWnd,IDC_ORI,offset szNewCap,7
    invoke GetDlgItemText,hWnd,IDC_NEW,offset szNewCap,7

   .endif
  .else
   mov eax,FALSE
   ret
  .endif
  mov eax,TRUE
  ret

_ProcDlgMain endp

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
start:
  invoke GetModuleHandle,NULL
  mov hInstance,eax

  ;初始化变量
  invoke GetSystemMetrics,SM_CXSCREEN
  mov icxScreen,eax
  shr icxScreen,2
  invoke GetSystemMetrics,SM_CYSCREEN
  mov icyScreen,eax
  shr icyScreen,2
  
  ;寻找开始栏窗口句柄
  invoke FindWindow,offset szShell_TrayWnd,NULL
  mov hTrayWnd,eax
  invoke FindWindowEx,hTrayWnd,NULL,offset szBUTTON,NULL
  mov hStart,eax
  .if eax == 0
   invoke MessageBox,NULL,offset szWarning,offset szCaption,MB_OK
  .endif
  
  ;叫出对话框
  invoke DialogBoxParam,hInstance,DLG_MAIN,NULL,offset _ProcDlgMain,NULL
sair:  invoke ExitProcess,NULL
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  end start