Q&A

  • 쉐어웨어 배포시 사용제한 및 사용자 등록....
[질문] 쉐어웨어 배포시 사용제한 및 사용자 등록....



웨어웨어 프로그램과 같이 소프트웨어에 사용일자를 제한 하거나...



등록을 통해 사용일자 제한을 해제 하는 거와 같은것은 어떻게해야 하나요?



1  COMMENTS
  • Profile
    구창민 2001.07.21 20:55
    이기준 wrote:

    > [질문] 쉐어웨어 배포시 사용제한 및 사용자 등록....

    >

    > 웨어웨어 프로그램과 같이 소프트웨어에 사용일자를 제한 하거나...

    >

    > 등록을 통해 사용일자 제한을 해제 하는 거와 같은것은 어떻게해야 하나요?

    >





    이거 일전에 뽁기씨가 올려논 글인데 도움이 될거 같네여



    항상 즐거운 프로그래밍 하시길~~







    제가 일하는곳에 있는 개발프로그램중에 한 부분입니다..

    소스가 좀 엉망인데요 (민망~)

    대충 설명하면

    맨처음 그 프로그램이 실행될때 레지스트리값이 존재하는지 판단하고

    없으면 첨 실행된 시스템날짜를 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;