View Full Version : راهنمایی جهت نوشتن برنامه یاد آور
پدرخوانده
سه شنبه 05 اردیبهشت 1385, 15:46 عصر
چگونه یک برنامه یادآور بصورت مستقل از برنامه اصلی و قابل اجرا در تمامی محیط ویندوز بسازیم؟
(اگر برنامه هایی مشابه نگار و یا ... دیده باشید یک یادآور دارند که تنظیم می کنید که در فلان ساعت و فلان تاریخ این عبارت را نمایش دهد)
مشکل اصلی در این است که این برنامه را چگونه در تمامی محیط های ویندوز (بدون اجرای کامل برنامه) فعال کنیم
به نظر من قسمت کوچک از برنامه را که مخصوص این کار است (خواندن جدول و تست وجود قرار ملاقات خاص با تاریخ امروز و فعال کردن تایمر جهت رسیدن ساعت به ساعت موردنظر ) نوشته و جداگانه آن را exe کنیم و در startup ویندوز قرار دهیم (و جهت کنترل (مثلا غیرفعال کردن یا خروج از برنامه) برنامه را در قسمت icon traybar نمایش دهد) )
ولی با توجه به حجم بالا فایل vfp و همچنین فایلهای موردنیاز و یا مشکل کندی اولیه به هنگام اجرایی فایلهای اجرایی برنامه vfp باعث می شود که چنین کار مشکل گردد.
حال می خواستم ببینم دوستان تاحال برنامه ای برای این منظور نوشته اند و یا می توانند در این رابطه راهنمایی کنند.
(هرچند که در نوشتن هسته اصلی برنامه نیز مشکل هست ؟
چرا که فعال کردن تایمر با یک وقفه حتی چند ثانیه ای جهت خواندن یک تابع خاص که دائم بانک را جستجو کند (جهت فعال شدن ساعت خاص از تاریخ امروز) فکر نکنم کار جالبی باشه)
binyaz2003
سه شنبه 05 اردیبهشت 1385, 21:07 عصر
شاید بتونید از Tasks خود ویندوز استفاده کنید.
یعنی یک مورد اضافه کنید که در اون ساعت خاص برنامه اصلی شما رو اجرا کنه؟
یک جستجو در www.news2news.com بکنید.
rezaTavak
چهارشنبه 06 اردیبهشت 1385, 00:31 صبح
بله من نوشته ام اما داخل خود فاکس اجرا میشه. سرعت سیستم را هم تاثیری زیاد نداره چون من با شبیه سازها اینرا کنترل می کنم.
اگر هم می خواهید برنامه شما هر بار در اجرای ویندوز اجرا بشه توی رجیستری:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curr entVersion\Run
هر چیزی بذاری قبل از بالا آمدن سیستم به طور کامل، اجرا میشه.
پدرخوانده
چهارشنبه 06 اردیبهشت 1385, 08:13 صبح
با تشکر از شما دوستان
شاید بتونید از Tasks خود ویندوز استفاده کنید
اگر منظورتون Schedule tasks باشه اولا که کنترلش به نظرم سخت تر تا کنترل خودمان و ثانیا در برخی مواقع دیدم که درست عمل نمی کند (بر روی سیستم های مختلف تست کردم)
یک جستجو در www.news2news.com (http://www.news2news.com/) بکنید.
جستجو کردم متاسفانه معرفی دستور و کد api را دارد ولی تمامی مثالهایش قفل بود و قابل دسترس نمی باشد
(اون یک نمونه ایی هم که بود به علت عدم شناخت ابجکتهای netschedulejobs اجرا نشد)
اگر هم می خواهید برنامه شما هر بار در اجرای ویندوز اجرا بشه توی رجیستری:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curr entVersion\Run
هر چیزی بذاری قبل از بالا آمدن سیستم به طور کامل، اجرا میشه
من برنامه ایی برای این منظور در شاخه startup ویندوز کپی می کنم
اما ممنون میشم نسبت به الگوریتم و نحوه کار برنامه اتان توضیح دهید.
(آنچه به ذهن من می رسد این است که یک تابع توسط یک تایمر هر چند لحظه یکبار فراخوانی شده و در این تابع محتویات جدول که براساس تاریخ و ساعت سورت هستند سرچ شده و در صورت وجود برابری با تاریخ امروز اگر تایمر ساعت جاری را با ساعت قرار موردنظر برابر اعلام کرد برنامه هشدار اعلام کند که در این صورت به علت جستجو دائم در بانک فکر کنم یه کم زمانگیر باشد و .... و ثانیا برنامه نباید فرم اجرایی یا صفحه اسکرین یا... داشته باشد و باید بصورت تری آیکون بار باشد)
binyaz2003
چهارشنبه 06 اردیبهشت 1385, 16:03 عصر
شما به جستجوی دائم احتیاج ندارید اولین آیتم رو در اجرای اول برنامه پیدا کنید و زمان رو با اون مقایسه کنید هر وقت تغییری در داده ها حاصل شد دوباره جستجو کنید
همچنین با این کار حتی اینتروال تایمر رو هم میتونید تنظیم کنید تا کمتر چک بشه
پدرخوانده
چهارشنبه 06 اردیبهشت 1385, 20:02 عصر
هر وقت تغییری در داده ها حاصل شد دوباره جستجو کنید
خوب اینکار چگونه شدنی است (چگونه متوجه بشیم که اطلاعات تغییر کرده)
لازمه اش این است که دوباره حداقل اولین رکورد (درصورتی که براساس تاریخ وساعت سورت باشد) را دوباره بخوانیم و ساعت آن را در قسمت فعال شدن روتین مربوطه در تایمر قرار دهیم
rezaTavak
چهارشنبه 06 اردیبهشت 1385, 20:45 عصر
SELECT tasks
IF SECONDS() < 200
pcToDay =ed2fd(DATE())
ENDIF
LOCATE FOR lShowed=.T. .AND. nDate = VAL(SUBSTR(CHRTRAN(pcToday,"/",""),3)) .AND. nTime <= VAL(CHRTRAN(SUBSTR(TIME(),1,5),":","")) + 300
IF FOUND()
THIS.Show
THIS.Refresh
REPLACE lShowed WITH .F.
ENDIF
من از این روال استفاده می کنم. اگر چیزی موقعش بود اجرا lShowed برابر .F. می شود.
binyaz2003
پنج شنبه 07 اردیبهشت 1385, 11:22 صبح
خوب مگر با برنامه خودتون اطلاعات تغییر پیدا نمیکنه؟
من که نمیفهمهم میشکل چیه؟
اصلا میتونید یک جدول جدا داشته باشید که همیشه اولین کار در اون ذخیره بشه و این برنامه فقط اون رو مقایسه کنه و هر وقت کار جدیدی اضافه شد که باید زودتر انجام بشه در اون جدول در اولین و تنها ترین رکورد اون جدول جایگزاری بشه!
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.