posted @ 2006-09-20 22:27 小螞蟻 閱讀(210) | 評論 (1) | 編輯 收藏
Info Power 是個很棒的VCL,特別是RecordViewDlg控件很有特點,在添加和編輯數據時很有用,但在打開EnterToTab參數時不能跳到確認鍵上,必須用鼠標操作。還好有它的源碼,稍微修改一下就可以了:
//--------------------
//? wwrcdvw.pas
//--------------------
......
????? RecordPanel:= TPanel.create(RecordViewForm);
????? with RecordPanel do begin
???????? parent:= RecordViewForm;
???????? Left := 0;
???????? Top := 41;
???????? Align := alClient;
???????? BevelInner := bvLowered;
???????? BorderWidth := 4;
???????? Caption := '';
???????? TabOrder := 0;?? //I hack
???????? Name:= 'RecordPanel';
???????? visible:= True;
????? end;
????? if (rvokShowOKCancel in OKCancelOptions) then begin
???????? ButtonPanel:= TPanel.create(RecordViewForm);
???????? with ButtonPanel do begin
??????????? parent:= RecordViewForm;
??????????? Left := 0;
??????????? Top := 0;
??????????? Align := alBottom;
??????????? Name:= 'UserPanel';
??????????? Caption := '';
??????????? TabOrder := 1;? //I?hack
??????????? visible:= True;
??????????? OkBtn:= TButton(wwCreateCommonButton(RecordViewForm, bkOK));
??????????? OKBtn.Default:= not (rvoEnterToTab in Options);
??????????? OkBtn.parent:= ButtonPanel;
??????????? OKBtn.visible:= True;
??????????? OKBtn.OnClick := OKBtnClick;
??????????? OKBtn.TabStop:= True;? //I hack
??????????? CancelBtn:= TButton(wwCreateCommonButton(RecordViewForm, bkCancel));
??????????? CancelBtn.Parent := ButtonPanel;
??????????? CancelBtn.visible:= True;
??????????? CancelBtn.OnClick := CancelBtnClick;
??????????? CancelBtn.TabStop:= True; //I hack
??????????? CancelBtn.Cancel:= False; { Allows Escape to be processed }
??????????? bottomPad := 1 + GetSystemMetrics(SM_CYDLGFRAME)*2 +8 +1;? {Win95 fix }
??????????? Height := OkBtn.Top + OkBtn.height + BottomPad;
??????????? OkBtn.Top := GetSystemMetrics(SM_CYDLGFRAME) + 5;
??????????? CancelBtn.Top := GetSystemMetrics(SM_CYDLGFRAME) +5;
???????? end;
????? end;
......
posted @ 2006-09-20 10:46 小螞蟻 閱讀(175) | 評論 (0) | 編輯 收藏
posted @ 2006-09-10 12:22 小螞蟻 閱讀(770) | 評論 (0) | 編輯 收藏
posted @ 2006-08-28 12:10 小螞蟻 閱讀(187) | 評論 (0) | 編輯 收藏
posted @ 2006-08-28 01:33 小螞蟻 閱讀(561) | 評論 (2) | 編輯 收藏
以前一直在win32匯編里打滾,對于修改一個exe文件是件很容易的事情,但到了java下發現想修改一個
沒源碼的.class文件還真是個問題,上網看了一大堆資料,有ASM和Javassist可以做這事情,ASM看上去
很專業,但看了文檔好象要在op code的級別下寫代碼,頭暈。Javassist簡單些,看完幾個sample心里基本
有數了,隨手找來一個有日期限制的Taglib,關鍵的代碼猜都不用猜在License.class里,反編譯后:
??
public static LicDate d()
{??
? String s = Dec("^%$&^%&*%&");
? return new LicDate.newInstance(Dec("%&&(*(&$%%"), s);
}
s里放著用Dec解碼的日期,自己寫個小程序:
import javassist.*;
public class Crack {
?public static void main(String args[])
?{
??try
??{
??? ClassPool pool = ClassPool.getDefault();
??? pool.insertClassPath("./taglib");
??? CtClass License = pool.get("License");
???
??? CtMethod a = License.getDeclaredMethod("d");
??? a.insertBefore("{return LicDate.newInstance(\"MM-dd-yyyy HH:mm:ss\",\"21-30-2088 01:01:01\");}"
??? License.writeFile();
??}
??catch (Exception e)
??{
???e.printStackTrace();
??}
?}
}
反編譯新的License.class發現文件改好了。
posted @ 2006-08-13 16:22 小螞蟻 閱讀(292) | 評論 (0) | 編輯 收藏