首页 | 社区 | 博客 | 招聘 | 文章 | 新闻 | 下载 | 读书 | 代码
亲,您未登录哦! 登录 | 注册

用MASM32编程获取并显示WinRAR的路径 

打印文章

分享到:
 ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; 文件名: rar_path.asm
; 功 能: 获取并显示WinRAR的路径
; 作 者: Purple Endurer
; 环 境: win 2K pro + masm32 V8

; log
;------------------------------------------------------------------------------------------
; 2006.03.24 创建
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

.386
.model flat, stdcall
option casemap:none
include \masm32\include\windows.inc

include \masm32\include\Advapi32.inc
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc

includelib \masm32\lib\Advapi32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\user32.lib


GetRarPath PROTO :LPSTR

m_m2m MACRO d1, d2
    push d2
    pop d1
ENDM


.data
g_szTitle       db "WinRAR路径", 0
g_szRegPath db  "SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\WinRAR.exe", 0
g_szFailRegOpenKeyEx  db "RegOpenKeyEx失败!", 0
g_szFailRegQueryValueEx db "RegQueryValueEx失败!", 0
g_szValueName db "Path", 0

.data?
g_szRarPath  db 256 dup(?)
g_hRegKey4IE   HKEY    ?

.code
start:
        invoke GetRarPath, ADDR g_szRarPath
        .if eax==1
            mov eax, OFFSET g_szFailRegOpenKeyEx
        .elseif eax==2
            mov eax, OFFSET g_szFailRegQueryValueEx
        .else
            mov eax, OFFSET g_szRarPath
        .endif
        invoke MessageBox, NULL, eax, OFFSET g_szTitle, MB_OK

        invoke ExitProcess,NULL

GetRarPath PROC lpszRarPath: LPSTR
    LOCAL dwcbData: dword
;         LONG RegOpenKey(
;             HKEY hKey,    // handle of open key
;             LPCTSTR lpSubKey,    // address of name of subkey to open
;             PHKEY phkResult     // address of handle of open key
;         );

    invoke  RegOpenKey, HKEY_LOCAL_MACHINE, ADDR g_szRegPath, ADDR g_hRegKey4IE
    .if eax!=ERROR_SUCCESS
        m_m2m eax, 1
        ret
    .endif

;     LONG RegQueryValueEx(
;         HKEY hKey,          // 1.handle of key to query
;         LPTSTR lpValueName, // 2.address of name of value to query
;         LPDWORD lpReserved, // 3.reserved
;         LPDWORD lpType,     // 4.address of buffer for value type
;         LPBYTE lpData,      // 5.address of data buffer
;         LPDWORD lpcbData    // 6.address of data buffer size
;     );

    m_m2m dwcbData, SIZEOF g_szRarPath
    invoke RegQueryValueEx, g_hRegKey4IE, ADDR g_szValueName, NULL, NULL, ADDR g_szRarPath, ADDR dwcbData

    .if eax!=ERROR_SUCCESS
        m_m2m eax, 2
    .else
        xor eax, eax
    .endif

; LONG RegCloseKey(
;     HKEY hKey     // handle of key to close  
; );
    invoke RegCloseKey, g_hRegKey4IE

    ret
GetRarPath ENDP

end start  

本栏文章均来自于互联网,版权归原作者和各发布网站所有,本站收集这些文章仅供学习参考之用。任何人都不能将这些文章用于商业或者其他目的。( Pfan.cn )

编程爱好者论坛

本栏最新文章