پشتیبانی نکردن ویندوز از تاریخ شمسی از آن مشکلات باستانی است که تا به حال هیچ راه‌حل معقولی برای آن ارائه نشده است. البته اگر هدف فقط نمایش تاریخ شمسی در ویندوز باشد، از انواع نرم‌افزارهای نمایش تاریخ و تقویم شمسی مثل MPcalendar می‌توان استفاده نمود. اما در صورتی که بخواهیم تاریخ شمسی را به صورت سراسری و به شکلی که بوسیله توابع مربوطه مانند Date، Time، Now و … در ویندوز قابل دسترس باشد داشته باشیم، تنها راه معقول آن اضافه شدن نوع تقویم فارسی به استاندارد‌های قابل پشتیبانی توسط ویندوز در کتابخانه مربوط به Standards and Formats در Regional and Language options است. (که البته امری بعید به نظر می‌رسد)به عنوان مثال برای استفاده از تاریخ هجری قمری به شکل سراسری در ویندوز، می‌توانید با اجرای Regional and Language options از Control Panel به اولین Tab با نام Regional Options مراجعه کرده و در لیست Standards and Formats یکی از زبانهایی که تاریخ هجری دارد (مانند زبان اردو Urdu) را انتخاب و سپس با زدن دکمه Customize در بخش Date از لیست Calendar Type، تقویم “هجری” را انتخاب کنید. (تاریخ شمسی پشتیبانی نمی‌شود)

راه حلی که بنده از آن استفاده کردم، صرف نظر کردن از DateTimeStamp استاندارد (مشکل خاصی بوجود نخواهد آمد) و اضافه کردن رشته حاوی تاریخ شمسی به TimeStamp استاندارد بود. برای فعال بودن و بروز شدن خوردکار آن هم یک Hook Driver طراحی کردم که با تغییر زمان، به طور خودکار مقادیر فیلدهای 1159 و 2359 از LOCALE_SYSTEM_DEFAULT را آپدیت کند.
البته به دلیل محدودیت سایز متن TrayClock، از 4 رقم سال شمسی هم صرف نظر کردم (این مشکل قابل حل است) اما نتیجه کار تا حدودی قابل قبول است. مثلا با اجرای برنامه، ساعت ویندوز به این شکل تغییر می‌کند: (مثلا 4 شنبه 25 شهریور)

تاریخ شمسی برای ویندوز Shamsi date in winxp
همچنین بوسیله توابع Now و Time و … به راحتی می‌توان رشته تاریخ شمسی را جهت استفاده در زبانهای برنامه‌سازی استخراج نمود. البته توجه کنید که می‌بایست از انواع WideString یا UTFx استفاده شود.در هر صورت اگر هدف شما نمایش تاریخ شمسی در کنار ساعت ویندوز باشد، این ابزار راه‌حل مناسبی است.

تاریخ شمسی برای ویندوز Shamsi date in winxp

پیوست:

پس از بررسی برنامه، به دلیل وجود چند مشکل مربوط به عدم رسیدگی به Userdefined Messages (جهت اطلاع بیشتر به مبحث “Messages and Message Queues” در MSDN مراجعه کنید) و همینطور خطا در محاسبه تاریخ شمسی، درایور برنامه را بازنویسی نمودم.
در همین راستا از مقاله مفید جناب آقای موسی اکرمی با عنوان “Iranian calendar from historical backgrounds to up-to-date computations” ارائه شده در ICHS2005 که در حل مشکل تاثیرگذار بود متشکرم.

فایل جدید برنامه، نسخه 0.2 پیوست شده است. پس از رفع چند مشکل و بهینه‌سازی آنها، سورس برنامه نیز پیوست می‌گردد.

همچنین در پاسخ به آقای نصیری:
کاربرد فعلی این نرم‌افزار، دریافت تاریخ شمسی جاری (همان روز) به صورت سراسری (در سیستم عامل) بوسیله توابع با خروجی LongTimeFormat و ذخیره آن به صورتی غیر از DateTime است. در صفحات Detail, Properties و غیره، تاریخ به فرمت Double ذخیره شده بوده و برای نمایش Recode می‌گردد که به همین دلیل در همان زمان تاریخ شمسی جاری به آن پیوست می‌شود. در مورد فرمت نمایش تاریخ هم، محدودیت 14 کاراکتر یونیکد در فیلد مربوطه وجود دارد.

دریافت برنامه تاریخ شمسی 0.2 ShamsiXP

Print this pageEmail this to someoneShare on Google+Share on FacebookShare on LinkedInTweet about this on TwitterShare on RedditShare on TumblrShare on StumbleUponPin on Pinterest