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

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

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

.386
.model  flatstdcall
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, : DWORD

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_szPath  db  "Path", 0

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

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

         invoke ExitProcess,NULL

GetRarPath  PROC lpszRarPath: LPSTR,dwBufLen:  DWORD
     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_hRegKey4RAR
     .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, dwBufLen
     invoke RegQueryValueEx, g_hRegKey4RAR,  ADDR g_szPath, NULL, NULL, lpszRarPath,  ADDR dwcbData

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

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

     ret
GetRarPath  ENDP

end start
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

紫郢剑侠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值