PDA

View Full Version : مبتدی: برنامه Limit



mohammad1314
سه شنبه 17 تیر 1393, 00:40 صبح
سلام دوستان.
من میخوام برنامم رو limit کنم. یعنی این که برنامه در یک مدت زمان محدود ، کار کنه.
برای مثال میخوام زمانی که برای اولین بار وارد برنامه شدم ، برنامه ، تاریخ همون روز رو ازسیستم شناسایی کنه و روز به روز به این عدد (تاریخ همون روز) اضافه شه و زمانی که سی روز شد، برنامه یک پیغام بده.
چطور میتونم این کار رو بکنم؟
(حالا با هر الگوریتمی که در نظر دارین)

محمد فدوی
سه شنبه 17 تیر 1393, 11:33 صبح
اگه منظورت اینه که برنامت تو طول این سی روز مدام باز و بسته بشه و بعد از ۳۰ روز بگه که ۳۰ روز گذشته، (مثل کاری که نرم افزارهای Trial انجام میدن)، پیشنهاد میکنم دفعه اولی که برنامه اجرا شد تاریخ سیستم رو توی یه فایل یا ریجستری ذخیره کنی و هر دفعه که برنامت اجرا شد چک کنی که آیا از تاریخ ذخیره شده ۳۰ روز گذشته یا نه...
همچنین اگه این کارت بعد امنیتی هم داره (یعنی میخوای کاربر نتونه اون تاریخ رو دستی عوض کنه تا برنامتو گول بزنه) پیشنهاد میکنم تاریخت رو بصورت یک طرفه کد کنی (مثلا MD5)...

اگر منظور اینه که برنامت تو طول این ۳۰ روز در حال اجراست، توی برنامت یه ریسمان (Thread) برای چک کردن تاریخ بنویس و توی اون مدام (با فاصله های زمانی معین) تاریخ رو چک کن.

بهرحال فکر کنم باید هر دو مورد رو باهم انجام بدی... یعنی تاریخ اولیه رو توی ریجستری بصورت کد شده ذخیره کنی و توی یه ریسمان مدام تاریخ رو چک کنی.
هرجاش مشکل داشتی بپرس دوستان کمک میکنن.

mohammad1314
سه شنبه 17 تیر 1393, 13:57 عصر
منظورم همون برنامه های trial هستش.
یعنی بعد از سی روز یه پیغامی بده که تاریخ برنامه تمام شده است.
خب حالا نمیدونم دقیقا چی کار بکنم. یعنی نمیدونم چه جوری چک کنه که سی روز شده یا نه؟
ممنون میشم کمکم کنین.

محمد فدوی
سه شنبه 17 تیر 1393, 20:36 عصر
اصل این چک کردن تو این تیکه کده. هروقت این شرط برقرار باشه یعنی ۳۰ روز طی شده (startDate همون تاریخ اولین اجراست که باید قبلا توی یه فایل یا ریجستری ذخیره کرده باشیش و اینجا بری و بخونیش):

DateTime startDate = ...;
if(DateTime.Today.Subtract(startDate).TotalDays >= 30) {
// Time is Over!
} else {
// You can use Trial Version
}

erfan_urchin
سه شنبه 17 تیر 1393, 22:07 عصر
منظورم همون برنامه های trial هستش.
یعنی بعد از سی روز یه پیغامی بده که تاریخ برنامه تمام شده است.
خب حالا نمیدونم دقیقا چی کار بکنم. یعنی نمیدونم چه جوری چک کنه که سی روز شده یا نه؟
ممنون میشم کمکم کنین.
دوست عزیز اول از همه باید کارهایی که میگم رو انجام بدین
از منوی بالای ویژوال استودیو Project رو کلیک کنید و گزینه آخر رو انتخاب کنید که نوشته (WindowsApplication1 Properties)
از پنجره باز شده از منوی سمت چپ Setting رو انتخاب کنید در سمت راست پنجره سه متغیر day , month , year رو از نوع int تعریف کنید و یک متغیر به نام check از نوع bool تعریف کنید (حتما به همین اسم هایی که گفتم تعریف کنید تا در کدها به مشکل بر نخورین)
value متغیر check رو برابر False قرار بدین و بقیه value متغیرهارو دست نزنین
حالا میرسیم به کدنویسی:
Private year As Integer, month As Integer, day As Integer
Private check As Boolean
Private Sub Form1_Load(sender As Object, e As EventArgs)
check = Properties.Settings.[Default].check
year = Properties.Settings.[Default].year
month = Properties.Settings.[Default].month
day = Properties.Settings.[Default].day
If check = False Then
check = True
Properties.Settings.[Default].check = check
Dim dt As DateTime = DateTime.Now
year = Convert.ToInt16(dt.Year)
Properties.Settings.[Default].year = year
month = Convert.ToInt16(dt.Month)
Properties.Settings.[Default].month = month
day = Convert.ToInt16(dt.Day)
Properties.Settings.[Default].day = day
Properties.Settings.[Default].Save()
End If
Dim newdate As DateTime = DateTime.Now
Dim olddate As String = (year.ToString("00") + "/" + month.ToString("00") + "/" + day.ToString("00")).ToString()
Dim ts As TimeSpan = newdate - Convert.ToDateTime(olddate)
If ts.Days >= 30 Then
MessageBox.Show("اعتبار این برنامه به پایان رسیده است")
Application.[Exit]()
End If
End Sub
موفق باشی

erfan_urchin
سه شنبه 17 تیر 1393, 22:32 عصر
البته دوست عزیز من چون زبون VB.Net رو بلد نیستم این کد هارو به زبون C#‎‎‎ نوشتم و توسط سایت های Converter این کدهارو تبدیل کردم به کد VB.Net
قاعدتا این کد مشکل داره. بخاطر همین من کد C#‎‎‎ رو هم میزارم ببینید اگه جایی به اشکال برخوردید خودتون درستش کنید
int year, month, day;
bool check;
private void Form1_Load(object sender, EventArgs e)
{
check = Properties.Settings.Default.check;
year = Properties.Settings.Default.year;
month = Properties.Settings.Default.month;
day = Properties.Settings.Default.day;
if (check == false)
{
check = true;
Properties.Settings.Default.check = check;
DateTime dt = DateTime.Now;
year = Convert.ToInt16(dt.Year);
Properties.Settings.Default.year = year;
month = Convert.ToInt16(dt.Month);
Properties.Settings.Default.month = month;
day = Convert.ToInt16(dt.Day);
Properties.Settings.Default.day = day;
Properties.Settings.Default.Save();
}
DateTime newdate = DateTime.Now;
string olddate = (year.ToString("00") + "/" + month.ToString("00") + "/" + day.ToString("00")).ToString();
TimeSpan ts = newdate - Convert.ToDateTime(olddate);
if (ts.Days >= 30)
{
MessageBox.Show("اعتبار این برنامه به پایان رسیده است");
Application.Exit();
}
}

mohammad1314
سه شنبه 17 تیر 1393, 22:54 عصر
ممنون از راهنماییت . فقط کلمه properties رو در vb.net نمیتونه تشخیص بده.
باید چی کار کنم؟؟؟؟؟؟؟؟؟

در ضمن یه سوال دیگه.
میخوام اول برنامه یک کد رو در یک تکست باکس بررسی کنم و اگه کد رو درست وارد کردیم(مثلا برابر 20 بود) ، وارد برنامه بشیم و به مدت سی روز زمان داشته باشه.
ممنون میشم راهنماییم کنین؟

erfan_urchin
چهارشنبه 18 تیر 1393, 00:05 صبح
ممنون از راهنماییت . فقط کلمه properties رو در vb.net نمیتونه تشخیص بده.
باید چی کار کنم؟؟؟؟؟؟؟؟؟

در ضمن یه سوال دیگه.
میخوام اول برنامه یک کد رو در یک تکست باکس بررسی کنم و اگه کد رو درست وارد کردیم(مثلا برابر 20 بود) ، وارد برنامه بشیم و به مدت سی روز زمان داشته باشه.
ممنون میشم راهنماییم کنین؟
راستش سوال اولت رو نمیدونم :لبخند: گفتم که زبون تخصصی من C# هستش. ببین میتونی معادل properties رو از یه استاد VB بپرسی
شاید یکی از آقایون Mani_rf , salehbagheri (مدیران تالار VB.Net) بتونن جواب این سوالتو بدن (بهشون پیغام خصوصی بده)
salehbagheri: http://barnamenevis.org/member.php?39960-salehbagheri
Mani_rf: http://barnamenevis.org/member.php?81144-Mani_rf
جواب سوال دومت هم اینه که شما باید فرم اولت رو یه فرم بزاری که توش یه تکست باکس داشته باشه و یه باتن و تو رویداد کلیک باتن کد زیر رو بنویس (فرم اصلی برنامت باید به عنوان فرم2 باشه)
If textBox1.Text = "20" Then
Dim f2 As New Form2()
f2.Show()
Me.Hide()
End If

فقط حواست باشه اگه توی فرم اصلی برنامت یک باتن داری که اگه روش کلیک کنی برنامه بسته میشه باید برای اون باتن این کد رو بنویسی تا کل برنامت بسته بشه
Application.Exit();
اگه از کد Me.Close() استفاده کنی اون فرمی که Hide شده بسته نمیشه و در نتیجه برنامت بسته نمیشه
موفق باشی