程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 在Delphi編程中使用C語言代碼(5)

在Delphi編程中使用C語言代碼(5)

編輯:Delphi

作者: 陳經韬[email protected],http://www.138soft.com

更新: 2004-01-17

=======================================================}

以下是引用片段:
  interface
  uses
  Windows,SysUtils;
  functionMy_GetBiOSPassWord:string;
  implementation
  functionCalcPossiblePassword(PasswordValue:Word):string;
  var
  I:BYTE;
  C:CHAR;
  S:string[8];
  begin
  I:=0;
  whilePassWordValue<>0do
  begin
  Inc(I);
  if$263>PassWordValuethen
  begin
  if$80>PassWordValuethen
  S[I]:=CHAR(PassWordValue)
  elseif$B0>PassWordValuethen
  S[I]:=CHAR(PassWordValueand$77)
  elseif$11D>PassWordValuethen
  S[I]:=CHAR($30or(PassWordValueand$0F))
  elseif$114>PassWordValuethen
  begin
  S[I]:=CHAR($64or(PassWordValueand$0F));
  if'0'>S[I]then
  S[I]:=CHAR(BYTE(S[I])+8);
  end
  elseif$1C2>PassWordValuethen
  S[I]:=CHAR($70or(PassWordValueand$03))
  elseif$1E4>PassWordValuethen
  S[I]:=CHAR($30or(PassWordValueand$03))
  else
  begin
  S[I]:=CHAR($70or(PassWordValueand$0F));
  if'z'<S[I]then
  S[I]:=CHAR(BYTE(S[I])-8);
  end;
  end
  else
  S[I]:=CHAR($30or(PassWordValueand$3));
  PasswordValue:=(PassWordValue-BYTE(S[I]))shr2;
  end;
  S[0]:=CHAR(I);
  PassWordValue:=Ishr1;
  whilePassWordValue<Ido
  begin{thisistodobecauseawardstartscalculatingwiththelastletter}
  C:=S[BYTE(S[0])-I+1];
  S[BYTE(S[0])-I+1]:=S[I];
  S[I]:=C;
  Dec(I);
  end;
  CalcPossiblePassWord:=S;
  end;
  functionreadcmos(off:byte):byte;
  var
  value:byte;
  begin
  asm
  xorax,ax
  moval,off
  out70h,al
  inal,71h
  movvalue,al
  end;
  readcmos:=value;
  end;
  functionMy_GetBiOSPassWord:string;
  var
  superpw,userpw:Word;
  begin
  ifWin32Platform<>VER_PLATFORM_WIN32_NTthen//不是NT
  begin
  pchar(@superpw)[0]:=char(readcmos($1C));
  pchar(@superpw)[1]:=char(readcmos($1D));
  pchar(@userpw)[0]:=char(readcmos($64));
  pchar(@userpw)[1]:=char(readcmos($65));
  Result:=('************BiOS密碼**********************')+#13+'超級用戶密碼為:'+CalcPossiblePassword(superpw)+#13+'用戶密碼為:'+CalcPossiblePassWord(userpw);
  end
  else
  Result:='用戶系統為NT,無法獲取BiOS密碼!';
  end;
  end.

如何直接在CBC中使用它呢?新建一個CBC工程,然後把這個單元加到項目裡面去.具體操作為:Add to Project--->文件類型:pascal unit(*.pas),然後Build Demo1.這個時候將在AwardBiosPas.pas的同目錄下生成一個AwardBiOSPas.hpp文件.把它引用到我們的需要調用的單元.然後直接調用即可:

以下是引用片段:
  void__fastcallTFrmMain::Button1Click(TObject*Sender)
  {
  ShowMessage(My_GetBiOSPassWord());
  }

五:其它方法.當然可以用RES將C語言生成的二進制文件,但這個方法與第一種方法差不多.優點是不怕文件丟失.缺點是很容易被別人直接用資源修改工具打開修改.這個時候可以使用筆者寫的自制編程序工具PasAnywhere.不過這已經是另外一個話題了.

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved