注册 登录
编程论坛 汇编论坛

置顶小程序。看网页电影时自己用~ 源码~

onepc 发布于 2009-09-26 08:38, 814 次点击
程序代码:
;功能:按f10置顶 f11隐藏界面
;by onepc 153785587
.386
.model flat,stdcall
option casemap:none

include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib

;include macro.asm ;这个是CTXT("") 宏

IDR_MAINFRAME        equ            128
IDD_TOP_DIALOG        equ           102
IDC_ETIME         equ         100

ID_F10        equ 10
ID_F11        equ 11

.data


.data?
hInstance dd ?
hMain dd ?
hTop dd ?
dwCheck dd ?
dwYesNo dd ?

stMsg MSG <>

.code






DlgProc proc uses esi edi ebx hDlg,uMsg,wParam,lParam
.if uMsg==WM_INITDIALOG
    push hDlg
    pop hMain
    ;;;;;;;;;;;;;;;;;;;;;
    invoke    LoadIcon,hInstance,IDR_MAINFRAME
     invoke    SendMessage,hDlg,WM_SETICON,ICON_BIG,eax
    ;;;;;;;;;;;;;;;;;;;;
    invoke RegisterHotKey,hDlg,ID_F10,NULL,VK_F10 ;注册热键
    invoke RegisterHotKey,hDlg,ID_F11,NULL,VK_F11
   
    ;变非模态
    ;invoke    GetWindowLong,hDlg,GWL_STYLE
     ;or    eax,WS_THICKFRAME
     ;invoke    SetWindowLong,hDlg,GWL_STYLE,eax
     ;invoke ShowWindow,hDlg,SW_HIDE

   
   
   
.elseif uMsg==WM_COMMAND
    mov eax,wParam
    .if ax==IDOK
        ;invoke EndDialog,hDlg,TRUE
    .endif
   
 .elseif uMsg==WM_HOTKEY ;热键消息
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        .if wParam==ID_F10   ;置顶窗口
            
            invoke GetForegroundWindow
            mov hTop,eax
            invoke GetWindowLong,hTop,GWL_EXSTYLE
            mov dwCheck,eax   ;getwindowlong返回的窗口风格 传给 dwcheck
            mov dwYesNo,eax
            or dwCheck,WS_EX_TOPMOST ;若是本身是置顶的则or了之后是相等的,若是不是置顶的则不相等,即or了之后会大
            mov eax,dwCheck   
            .if eax>dwYesNo
                invoke    SetWindowPos,hTop,HWND_TOPMOST,0,0,0,0,\
                    SWP_NOMOVE or SWP_NOSIZE
            .else
                invoke    SetWindowPos,hTop,HWND_NOTOPMOST,0,0,0,0,\
                    SWP_NOMOVE or SWP_NOSIZE
            .endif
        
            
       .endif
       .if wParam==ID_F11
           invoke IsWindowVisible,hDlg
           .if eax
           invoke ShowWindow,hDlg,SW_HIDE
           .else
               invoke ShowWindow,hDlg,SW_NORMAL
           .endif
       .endif   
      
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;   
   
.elseif uMsg==WM_CLOSE
   invoke UnregisterHotKey,hDlg,ID_F10 ;注消热键
   invoke UnregisterHotKey,hDlg,ID_F11
   ;invoke MessageBox,NULL,CTXT("a"),CTXT("a"),0
    ;invoke EndDialog,hDlg,FALSE ;模态
    invoke DestroyWindow,hDlg ;非模态
    invoke PostQuitMessage,NULL;非模态
.else
    mov eax,FALSE
    ret
.endif
mov eax,TRUE
ret
DlgProc endp



start:
invoke GetModuleHandle,NULL
mov hInstance,eax

;invoke DialogBoxParam,hInstance,IDD_TOP_DIALOG,NULL,addr DlgProc,NULL ;模态
invoke CreateDialogParam,hInstance,IDD_TOP_DIALOG,NULL,addr DlgProc,NULL ;非模态

;;;;消息循环
         .while TRUE
         invoke GetMessage,addr stMsg,NULL,0,0
         .break .if eax==0
         invoke TranslateMessage,addr stMsg
         invoke DispatchMessage,addr stMsg
         .endw


invoke ExitProcess,NULL

end start
1 回复
#2
阿贝2009-10-23 23:16
看不懂 啊    楼主多加点说明 行不
1