如何將按鈕變為灰色(應網友要求修改稿) (3千字)

看雪資料發表於2002-08-07

如何將按鈕變為灰色(應網友要求修改稿)

作者:囚童
工具:TRW2000
   ULTRAEDIT

1、執行TRW2000,將其最小化。

2、執行應用程式,調出要修改的按鈕所在視窗。
  如圖:
  如何將按鈕變為灰色(應網友要求修改稿) (3千字)
  此例中要改註冊按鈕為灰色,注意:註冊兩字後面的(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

改前後圖象對比:
  如何將按鈕變為灰色(應網友要求修改稿) (3千字)


說明:

①、該按鈕選單項的資源可以用下面的方式來表達:

  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,但圖示將消失。

相關文章