舉例實現對Win9x登錄檔內的鍵值實現開啟、建立、設定、讀取...
;首先感謝AoGo論壇上的AoGo、Fox、aboil三位兄弟的幫助,在此一併謝過。
;本例實現對Win9x登錄檔內的鍵值實現開啟、建立、設定、讀取、刪除操作
;透過對"HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionAppletsHearts"的設定實現
;傷心小棧中按 Ctrl+Alt+Shift+F12 顯示所有人的牌
;透過對"HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionPoliciesExplorer"的設定
;實現隱藏"開始選單"內的"收藏夾、文件、登出"選項
.386
.model flat, stdcall
option casemap :none
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
include Advapi32.inc
includelib Advapi32.lib
DLG_MAIN equ 1
IDC_Favorites equ 1001
IDC_Recent equ 1002
IDC_LogOff equ 1003
IDC_Hearts equ 1004
ICO_MAIN equ 1000h
.data?
hInstance dd ?
LpValue dd ?
LpType dd ?
DecValue dd ?
.const
SzHearts db 'SoftwareMicrosoftWindowsCurrentVersionAppletsHearts',0
SzFavoritesMenu db 'SoftwareMicrosoftWindowsCurrentVersionPoliciesExplorer',0
SzZbName db 'zb',0
SzFavoritesMenuName db 'NoFavoritesMenu',0
SzNoRecentDocsMenu db 'NoRecentDocsMenu',0
SzNoLogOff db 'NoLogOff',0
SzHeartsValue db '42',0
SzFavoritesMenuValue db '01',0
SzNoRecentDocsValue db '01',0
SzNoLogOffValue db '01',0
SzRegSz db 'REG_SZ',0
SzRegDword db 'REG_DWORD',0
.code
_ProcDlgMain proc uses ebx edi esi hWnd,wMsg,wParam,lParam
local @hKey,@SzValue[256]:byte
mov eax,wMsg
.if eax == WM_CLOSE
invoke EndDialog,hWnd,NULL
.elseif eax == WM_INITDIALOG
invoke LoadIcon,hInstance,ICO_MAIN
invoke SendMessage,hWnd,WM_SETICON,ICON_BIG,eax
invoke RegOpenKeyEx,HKEY_CURRENT_USER,addr SzHearts,NULL,KEY_QUERY_VALUE,addr @hKey
.if eax == ERROR_SUCCESS
mov LpValue,4
invoke RegQueryValueEx,@hKey,addr SzZbName,NULL,addr SzRegSz,addr @SzValue,addr LpValue
.if eax == ERROR_SUCCESS
invoke lstrcmp,addr @SzValue,addr SzHeartsValue
.if eax == ERROR_SUCCESS
invoke CheckDlgButton,hWnd,IDC_Hearts,BST_CHECKED
.endif
.endif
.endif
invoke RegOpenKeyEx,HKEY_CURRENT_USER,addr SzFavoritesMenu,NULL,KEY_QUERY_VALUE,addr @hKey
.if eax == ERROR_SUCCESS
mov LpValue,4
invoke RegQueryValueEx,@hKey,addr SzFavoritesMenuName,NULL,addr LpType,addr DecValue,addr LpValue
.if eax == ERROR_SUCCESS
invoke lstrcmp,addr DecValue,addr SzFavoritesMenuValue
.if eax == ERROR_SUCCESS
invoke CheckDlgButton,hWnd,IDC_Favorites,BST_CHECKED
.endif
.endif
.endif
invoke RegOpenKeyEx,HKEY_CURRENT_USER,addr SzFavoritesMenu,NULL,KEY_QUERY_VALUE,addr @hKey
.if eax == ERROR_SUCCESS
mov LpValue,4
invoke RegQueryValueEx,@hKey,addr SzNoRecentDocsMenu,NULL,addr LpType,addr DecValue,addr LpValue
.if eax == ERROR_SUCCESS
invoke lstrcmp,addr DecValue,addr SzNoRecentDocsValue
.if eax == ERROR_SUCCESS
invoke CheckDlgButton,hWnd,IDC_Recent,BST_CHECKED
.endif
.endif
.endif
invoke RegOpenKeyEx,HKEY_CURRENT_USER,addr SzFavoritesMenu,NULL,KEY_QUERY_VALUE,addr @hKey
.if eax == ERROR_SUCCESS
mov LpValue,4
invoke RegQueryValueEx,@hKey,addr SzNoLogOff,NULL,addr LpType,addr DecValue,addr LpValue
.if eax == ERROR_SUCCESS
invoke lstrcmp,addr DecValue,addr SzNoLogOffValue
.if eax == ERROR_SUCCESS
invoke CheckDlgButton,hWnd,IDC_LogOff,BST_CHECKED
.endif
.endif
.endif
.elseif eax == WM_COMMAND
mov eax,wParam
.if ax == IDCANCEL
invoke EndDialog,hWnd,NULL
.elseif ax == IDOK
invoke IsDlgButtonChecked,hWnd,IDC_Hearts
.if eax == BST_CHECKED
invoke RegCreateKey,HKEY_CURRENT_USER,addr SzHearts,addr @hKey
.if eax == ERROR_SUCCESS
invoke lstrlen,addr SzHeartsValue
inc eax
invoke RegSetValueEx,@hKey,addr SzZbName,NULL,
REG_SZ, addr SzHeartsValue,eax
invoke RegCloseKey,@hKey
.endif
.else
invoke RegOpenKeyEx,HKEY_CURRENT_USER,addr SzHearts,NULL,KEY_WRITE,addr @hKey
.if eax == ERROR_SUCCESS
invoke RegDeleteValue,@hKey,addr SzZbName
invoke RegCloseKey,@hKey
.endif
.endif
invoke IsDlgButtonChecked,hWnd,IDC_Favorites
.if eax == BST_CHECKED
invoke RegCreateKey,HKEY_CURRENT_USER,addr SzFavoritesMenu,addr @hKey
.if eax== ERROR_SUCCESS
invoke RegSetValueEx,@hKey,addr SzFavoritesMenuName,NULL,
REG_DWORD, addr SzFavoritesMenuValue,4
invoke RegCloseKey,@hKey
.endif
.else
invoke RegOpenKeyEx,HKEY_CURRENT_USER,addr SzFavoritesMenu,NULL,KEY_WRITE,addr @hKey
.if eax == ERROR_SUCCESS
invoke RegDeleteValue,@hKey,addr SzFavoritesMenuName
invoke RegCloseKey,@hKey
.endif
.endif
invoke IsDlgButtonChecked,hWnd,IDC_Recent
.if eax == BST_CHECKED
invoke RegCreateKey,HKEY_CURRENT_USER,addr SzFavoritesMenu,addr @hKey
.if eax== ERROR_SUCCESS
invoke RegSetValueEx,@hKey,addr SzNoRecentDocsMenu,NULL,
REG_DWORD, addr SzNoRecentDocsValue,4
invoke RegCloseKey,@hKey
.endif
.else
invoke RegOpenKeyEx,HKEY_CURRENT_USER,addr SzFavoritesMenu,NULL,KEY_WRITE,addr @hKey
.if eax == ERROR_SUCCESS
invoke RegDeleteValue,@hKey,addr SzNoRecentDocsMenu
invoke RegCloseKey,@hKey
.endif
.endif
invoke IsDlgButtonChecked,hWnd,IDC_LogOff
.if eax == BST_CHECKED
invoke RegCreateKey,HKEY_CURRENT_USER,addr SzFavoritesMenu,addr @hKey
.if eax== ERROR_SUCCESS
invoke RegSetValueEx,@hKey,addr SzNoLogOff,NULL,
REG_DWORD, addr SzNoLogOffValue,4
invoke RegCloseKey,@hKey
.endif
.else
invoke RegOpenKeyEx,HKEY_CURRENT_USER,addr SzFavoritesMenu,NULL,KEY_WRITE,addr @hKey
.if eax == ERROR_SUCCESS
invoke RegDeleteValue,@hKey,addr SzNoLogOff
invoke RegCloseKey,@hKey
.endif
.endif
.endif
.else
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret
_ProcDlgMain endp
start:
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke DialogBoxParam,hInstance,DLG_MAIN,NULL,offset _ProcDlgMain,NULL
invoke ExitProcess,NULL
end start
資原始檔:
#include <resource.h>
#define DLG_MAIN 1
#define IDC_Favorites 1001
#define IDC_Recent 1002
#define IDC_LogOff 1003
#define IDC_Hearts 1004
#define ICO_MAIN 0x1000
ICO_MAIN ICON "Main.ico"
DLG_MAIN DIALOGEX 0, 0, 170, 100
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "登錄檔最佳化 For Windows9X"
FONT 9, "宋體"
{
DEFPUSHBUTTON "設定",IDOK,114,48,39,14,0,WS_EX_STATICEDGE
PUSHBUTTON "退出",IDCANCEL,114,66,39,14,0,WS_EX_STATICEDGE
GROUPBOX "開始選單不顯示的專案",IDC_STATIC,7,7,100,73
CHECKBOX "收藏夾",IDC_Favorites,16,20,78,10,BS_AUTOCHECKBOX | WS_TABSTOP
CHECKBOX "文件",IDC_Recent,16,34,78,10,BS_AUTOCHECKBOX | WS_TABSTOP
CHECKBOX "登出",IDC_LogOff,16,48,78,10,BS_AUTOCHECKBOX | WS_TABSTOP
CHECKBOX "傷心小棧中看所有人的牌",IDC_Hearts,16,80,78,10,BS_AUTOCHECKBOX | WS_TABSTOP
}
;本程式在Win98Se+Masm32V8 下編譯透過
; 呱嘰呱嘰/lovemelovemydogs[BCG][YCG]
; 2003.10.10
相關文章
- 單例模式 – 單例登錄檔與 Spring 實現單例剖析2019-03-02單例模式Spring
- PowerShell 命令來操作 Windows 登錄檔 Get-ItemProperty 命令可以獲取指定登錄檔路徑下的鍵值資訊 ;Set-ItemProperty 命令可以設定指定登錄檔路徑下的鍵值資訊;New-Item 命令可以建立新的登錄檔項2024-07-21Windows
- win10用快捷鍵登錄檔怎麼開啟_win10開啟登錄檔快捷鍵方法2020-07-23Win10
- 透過 adc 實現一個IO對多個按鍵讀取2024-05-22
- 聊聊如何實現一個支援鍵值對的SPI2021-10-19
- Spark UDAF實現舉例 -- average pooling2020-12-31Spark
- @PropertySource 註解實現讀取 yml 檔案2019-01-27
- Android讀取XML實現軟體自動登陸2018-05-20AndroidXML
- Java 利用列舉實現單例模式2018-09-30Java單例模式
- 125 列舉實現PHP擷取中文不亂碼的實現方法2018-09-04PHP
- python中xlrd庫如何實現檔案讀取?2021-09-11Python
- win10 修改登錄檔開機啟動方法 win10怎麼修改登錄檔設定啟動項2020-10-23Win10
- PING命令 獲取的TTL值 登錄檔位置2024-03-14
- 舉例說明js如何實現繼承?2024-11-24JS繼承
- 單例模式實現對比2018-05-22單例模式
- Question | 一鍵登入是如何實現的?2020-04-18
- __weak如何實現物件值自動設定為nil的2018-04-08物件
- c++11 實現列舉值到列舉名的轉換2022-03-11C++
- 設定 Windows Media Player 推薦設定的登錄檔檔案2024-04-13Windows
- JWT實現登入認證例項2021-02-14JWT
- 2-80. 建立 NPCFunction 和通用 UI 實現對話後開啟商店2024-04-15FunctionUI
- java設定熱鍵(C++實現dll匯入)2018-10-27JavaC++
- python根據字典內的值實現排序2020-11-01Python排序
- ios端app讀取iphone檔案(通過itunes實現)2018-03-06iOSAPPiPhone
- .NET使用P/Invoke來實現登錄檔的增、刪、改、查功能2024-05-14
- C#不提升自己程式的許可權實現操作登錄檔2022-12-07C#
- win10登錄檔怎麼開啟 開啟登錄檔編輯器的方法一覽2021-03-05Win10
- 如何實現檔案共享,檔案共享的設定方法-鐳速2023-05-12
- python 爬蟲 實現增量去重和定時爬取例項2020-03-06Python爬蟲
- 應用設定Setting的實現2020-04-07
- 舉例說明如何實現瀏覽器桌面通知?2024-11-28瀏覽器
- 精讀《JS 陣列的內部實現》2022-05-09JS陣列
- OS實驗八:採用快取記憶體實現檔案讀寫2020-09-25快取記憶體
- 讀取resources中properties檔案內容範例2020-04-04
- 執行緒池的實現原始碼及應用舉例2024-06-02執行緒原始碼
- 如何基於文件的內容實現 AI 對話功能,以 Documate 為例2024-02-26AI
- 直播平臺搭建,實現自定義設定登入頁面2023-11-17
- 根據登錄檔鍵值判斷本機EXCEL版本2019-05-11Excel
- 實現一鍵式自動化操作(快速建立 Python 與 Shell 檔案)2019-01-26Python