用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
相关文章
|
4月前
|
编译器 开发工具 C语言
【C语言】第一回(源(.c)文件怎么生成可执程序(.exe)文件)
【C语言】第一回(源(.c)文件怎么生成可执程序(.exe)文件)
|
Python Windows
Python程序设计实例 | 带图标的exe可执行文件的打包
* 本系列推文案例中,建议Python采用3.10及以上版本,NumPy采用1.22.3及以上版本,Matplotlib采用3.5.1及以上版本,Pandas采用1.4.2及以上版本。Python从3.10这个版本开始,标准发行版本中自带的IDLE交互式环境中输入提示符>>>单独放在左侧,不能随输入语句一起复制。为了清晰区分实例在交互环境中的输入和输出,本系列推文在每个输入语句的开头依然保留输入提示符>>>。
104 0
|
18小时前
|
API Windows
(收集整理)MASM32文件及文件夹操作代码
(收集整理)MASM32文件及文件夹操作代码
|
1月前
|
编译器 C# Windows
C#基础:手动编译一个.cs源代码文件并生成.exe可执行文件
通过上述步骤,应该能够高效准确地编译C#源代码并生成相应的可执行文件。此外,这一过程强调了对命令行编译器的理解,这在调试和自动化编译流程中是非常重要的。
94 2
|
4月前
win11查看文件/文件夹所使用的程序
win11查看文件/文件夹所使用的程序
37 0
|
11月前
|
Windows
[笔记]Windows判断文件是可执行文件exe/dll文件/驱动文件sys
[笔记]Windows判断文件是可执行文件exe/dll文件/驱动文件sys
|
小程序 Linux Python
python文件转为可执行文件(.exe)的详细步骤
python文件转为可执行文件(.exe)的详细步骤
|
编译器 Linux C语言
【gcc/g++】程序的翻译(.c -->.exe)
【gcc/g++】程序的翻译(.c -->.exe)
|
Java
vcredist_x64.exe/vcredist_x86.exe的用处
vcredist_x64.exe/vcredist_x86.exe的用处
185 0
vcredist_x64.exe/vcredist_x86.exe的用处
|
Windows
Win系统 - 文件夹或文件已在另一程序中打开怎么办?
Win系统 - 文件夹或文件已在另一程序中打开怎么办?
535 0
Win系统 - 文件夹或文件已在另一程序中打开怎么办?