掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.30002

期限付きのプログラム
投稿者---gun(2007/04/03 15:58:32)


こんにちは
環境はWindowsXP, Borland C++ 5.5.1です

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<conio.h>

void compare(void);
void limit(void);

struct exetime  {
    int year;
    int mon;
    int day;
    int hour;
    int min;
    int sec;
};

int main(void)
{
    compare();

    puts("このプログラムは時間比較のテスト用です");

    return 0;
}

void compare(void)
{
    struct exetime now;
    struct exetime set = { 2007, 4, 3, 15, 56, 0 };
    time_t timer;
    struct tm *t_st;

    time(&timer);
    t_st = localtime(&timer);

    now.year = t_st->tm_year+1900;
    now.mon = t_st->tm_mon+1;
    now.day = t_st->tm_mday;
    now.hour = t_st->tm_hour;
    now.min = t_st->tm_min;
    now.sec = t_st->tm_sec;

    printf("現在%04d/%02d/%02d_%02d:%02d:%02d\n", now.year, now.mon, now.day, now.hour, now.min, now.sec);
    printf("設定%04d/%02d/%02d_%02d:%02d:%02d\n", set.year, set.mon, set.day, set.hour, set.min, set.sec);

    if(now.year < set.year) {
        ;
    }
    else if(now.year == set.year && now.mon < set.mon)  {
        ;
    }
    else if(now.year == set.year && now.mon == set.mon && now.day < set.day)    {
        ;
    }
    else if(now.year == set.year && now.mon == set.mon && now.day == set.day && now.hour < set.hour)    {
        ;
    }
    else if(now.year == set.year && now.mon == set.mon && now.day == set.day && now.hour == set.hour  && now.min < set.min) {
        ;
    }
    else if(now.year == set.year && now.mon == set.mon && now.day == set.day && now.hour == set.hour  && now.min == set.min && now.sec <= set.sec)  {
        ;
    }
    else    {
        limit();
        exit(1);
    }

    return;
}

void limit(void)
{
    printf("期限切れです。\nプログラム作成者に問い合わせてください。\n\n終了するには何かキーを押してください . . .");
    getche();
    printf("\b \b\n");

    return;
}
このプログラムだとWindows設定時間を変更すれば期限に関係なく
使用する事ができます
Winsows設定時間を変更しても、一度期限後に起動していたら使用できなくなるようにするには
どうすればいいでしょうか?

アプリケーションの起動日時を取得すれば実現できると思ったのですが
取得方法がわからず困っています

よろしくお願いします


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:期限付きのプログラム 30007 ぽへぇ 2007/04/03 19:17:41


No.30007

Re:期限付きのプログラム
投稿者---ぽへぇ(2007/04/03 19:17:41)


>アプリケーションの起動日時を取得すれば
>実現できると思ったのですが取得方法がわからず困っています
ん? アプリケーションが起動した瞬間に現在時刻を取得すれば
それがアプリケーションの起動日時では?

>Windows設定時間を変更すれば期限に関係なく
>使用する事ができます

アプリケーションの起動日時を監視することで、
工夫次第では(システム時刻の変更に強い)使用期限付き
アプリが書けます。

他にも使用時間を総和するとか、時間計測はあきらめて
起動回数制限にしておくとか、いろいろありますが。




この投稿にコメントする

削除パスワード

No.30009

Re:期限付きのプログラム
投稿者---gun(2007/04/03 22:04:27)


ありがとうございます

>ん? アプリケーションが起動した瞬間に現在時刻を取得すれば
>それがアプリケーションの起動日時では?

ごめんなさい
プロパティ内のアクセス日時とWindows時間が同じ
という事を忘れていました

>アプリケーションの起動日時を監視することで、
>工夫次第では(システム時刻の変更に強い)使用期限付き
>アプリが書けます。
起動日時を監視する関数(?)はAPIになるのでしょうか?
それともC言語にあるのでしょうか?

期限が切れていても、Windows時間を期限前にする事により
再び使用できる(起動日時が未来にもかかわらず)
この問題を解決するためには

1、上記のアクセス日時を監視する物を使用
2、別ファイルを(暗号化)して使用
3、可能なら別ファイルを使用しないでプログラム自体で監視する

この方法を使用すると思うのですが
他にはどのような方法がありますか?

>他にも使用時間を総和するとか、時間計測はあきらめて
>起動回数制限にしておくとか、いろいろありますが

この場合は.datなどのファイルを作成して保存しないといけないので
上記2番になりますね

できるだけ他のファイルは生成せずに作りたいのです
他ファイルを編集して期限を騙す(?)様な事になりそうで
心配です


この投稿にコメントする

削除パスワード

No.30010

Re:期限付きのプログラム
投稿者---επιστημη(2007/04/03 22:11:22)
http://blogs.wankuma.com/episteme/


>できるだけ他のファイルは生成せずに作りたいのです
>他ファイルを編集して期限を騙す(?)様な事になりそうで
>心配です

暗号かければ?



この投稿にコメントする

削除パスワード

No.30015

Re:期限付きのプログラム
投稿者---ぽへぇ(2007/04/04 01:27:58)


>起動日時を監視する関数(?)はAPIになるのでしょうか?
>それともC言語にあるのでしょうか?

time(&timer); で十分といえば十分かと。

>2、別ファイルを(暗号化)して使用
まぁこれが手っ取り早いというか。

#「作り方を書く」ということは「破り方を書く」ことにもつながるわけで。その辺が掲示板の難しいところ。



この投稿にコメントする

削除パスワード

No.30016

Re:期限付きのプログラム
投稿者---gun(2007/04/04 02:41:39)


>time(&timer); で十分といえば十分かと。
これだとWin時間を変更したら騙されるので、と考えていました

>まぁこれが手っ取り早いというか。
結局別ファイル(.dat)に前回実行日時を暗号化し保存する事にしました

.datファイルが無い
.datファイル内の暗号キー桁数が違う
.datファイル内の期限が過ぎてる
Windows時間が期限を過ぎている

上記どれかに当てはまれば終了するようにしました

実行日時を保存する条件は

初回起動である
期限が過ぎていない
期限が過ぎて1回目の実行

このようにしてみました

>#「作り方を書く」ということは「破り方を書く」ことにもつながるわけで。その辺が掲示板の難しいところ。
はい、いろいろ答えていただきありがとうございました


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧