舉例實現對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
相關文章
- 實現鍵值對儲存(0):目錄2014-08-26
- node.js實現的逐行讀取檔案內容的程式碼例項2017-03-26Node.js
- 實現鍵值對儲存(四):API設計2014-12-12API
- 單例模式 – 單例登錄檔與 Spring 實現單例剖析2019-03-02單例模式Spring
- 單例模式 - 單例登錄檔與 Spring 實現單例剖析2017-06-14單例模式Spring
- 實現鍵值對儲存(五):雜湊表實現2014-12-12
- c++介面定義及實現舉例2013-06-30C++
- 實現鍵值對儲存(二):以現有鍵值對儲存為模型2014-09-29模型
- Winform設定開機啟動-操作登錄檔2013-11-27ORM
- 實現鍵值對儲存(一):什麼是鍵值對儲存,為什麼要實現它2014-08-26
- C# Winform打包部署時新增登錄檔資訊實現開機啟動2009-10-28C#ORM
- jquery實現的讀取並解析xml檔案程式碼例項2017-04-01jQueryXML
- win10用快捷鍵登錄檔怎麼開啟_win10開啟登錄檔快捷鍵方法2020-07-23Win10
- 聊聊如何實現一個支援鍵值對的SPI2021-10-19
- OracleServiceSID 服務啟動例項隨之啟動的登錄檔鍵值: ORA_SID_AUTOSTART2008-02-29Oracle
- javaseverlet實現的http標頭檔案的讀取2016-12-01JavaHTTP
- @PropertySource 註解實現讀取 yml 檔案2019-01-27
- java程式碼實現對excel加密、解密(設定或去除開啟密碼)2015-03-13JavaExcel加密解密密碼
- Java讀取大檔案的高效率實現2015-01-23Java
- Java 利用列舉實現單例模式2018-09-30Java單例模式
- 透過列舉enum實現單例2016-12-30單例
- jquery實現獲取outerHTML內容程式碼例項2017-04-01jQueryHTML
- win10 修改登錄檔開機啟動方法 win10怎麼修改登錄檔設定啟動項2020-10-23Win10
- Android讀取XML實現軟體自動登陸2018-05-20AndroidXML
- 2018-02-27:使用 PHP 實現目錄檔案讀取2018-02-27PHP
- 125 列舉實現PHP擷取中文不亂碼的實現方法2018-09-04PHP
- 兩級快取實現分析之快取設定2018-01-05快取
- c++11 實現列舉值到列舉名的轉換2022-03-11C++
- Question | 一鍵登入是如何實現的?2020-04-18
- 如何使用angularjs實現文字框設定值2016-01-30AngularJS
- javascript實現的設定和獲取元素屬性2017-03-31JavaScript
- PING命令 獲取的TTL值 登錄檔位置2024-03-14
- __weak如何實現物件值自動設定為nil的2018-04-08物件
- jQuery實現設定字型大小程式碼例項2017-03-09jQuery
- python中xlrd庫如何實現檔案讀取?2021-09-11Python
- 單例模式實現對比2018-05-22單例模式
- 列舉GCRoots的實現2016-11-11GC
- JWT實現登入認證例項2021-02-14JWT