zhangke 发表于 2006-7-9 20:09:38

用汇编语言打造IE标题栏修改器

[程序名称]IE标题栏修改器
[程序作者]张科
[程序说明]用来修改IE标题栏(废话)
[开发日期]2006-7-9
[最早发布地点]飘云阁,转载请务必注明出处
[原理解析]修改注册表HKEY_CURRENT_USER,\Software\Microsoft\Internet Explorer\Main\
在里面找到项Window Title(没有则新建),然后修改Window Title项的值为希望的标题栏内容即可
要想全部计算机用户的IE标题栏都改变,就用HKEY_LOCAL_MACHINE
[程序代码]
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;            IE标题栏修改器          >
;            作者:张科                  >
;            2006-7-9                     >
;            QQ:252828740             >
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.486                              
.model flat, stdcall            
option casemap :none               
DlgProc proto :DWORD,:DWORD,:DWORD,:DWORD   
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\masm32.inc
include \masm32\include\advapi32.inc

includelib \masm32\lib\masm32.lib
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\advapi32.lib

.data?
hInstance HINSTANCE ?
swidthdd ?
sheight dd ?
dwidthdd ?      
dheight dd ?
rect    RECT <>
newtitle db ?
.data
RegKeyHandle dd 0
RegKey db "software\microsoft\internet explorer\main",0
KeyName db "Window Title",0
MyDialog db "IDD_MYDIALOG",0
szMutex db "zhangkesietool",0
ErrorText db "Program already run...",0
ErrorTitle db "Warning!!!",0
appname db "IE标题栏修改器",0
description db "输入新的标题,点应用后,重新打开IE就OK.",0
copyright db "作者:张科",13,10,"2006年7月9日",13,10,"Assembly is great.",0
.const
EDITTITLE equ 1000
BTNOK equ 1001
BTNEXIT equ 1002
MAINICON equ 1003
.code

start:
main proc
    invoke GetModuleHandle,NULL
    mov hInstance,eax
    invoke DialogBoxParam,hInstance,addr MyDialog,NULL,addr DlgProc,NULL
    invoke ExitProcess,NULL
main endp

DlgProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
    LOCAL hIcon:HICON
    .IF uMsg==WM_INITDIALOG
      invoke CreateMutex,NULL,FALSE,addr szMutex
      invoke GetLastError
      .IF eax == ERROR_ALREADY_EXISTS
            invoke MessageBox,NULL,addr ErrorText,addr ErrorTitle,MB_ICONWARNING
            invoke ExitProcess,NULL
      .ENDIF
      ;上面几行代码的作用的防止程序多开(即只能运行一个实例)
      invoke GetSystemMetrics,SM_CXSCREEN   ;
      mov swidth,eax                        ;
      invoke GetSystemMetrics,SM_CYSCREEN   ;
      mov sheight,eax                         ;
      invoke GetWindowRect,hWnd,addr rect   ;
      mov eax,rect.right                      ;这几行是为下面invoke SetWindowPos做准备
      sub eax,rect.left                     ;
      mov dwidth,eax                        ;
      sub swidth,eax                        ;使窗体出现在屏幕中心
      mov eax,rect.bottom                     ;
      sub eax,rect.top                        ;
      mov dheight,eax                         ;其中不明白的地方看一下Platform SDK就可以了
      sub sheight,eax                         ;
      shr sheight,1                           ;
      shr swidth,1                            ;
      invoke SetWindowPos,hWnd,HWND_NOTOPMOST,swidth,sheight,dwidth,dheight,SWP_SHOWWINDOW
      invoke SetWindowPos,hWnd,HWND_NOTOPMOST,swidth,sheight,dwidth,dheight,SWP_SHOWWINDOW
      invoke LoadIcon,hInstance,MAINICON
      mov hIcon,eax
      invoke AboutBox,hWnd,hInstance,hIcon,addr appname,addr description,addr copyright
    .ELSEIF uMsg==WM_CLOSE
      invoke ExitProcess,NULL
    .ELSEIF uMsg==WM_COMMAND
      mov eax,wParam
      .IF ax == BTNOK
            invoke GetDlgItemText,hWnd,EDITTITLE,addr newtitle,256
            invoke RegCreateKey,HKEY_CURRENT_USER,addr RegKey,addr RegKeyHandle
            invoke RegSetValueEx,RegKeyHandle,addr KeyName,0,REG_SZ,addr newtitle,50
            invoke RegCloseKey,RegKeyHandle
      .ELSEIF ax == BTNEXIT
            invoke ExitProcess,NULL
      .ENDIF

    .ELSE
      mov eax,FALSE
      ret
    .ENDIF
    mov eax,TRUE
    ret
DlgProc endp

end start

[资源文件]
#include "\masm32\include\resource.h"

#define EDITTITLE                     1000
#define BTNOK                           1001
#define BTNEXIT                         1002
#define MAINICON                        1003
#define IDC_STATIC                      -1
MAINICON ICON "Tools.ico"

IDD_MYDIALOG DIALOGEX 0, 0, 184, 94
STYLE DS_MODALFRAME | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "IE标题栏修改器"
FONT 10, "System"
BEGIN
    EDITTEXT      EDITTITLE,26,35,132,10,ES_AUTOHSCROLL
    LTEXT         "在下面输入新的IE标题:",IDC_STATIC,26,16,86,10,0,
                  WS_EX_STATICEDGE
    PUSHBUTTON      "应用",BTNOK,38,58,47,14,0,WS_EX_STATICEDGE
    PUSHBUTTON      "退出",BTNEXIT,100,58,47,14,0,WS_EX_STATICEDGE
END

提示:资源文件我是用VC做的,设计好界面后保存,然后去掉一些无用的东西就可以了
自认为这个方法比较好,如果哪位朋友有更好的方法,欢迎提出来

附件包含代码,资源文件(也有程序的图标),以及编译好的程序

[ 本帖最后由 zhangke 于 2006-7-9 20:12 编辑 ]

zhangke 发表于 2006-7-9 20:13:09

晕啊,上面四个箭头,我在编辑的时候明明是对齐的
怎么一发布就成这样了呢~~~~~~~!!!

飘云 发表于 2006-7-9 22:23:05

原帖由 zhangke 于 2006-7-9 20:13 发表
晕啊,上面四个箭头,我在编辑的时候明明是对齐的
怎么一发布就成这样了呢~~~~~~~!!!


论坛格式的问题只能问DZ官方了~~

看了一下,代码还可以稍稍优化一下,推荐使用 RadASM,功能非常强大(包括了资源编辑器)

精华之!期待下一篇!
页: [1]
查看完整版本: 用汇编语言打造IE标题栏修改器