PDA

View Full Version : گرفتن تاریخ روز بطور غیرمستقیم



Kambiz
شنبه 12 مهر 1382, 14:55 عصر
فرض کنید که کاربر تاریخ سیستم رو عوض کنه و بعد برنامه رو اجرا کنه. راهی وجود داره که بشه تاریخ واقعی روز یا به عبارتی تاریخی که سیستم شروع بکار کرده رو پیدا کرد؟

در ضمن نمی‌تونم از اینترنت برای گرفتن تاریخ استفاده کنم. تابع Date دلفی و API مربوطه ویندوز هم تاریخی رو که توسط کاربر تعیین شده برمی‌گردونند.

(امید)
شنبه 12 مهر 1382, 15:06 عصر
سلام
من همین کار رو می خواستم انجام بدم.
برای این منظور می خواستم یه تقویم مستقل از سیستم بنویسم .(و همچنان نیز می خواهم بنویسم :wink: )

said ali
شنبه 12 مهر 1382, 15:30 عصر
با سلام
فکر کنم به هیچ صورت ممکن نیست مگر اینکه یه تایمر مستقل از سیستم بر روی برنامه تعریف بشه که در این صورت برنامه حاصله همیشه باید یه جورایی تو حافظه باشه و تنها راه تکثیر اون فقط از روی شبکه باشه که تایمر از کار نیفته . تازه در این صورت اگر سیستم کاربر خاموش بشه با هم تاریخ از دست میره که تنها راه حلش همون استفاده مستقیم از شبکه محلی یا اینترنت میباشد.
البته فکر کنم . البته اگه کسی راهی پیدا کرد خیلی ممنون میشم چون خودم هم دنبال یه همچین چیزی هستم.
آقای دلفی اریا از نظر نظری با شبکه یا اینترنت میشه ساعت رو گرفت ولی میشه بگید چه کدی باید نوشت؟؟؟؟؟؟؟؟

Mashatan
شنبه 12 مهر 1382, 15:45 عصر
خوب با نوشتن یک Service میشه این مشکل رو حل کرد البته باید Service به صورت اتوماتیک موقع بالا اومدن ویندوز Start کنه و در این موقع باید تاریخ رو دریافت کنه و یه جای نگاه داره بعد توسط Socket یا Share Memory و یا ... به برنامه اصلی بفرسته البته باید Service هم هوشمند باشه که وقتی مثلا از ساعت 24 گذشت خودشو Update کنه .

Kambiz
شنبه 12 مهر 1382, 16:32 عصر
علی (مشاطان) جان، بدون استفاده از یک برنامه دیگه. :wink:

سید علی جان تو لینک زیر استاندارد این کار شرح داده شده:
<span dir=ltr>RFC 1361 - Simple Network Time Protocol (SNTP)</span> (http://www.faqs.org/rfcs/rfc1361.html)

houshmand
شنبه 12 مهر 1382, 22:01 عصر
تاریخی که سیستم شروع بکار کرده رو پیدا کرد؟

delphi help ===>win sdk

GetTickCount


GetTickCount

The GetTickCount function retrieves the number of milliseconds that have elapsed since Windows was started.

DWORD GetTickCount&#40;VOID&#41;


Parameters

This function has no parameters.

Return Values

If the function succeeds, the return value is the number of milliseconds that have elapsed since Windows was started.

Remarks

The elapsed time is stored as a DWORD value. Therefore, the time will wrap around to zero if Windows is run continuously for 49.7 days.
Windows NT&#58; To obtain the time elapsed since the computer was started, look up the System Up Time counter in the performance data in the registry key HKEY_PERFORMANCE_DATA . The value returned is an 8 byte value.

Kambiz
شنبه 12 مهر 1382, 22:14 عصر
ممنون علیرضا جان. ولی این تابع تعداد ثانیه‌هایی رو که از زمان شروع سیستم گذشته برمی‌گردونه. برای استفاده از این تابع برای بدست آوردن تاریخ باید بدونیم که ثانیه صفر چه زمانی (تاریخ و ساعت) بوده.

houshmand
شنبه 12 مهر 1382, 23:00 عصر
راه حل دوم: مقایسه زمان فعلی با آخرین زمانaccessed فایلها ی روی هارد یا زمان Created و...

Kambiz
یک شنبه 13 مهر 1382, 00:25 صبح
حقیقتش الان از این روش استفاده می‌کنم ولی دو تا مشکل داره:
اگر فایل مورد نظر مدام توسط سیستم تغییر کنه زمانی که کاربر تاریخ رو تغییر می‌ده تاریخ این فایلها هم ممکنه به تاریخ جدید تغییر پیدا کنه.
اگر سیستم فایل رو دیر به دیر تغییر بده در این صورت ممکنه تاریخی رو که می‌گیریم تاریخ روزهای قبل باشه.فکر می‌کنم با ترکیب دو روشی که گفتی بشه به نتیجه‌ای رسید. :idea:

said ali
یک شنبه 13 مهر 1382, 12:23 عصر
با سلام
با تشکر از آقای دلفی اریا عزیز که اینقدر به بنده لطف دارن :D :D :D :D ولی میشه کمی بیشتر توضیح بدین چون اون چیزی که من خوندم با اون سطح زبان انگلیسی عالیم!!!!!!!! تقریبا هیچی دستگیرم نشد. در مورد استفاده از یک فایل و زمان مدیفای شدن اون چطوری میشه استفاده کرد ؟ و در مورد شروع کار ویندوز فکر کنم تو ریچجیستری یه چیزهایی ثبت بشه ولی نمیدونم کجاش.

Kambiz
یک شنبه 13 مهر 1382, 13:13 عصر
سید علی جان بهتره راجب به قرارداد SNTP در بخش شبکه صحبت بشه. البته اینم بگم که اطلاعات من در مورد شبکه در اون حد نیست که قابل بیان کردن باشه ولی مسلما" اینجا دوستانی هستند که بتونند پرسشت رو پاسخ بدن. و پرسش دیگرت هم همون پرسشی هست که قراره اینجا پاسخ داده بشه.

Kambiz
یک شنبه 13 مهر 1382, 15:24 عصر
سلام،

اگر فایلی رو پیدا کنید که ویندوز فقط در شروع کار اون رو تغییر بده، با استفاده از فانکشن زیر می‌تونید تاریخ و ساعت فعلی رو با چند ثانیه اختلاف نسبت به زمان شروع ویندوز بدست بیارید.

این هم بگم که چنین فایلهایی وجود دارند ولی ممکنه رو ویرایشهای مختلف ویندوز فرق داشته باشند. چون از این کد برای نوشتن ویرایش Time Trial یک برنامه می‌خوام استفاده کنم٬ اسم فایلی رو که خودم انتخاب کردم اینجا نمی‌یارم. :wink:


function SysDateTime&#58; TDateTime;
const
FileName = 'PATH TO FILE THAT IS MODIFIED ON WINDOWS STARTUP';
begin
Result &#58;= FileDateToDateTime&#40;FileAge&#40;FileName&#41;&#41; + GetTickCount / &#40;24 * 3600 * 1000&#41;;
end;

ممنون از همگی و بویژه علیرضا خان که این ایده رو زنده کرد.

کامبیز

SReza1
یک شنبه 13 مهر 1382, 19:47 عصر
روش خیلی خوبی بود!! کلی حال کردم :P :P :P :P :lol: :D :P :oops:

houshmand
یک شنبه 13 مهر 1382, 20:54 عصر
خواهش میکنم آقا کامبیز
:!: ولی خوب راه چاره گریزاز این هم تغییر ساعت سیستم و یک بار restart کردن سیستم است
//××××××××××××××××××××
راه حل بهتر که به فکرمن می رسداین است که
تاریخ سیستم را در یک متغییر نگاه داشته و با مقایسه آن با تاریخ فایلهای توی دایرکتوری ویندوز (یا پوشه system آن)
اگر آنها جدید تر بودند آن را در نظر بگیرد
با این کار حتی اگه سیستم restart شود نیز
همه فایلها تاریخشان به عقب بر نمی گردد
و کار اون کسی که بخواهد این کار را بکند مشکل!
//×××××××××××××
چاه مکن بهر کسی اول خودت دوم کسی :cry:
فکر کنم با این پیشنهادها در آینده فقط کار خودم را سخت تر می کنم :mrgreen:

Kambiz
یک شنبه 13 مهر 1382, 21:02 عصر
فایلهایی دیگه سیستم یا اینقدر دیر به دیر به روز میشن که تاریخ روز گشته ممکنه روشون باشه یا اینقدر زود به زود که مابین زمانی که کاربر (یا بهتره بگم برنامه هک) تاریخ رو عوض می‌کنه تا وقتی ما اون رو چک می‌کنیم تاریخ دیگه بر اساس تاریخ عوض شده هست.

درست گفتی. اگر تقویم سیستم واقعا نادرست باشه و کاربر بخواد که اون رو درست کنه٬ برای اینکه برنامه اجرا بشه لازمه که کامپیوتر رو اصلاح کنه. چون این حالت کم پیش میاد و هم اینکه برنامه فقط برای یک مدت کوتاه قراره کار کنه مشکل زیاد بزرگی نیست و شاید از هر 100 نفر یک نفر به این مشکل برخورد کنه. دیگه الانم همه یاد گرفتن که اگر چیزی کار نکرد یک بار کامپیوترشون رو ریست کنند.

Kambiz
سه شنبه 15 مهر 1382, 01:28 صبح
فکر کنم با این پیشنهادها در آینده فقط کار خودم را سخت تر می کنم :mrgreen:
تازه الان دوزاریم افتاد که چه اشتباه بزرگی کردم. :lol:
بعد از اینکه کلی کلنجار رفتم تا یک روش مطمئن برای گرفتن تاریخ روز پیدا کنم، اونوقت دو دستی گذاشتمش در اختیار هکرهای گرامی. نوش جان! :lol: :lol:
خوب با این حساب دیگه این روش به درد هیچ احد الناسی نمی خوره. :D

Kambiz
سه شنبه 15 مهر 1382, 01:39 صبح
:!: ولی خوب راه چاره گریزاز این هم تغییر ساعت سیستم و یک بار restart کردن سیستم است


به شرطی که کاربرنیازی به تاریخ صحیح روز نداشته باشه. وگرنه هر بار که می‌خواد برنامه رو اجرا کنه باید یک ریستارت هم مقدمه‌اش کنه و کارش که تموم شد تاریخ رو برگردونه سر جای اولش. اگر کسی حاضر پول نده ولی این عذاب رو متحمل بشه برنامه حلالش باشه. :lol: