如何將按鈕變為灰色(應網友要求修改稿)
作者:囚童
工具:TRW2000
ULTRAEDIT
1、執行TRW2000,將其最小化。
2、執行應用程式,調出要修改的按鈕所在視窗。
如圖:
此例中要改註冊按鈕為灰色,注意:註冊兩字後面的(R)。
3、按CTRL+N調出TRW2000。
4、下PMODULE指令,返回WINDOWS視窗。
5、點要修改的按鈕,被TRW2000攔截,游標停留在應用程式域。
6、在游標所在行上面的那個CALL上下斷。
7、重新執行應用程式,再次調出要修改的按鈕所在視窗,被所下斷點攔截。
8、清中斷並下指令:
S DS:400000
L100000 28 26 52 29 (回車)
或
S DS:400000 L100000 '(&R)' (回車)
其中:40000是應用程式的基地址,100000是程式裝入記憶體的總長度(可根據實際情況靈
活掌握),搜尋碼28 26 52
29是(&R)的ASCII碼。之所以用(&R),而不用“註冊”搜尋,
是因為(R)較容易觀察到,不用翻譯中文機器碼。
回車後TRW2000返回下面的資訊:
409BA5 IN XXXXXX!.RSRC+EBA5
說明TRW2000找到該按鈕選單的相關資訊在.RSRC段的+EBA5,
此時資料視窗也顯示409BA5開始的資料。
9、按ALT+↑,使資料的記憶體映象從409B95開始顯示
490B80 65 6C 70 43 6C 69 63 6B-00 00 09 54 4D 65 6E 75 elpClick...TMenu
490B90 49 74 65 6D 02 52 31 07-43 61 70 74 69 6F 6E 06 Item.R1.Caption.
490BA0 08 D7 A2 B2 E1 28 26 52-29 0A 49 6D 61 67 65 49 .註冊(&R).ImageI
490BB0 6E 64 65 78 02 02 07 4F-6E 43 6C 69 63 6B 07 0B ndex...OnClick..
490BC0 62 74 6E 52 65 67 43 6C-69 63 6B 00 00 09 54 4D btnRegClick...TM
可以看出,將07 OnClick 07 0B btnRegClick改為07 Enabled 08,並補足其餘的空間,
即可使註冊按鈕變為灰色,且被禁止啟用。
10、用以下資料製作LOADER,或用ULTRAEDIT作如下修改:
409BA9:
0A
49 6D 61 67 65 49 6E 64 65 78 02 02 07 4F 6E 43 6C 69 63 6B 07 0B 62 74 6E 52
65 67 43 6C 69 63 6B
20 20 20 20 20 20 20 20 20 20 20 20 0A 49 6D 61 67
65 49 6E 64 65 78 02 02 07,45 6E 61 62 6C 65 64 08
其中:12個空格是因為OnClick
07 0B btnRegClick去掉後,Enabled 08比它少12個字
符,因此用空格補足。空格只能補在可顯示的字串後面,其他引數項的位置向後順延。
11、用以下資料製作LOADER,或用ULTRAEDIT作如下修改:
409BA0:
08
14
串長度增加0Ch。
12、存檔,重新執行應用程式,註冊按鈕變為灰色,且被禁止啟用。
改後記憶體映象:
490B80 65 6C 70 43 6C 69 63 6B-00 00 09 54 4D 65 6E 75 elpClick...TMenu
490B90 49 74 65 6D 02 52 31 07-43 61 70 74 69 6F 6E 06 Item.R1.Caption.
490BA0 14 D7 A2 B2 E1 28 26 52-29 20 20 20 20 20 20 20 .註冊(&R)
490BB0 20 20 20 20 20 0A 49 6D-61 67 65 49 6E 64 65 78
.ImageIndex
490BC0 02 02 07 45 6E 61 62 6C-65 64 08 00 00
09 54 4D ...Enabled....TM
改前後圖象對比:
說明:
①、該按鈕選單項的資源可以用下面的方式來表達:
object R1: TMenuItem
;選單項
Caption = '註冊(&R)'
;可顯示的字串
ImageIndex = 2
;圖示
OnClick = btnRegClick
;鍵響應
end
它在記憶體中有一個固定的長度,
其中ImageIndex、OnClick等引數所佔用的記憶體空間是可用空間。
修改後:
object R1: TMenuItem
Caption = '註冊(&R)
'
ImageIndex = 2
Enabled =
False
end
②、修改記憶體後,原有空間內的所有內容都必須是合法的資源表達,否則WINDOWS會認為資源
找不到而報錯。無法表達的空間可以填寫合法而無意義的引數或用空格來填充。空格只能
補在可顯示的字串後面。
③、記憶體中字串前面的一位元組十六進位制數,指示字串的長度,若字串長度被修改,該數值也應
做相應的修改。
④、上面的示例若改為使用ImageIndex引數所佔用的記憶體空間,修改的位元組數會大大減少,
適合製作LOADER,但圖示將消失。