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

简介: 用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, :
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 
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,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 
eax, 
eax

    
.endif


 
; LONG RegCloseKey(

 
;     HKEY hKey     // handle of key to close  

 
; );

    
invoke RegCloseKey, g_hRegKey4RAR


    
ret

GetRarPath 
ENDP


end
相关文章
|
8月前
|
编译器 开发工具 C语言
【C语言】第一回(源(.c)文件怎么生成可执程序(.exe)文件)
【C语言】第一回(源(.c)文件怎么生成可执程序(.exe)文件)
137 0
|
IDE 编译器 Linux
linux 编译 c或cpp 文件为动态库 so 文件(最简单直观的模板)
linux 编译 c或cpp 文件为动态库 so 文件(最简单直观的模板)
|
Python Windows
Python程序设计实例 | 带图标的exe可执行文件的打包
* 本系列推文案例中,建议Python采用3.10及以上版本,NumPy采用1.22.3及以上版本,Matplotlib采用3.5.1及以上版本,Pandas采用1.4.2及以上版本。Python从3.10这个版本开始,标准发行版本中自带的IDLE交互式环境中输入提示符>>>单独放在左侧,不能随输入语句一起复制。为了清晰区分实例在交互环境中的输入和输出,本系列推文在每个输入语句的开头依然保留输入提示符>>>。
120 0
|
4月前
|
API Windows
(收集整理)MASM32文件及文件夹操作代码
(收集整理)MASM32文件及文件夹操作代码
[06-03] 用MASM32写的文件目录监视程序FileDirMon
[06-03] 用MASM32写的文件目录监视程序FileDirMon
|
5月前
|
编译器 C# Windows
C#基础:手动编译一个.cs源代码文件并生成.exe可执行文件
通过上述步骤,应该能够高效准确地编译C#源代码并生成相应的可执行文件。此外,这一过程强调了对命令行编译器的理解,这在调试和自动化编译流程中是非常重要的。
436 2
|
8月前
win11查看文件/文件夹所使用的程序
win11查看文件/文件夹所使用的程序
73 0
|
Windows
[笔记]Windows判断文件是可执行文件exe/dll文件/驱动文件sys
[笔记]Windows判断文件是可执行文件exe/dll文件/驱动文件sys
|
存储 自然语言处理 IDE
【C进阶】——我们写的代码是如何一步步变成可执行程序(.EXE)的?
【C进阶】——我们写的代码是如何一步步变成可执行程序(.EXE)的?
648 0
|
编译器 Linux C语言
【gcc/g++】程序的翻译(.c -->.exe)
【gcc/g++】程序的翻译(.c -->.exe)
106 0

热门文章

最新文章