TRegIniFile is a low-level wrapper for the Windows 95/NT system registry.
윈도95/NT시스템레지스트리에 대하여 낮은 레벨을 감싼다(?)
Regist:TRegistry; <---- 에러
TRegistry is a low-level wrapper for the system registry and functions that operate on the registry
시스템레지스트리와 레지스트리에 접하여 움직이는 함수에 대하여 낮은 레벨을 감싼다
Ini :TIniFile; <---- 에러
TIniFile is a low-level wrapper for the 16-bit Windows 3.x INI file system that enables storage and retrieval of application-specific information and settings in an application-specific INI file.
ini파일이 있는 어플리케이션과 정보를 갖고있는 어플리케이션에 대하여 저장과 복구할 수 있는 16-bit Windows 3.x INI file system에 대하여 낮은 레벨을 감싼다
위의 도움말을 해석한게 맞는지 모르겠네요.. 웨퍼.. 쩝.. 감싸? 뭘 감싸냠..ㅠ.ㅠ
위의 세줄이 에러가 나서.. 에러가 왕창 나거든요..
지금 윈98을 쓰는데..그래서 안되는 것일까요? 아니면... 무엇일까요..
음.. 소스 해석도 못 했는데... 질문부터 올리려니까.. 죄송스럽습니다...ㅠ.ㅠ
도망가지 마시고 .... 도움말 좀 주세요.......
> Const ShareWare = False; // 데모버전(True) 정품(False) 구분
> 제목 그대로입니다...
>
> 인스톨해서 한달동안만 쓸 수있게끔 하고 싶은데요...
>
> 어떻게 해야 하나요?
>
> 또는 날짜를 정해 놓고서 그날짜까지만 사용이 가능하게 하려면 어떻게 해야 합니까?
>
> 인스톨쉴드에서 해야 하나요? 아니면 프로그램상에서 해줘야 하나요?
>
> 변경이 불가하게(?) 레지스트리의 파일날짜를 비교해서 하는 방법은 없나요?
>
> 가능하다면 약간의 힌트를 부탁합니다.....
안녕하세요~
제가 일하는곳에 있는 개발프로그램중에 한 부분입니다..
소스가 좀 엉망인데요 (민망~)
대충 설명하면
맨처음 그 프로그램이 실행될때 레지스트리값이 존재하는지 판단하고
없으면 첨 실행된 시스템날짜를 Encode시켜서 레지스트리에 보관하고
담에 다시 실행할때면 실행되는 날짜와 레지스트리에 기록된 날짜와 비교해서
한달이 넘으면 사용을 막아버립니다..
근데 중요한건 한번 한달이 넘어버리면 날짜를 1900-01-01로 기록해버려서
사용자가 임으로 날짜를 조작해서 사용하지못한다는거죠..
(이거 꽁수인것같음^^)
밑에 소스보시면
Section 부분이 있는데요 이 섹션이름을 사용자가 눈치못채게
어려운 이름이 바꾸시면 좋겠죠?
예를들어 'Usb Controller Setting' 등의 이름..
아래에선 폼show에다 걸었는데 원하시는 곳에 루틴을 활용하시기바랍니다..
그리고 소스 맨위에 상수로 값만 변경하면 데모 및 정품을 쉽게 변경가능할겁니다..
사실 전 이런거(날짜막아버리는거..) 젤 싫어하는데
회사에 있다보니 어쩔수없는 현실이군여..쩝..
그냥 이렇게도 쓸수있다는걸로 참고하세요
에러난다면 도망가야쥐..^^
좋은하루되세요~
Const ShareWare = False; // 데모버전(True) 정품(False) 구분
implementation
..
..
procedure TISPASSF.FormShow(Sender: TObject);
begin
if ShareWare then ProgramRegist(Sender);
end;
procedure TISPASSF.ProgramRegist(Sender: TObject);
var FIniFile:TRegIniFile;
Regist:TRegistry;
Section,Key,sPName:string;
a,b:Dword;
sRSV:TStrings;
H, C, D: String;
Ini :TIniFile;
BsMoneyCount, InputString: String;
function EncodeLock(H:String) : String;
var Str : String;
i,j : integer;
begin
j := Length(H);
Str := H;
for i :=1 to Length(H) do begin
Str[i] := chr(ord(Str[i]) + ord(Str[j]));
Dec(j);
end;
Result := Str;
end;
function DecodeLock(H:String) : String;
var Str : String;
i,j : integer;
begin
j := Length(H);
Str := H;
for i :=1 to Length(H) do begin
Str[j] := chr(ord(Str[j]) - ord(Str[i]));
Dec(j);
end;
Result := Str;
end;
begin
//Registry 읽고 쓰기
sRSV := TStringList.Create;
Key := '';
sRSV.Clear;
Regist := TRegistry.Create;
Regist.RootKey := HKEY_CURRENT_USER;
FiniFile := TRegIniFile.Create('SOFTWARE'); // License
Section := 'License'; // <= 이부분에 류응철님이 원하시는 레지스트리이름을 적으세요~
FiniFile.ReadSectionValues(Section,sRSV);
if (sRSV.Count = 0) then // 없으면 프로그램 시작일을 Registry에 저장한다.
begin
H := EncodeLock(FormatDateTime('YYYY-MM-DD',Date));
FiniFile.WriteString(Section,Section,H);
Application.MessageBox('"모모모" 프로그램으로 오신것을 환영합니다.'+#13#13 +
'이 프로그램은 연습용으로써 '+ #13#13 +
'최초 실행일부터 한달(30일)간 사용할 수 있습니다.', MB_OK);
Key := FiniFile.FileName;
sRSV.Free;
FiniFile.Free;
Regist.Free;
end else
begin
a := Pos('=',sRSV[0]); b := Length(sRSV[0]);
H := DecodeLock(Copy(sRSV[0],a+1,b-a));
if (StrToDate(H) < Date - 30) or (StrToDate(H) > Date + 30) then
begin
if H <> '1900-01-01' then
begin
H := EncodeLock('1900-01-01');
FiniFile.WriteString(Section,Section,H);
end;
Application.MessageBox('"모모모" 프로그램 사용기간이 만료되었습니다.'+#13#13 +
'정품을 구입하시면 제한없이 사용할 수 있으며 ' +#13#13 +
'많은 해택을 드립니다.' ,'확인', MB_OK);
sRSV.Free;
FiniFile.Free;
Regist.Free;
Application.Terminate;
end else
begin
Application.MessageBox('"모모모" 프로그램으로 오신것을 환영합니다.'+#13#13 +
'정품을 구입하시면 제한없이 사용할 수 있으며 ' +#13#13 +
'많은 해택을 드립니다.','확인', MB_OK);
Key := FiniFile.FileName;
sRSV.Free;
FiniFile.Free;
Regist.Free;
end;
end;
end;