بهبود شمسی ساز تاریخ اکسپلورر ویندوز جهت سازگاری با ویندوزهای سری 8
اندازه‌ی قلم متن
تخمین مدت زمان مطالعه‌ی مطلب: دو دقیقه

این مطلب دنباله‌ی «تغییر عملکرد و یا ردیابی توابع ویندوز با استفاده از Hookهای دات نتی» است.
روش ارائه شده در آن با ویندوز‌های XP تا 7 نگارش‌های 32 بیتی و 64 بیتی، بدون مشکل کار می‌کند. اما تاثیری بر روی ویندوز 8 و نگار‌ش‌های پس از آن نداشت.

تغییرات توابع GetDateFormatW و GetTimeFormatW در ویندوز اکسپلورر ویندوز 8

چه برنامه‌ی ExplorerPCal و چه API Monitor را اگر با فعال سازی توابع GetDateFormatW و GetTimeFormatW اجرا کنید، هیچ خروجی خاصی را مشاهده نخواهید کرد. در ابتدا به نظر می‌رسد که ساختار ویندوز شاید تغییر کرده‌است ... ولی اینطور نیست. فقط اینبار بجای فراخوانی این توابع از kernel32.dll، از یک dll مخفی در پوشه‌ی System32 استفاده می‌شود. روش پیدا کردن آن نیز به صورت زیر است:
 "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\dumpbin.exe" /imports c:\windows\explorer.exe > explorer.imports.txt
کار dumpbin.exe موجود در پوشه‌ی VC\bin ویژوال استودیو، استخراج import table و export table یک فایل اجرایی و یا یک dll بومی ویندوز است. به این ترتیب می‌توان دریافت یک فایل exe، از چه dll هایی استفاده می‌کند و همچنین از این dllها، کدامیک از توابع آن‌ها را مورد استفاده قرار داده است.
اگر خروجی این برنامه را که اکنون در فایل explorer.imports.txt ذخیره شده‌است، بررسی کنیم، به نتیجه‌ی زیر خواهیم رسید:
    api-ms-win-core-datetime-l1-1-1.dll
             14015E848 Import Address Table
             1401613E0 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                           2 GetDateFormatW
                           1 GetDateFormatEx
                           4 GetTimeFormatEx
بله. در ویندوزهای سری 8، دیگر از کرنل32 برای دریافت GetDateFormatW استفاده نمی‌شود. اینبار از dll ایی به نام api-ms-win-core-datetime-l1-1-1.dll کمک گرفته شده‌است. این dll در پوشه‌ی System32 با خاصیت مخفی قرار دارد.
بنابراین تنها تغییری که باید در برنامه‌ی ExplorerPCal داده شود، اضافه کردن مداخل جدید فوق است. در ویندوزهای قبل از 8، از نگارش‌های Ex استفاده نمی‌شد. در اینجا هم از نگارش‌های W و هم Ex دار استفاده شده‌است.

اگر خواستید این تغییرات را با برنامه‌ی API Monitor بررسی کنید، فایل جدید api-ms-win-core-datetime-l1-1-1.xml ذیل را در پوشه‌ی API\Windows آن کپی نمائید تا مداخل api-ms-win-core-datetime-l1-1-1.dll نیز به مجموعه‌ی تعاریف آن اضافه شوند.
api-ms-win-core-datetime-l1-1-1.xml

حاصل نهایی، فایل‌های اجرایی و سورس بهبود یافته‌ی برنامه را از اینجا می‌توانید دریافت کنید:
شمسی ساز تاریخ اکسپلورر ویندوز

تاثیر آن‌را نیز بر روی Explorer ویندوز 8، در تصاویر ذیل می‌توانید ملاحظه نمائید:

ساعت و تقویم نوار وظیفه‌ی ویندوز

تاریخ تغییرات فایل‌ها، در نمایش لیستی ویندوز اکسپلورر

تاریخ ایجاد و تغییرات یک فایل در خواص آن

تاریخ نمایش داده شده به همراه charm bar ویندوز 8
  • #
    ‫۱۰ سال و ۷ ماه قبل، پنجشنبه ۲۲ اسفند ۱۳۹۲، ساعت ۱۷:۴۹
    جدیدا مایکروسافت تغییراتی رو انجام میده که اطلاع رسانی خوبی درباره اش انجام نشده. علاوه بر موردی شما که اشاره کردید، یکپارچه سازی‌های Localizationی که انجام شده گاهی منتج به Break شدن نرم افزار میشه در حالیکه تغییر بسیار کوچک بوده مثلا در 8.1 به جای . از / برای Floating point فارسی پیش فرض استفاده شده که باعث میشه مقادیر ارسالی به دیتابیس دچار مشکل بشوند.
  • #
    ‫۱۰ سال و ۶ ماه قبل، پنجشنبه ۱۴ فروردین ۱۳۹۳، ساعت ۱۵:۵۹
    با تشکر فراوان  از شما  خدا خیرتان دهد خیلی وقت بود که دنبال چنین برنامه ای می‌گشتم
    1) اگر تقویم taskbar ویندوز به صورت رقمی بود خیلی بهتر می‌شد.(مثلا 1393/01/13)
    2) اگر امکان داره برای تغییر تقویم صفحه lock ویندوز 8 هم این برنامه را بهبود بخشید.
  • #
    ‫۹ سال و ۱۱ ماه قبل، دوشنبه ۱۲ آبان ۱۳۹۳، ساعت ۰۴:۳۷
    من کلی تلاش کردم که اون قسمت انتخاب ماه رو هم تو ویندوز فارسی کنم
    اما نتونستم هوک مرتبط را پیدا کنم
    ولی یه راه دیگه ای هست که هنگامی که برنامه تقویم ویندوز باز میشه(زمانی که رو ساعت کلیک می‌کنی) بهت خبر میده و میشه به جای صفحه تقویم برنامه خودمون را آورد بالا

    می خواستم اگر کسی چیزی میدونه راهنمایی کنه که یه تقویم اپن سورس درست حسابی و کامل درست کنیم :)