ورود

View Full Version : سوال: نحوه رفرش سیستم بعد از تغییر در رجیستری



محمد زارع
چهارشنبه 09 بهمن 1387, 13:39 عصر
با سلام

می خوام توی برنامه از طریق رجیستری فایل های سیستمی رو مخفی کنم.
کلید مورد نیاز رو هم توی آدرس زیر با مقدار 0 توسط یک تایمر می سازم ،

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curr entVersion\Explorer\Advanced\ShowSuperHidden

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

ممنونم.

meys34
چهارشنبه 09 بهمن 1387, 17:01 عصر
بايد پيغام زير به تمامي پنجره هايي كه ميخواهي تغييرات روشون اعمال بشه ارسال كني:

WM_SETTINGCHANGE = &H1A
SendMessage hwnd, WM_SETTINGCHANGE, 0, 0

يا اينكه مثل Explorer پيغام رو به تمامي پنجره ها بفرستي:

WM_SETTINGCHANGE = &H1A
HWND_BROADCAST = &HFFFF&
SendMessage HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0

ali190
یک شنبه 31 مرداد 1389, 17:37 عصر
با سلام و عرض خسته نباشید
من از طریق کد زیر که یک مقدار در رجیستری است گزینه "do not show hidden files and folders" رو از قسمت view بخش folder option رو فعال میکنم تا فایلهای مخفی سیستم نشون داده نشه

کد:


Set Reg = CreateObject("wscript.shell")
Reg.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\Windows\Curre ntVersion\Explorer\Advanced\Hidden", 2, "REG_BINARY"

فقط مشکل اینجاست که بعد از اجرای این دستور در vb باید فولدر فعال یا کل ویندوز رو یکبار بصورت دستی رفرش کنم
من کدی میخوام که بعد از اجرای دستور مورد نظرم ویندوز رو رفرش کنه تا در آن واحد اعمال تغییر مورد نظرم رو مشاهده کنم
دوست عزیزمون meys34در بالا روش رو گفتن
من کد رو در یک دکمه قرار دادم ولی عمل نکرد
گویا باید از رفرنس بخش رو تیک بزنم یا متغیری تعریف کنم
در کل از کد بالا جوابی نگرفتم
میشه لطف کنید و راهنماییم کنید.
ممنون میشم

Saman_12
دوشنبه 01 شهریور 1389, 00:31 صبح
سلام.
اگه قراره کاربر پسند باشه که همون روشی که دوستان گفتن خوبه ولی ......!
Explorer رو یه بار Taskkill کن بعد هم دو باره بیارش بالا با یه اختلاف 100 میلی ثانیه ای.

ali190
دوشنبه 01 شهریور 1389, 00:35 صبح
درمورد روش اول که من کدها رو تست کردم
اجرا نشد
نمیدونم چرا؟
اما روش دوم که شما پیشنهاد کردید ، میشه لطف کنید و نمونه قرار بدید؟
ممنون

Saman_12
دوشنبه 01 شهریور 1389, 01:00 صبح
اینم سورس البته احتیاجی به سورس نبود ولی دیگه .... :

ali190
دوشنبه 01 شهریور 1389, 01:07 صبح
ممنون از جوابت
روش خوبیه
فقط یه عیب کوچیک داره ، اونم اینه که امکان داره کاربر یه سکته خفیف بزنه که نکنه سیستمش ترکیده:قهقهه::قهقهه::قهقهه:
میگیری چی میگم که
از این کابرای وسواسی که موندن از یک جای برنامه ایراد واهی بگیرن
بلانسبت همه
در مورد احیای روش اول نمیشه کاری کرد؟

Saman_12
دوشنبه 01 شهریور 1389, 01:49 صبح
نام کلاس Explorer ویندوز CabinetWClass هست خوب ما هندل تمام پنجره هایی که این کلاس رو دارند به دست میاریم و میریزیم توی یک آریه بعد هم تک تک عضو ها رو پردازش می کنیم(یا اینکه فکوس رو به ترتیب به هشون می دیم وکلید F5 رو براشون می فرستیم.)بعید می دونم مشکلی پیش بیاد.

محسن شامحمدی
دوشنبه 01 شهریور 1389, 06:20 صبح
دوستان من این فایل رو از یک برنامه ای که همین کارو میکرد(تغییر در رجیستری و بعد رفرش کل ویندوز) برداشتم
بینید شاید بدردتون بخوره:بوس:

Saman_12
دوشنبه 01 شهریور 1389, 09:10 صبح
09111111111 جون انی که دادی چجوری کار می کنه بد نبود زمین زمان رو رفرش میده!!!:تشویق::کف:

Saman_12
دوشنبه 01 شهریور 1389, 10:59 صبح
این سورس رو هم امتحان کن فکر می کنم طریقه کار کردش مثل فایل Exe جناب 0911111111 باشه توی این برنامه من اومدl با استفاده از API های SendMessage و EnumWindow اول هندل تمام پنجره ها رو به دست آوردم بعد هم پیغام Refresh رو براشون فرستادم :

محسن شامحمدی
دوشنبه 01 شهریور 1389, 14:12 عصر
09111111111 جون انی که دادی چجوری کار می کنه بد نبود زمین زمان رو رفرش میده!!!:تشویق::کف:

این برنامه با زبان ویژوال بیسیک نوشته شده بود که البته متاسفانه چون سورسشو ندارم نمی دونم چکار می کنه.
خوشحالم که بدردتون خورده:قلب:

ali190
دوشنبه 01 شهریور 1389, 14:51 عصر
سلام


نقل قول: نحوه رفرش سیستم بعد از تغییر در رجیستری
این سورس رو هم امتحان کن فکر می کنم طریقه کار کردش مثل فایل Exe جناب 0911111111 باشه توی این برنامه من اومدl با استفاده از API های SendMessage و EnumWindow اول هندل تمام پنجره ها رو به دست آوردم بعد هم پیغام Refresh رو براشون فرستادم :
سامان عزیز برنامه رو تست کردم ، متاسفانه ازش جواب نگرفتم.
پوشه رو رفرش نمیکنه.
نمیدونم چرا؟

Saman_12
سه شنبه 02 شهریور 1389, 02:30 صبح
خوب دیگه من همین به ذهنم رسید که هر پنجره ای که هندل داشته باشه رو رفرش بدم.

ali190
چهارشنبه 03 شهریور 1389, 17:30 عصر
باسلام و عرض خسته نباشید
دوستان یعنی راهی برای رفرش نمودن سیستم بعد از اعمل تغییر در رجیستری وجود ندارد؟
ممنون

returnx
چهارشنبه 03 شهریور 1389, 17:48 عصر
این برنامه با زبان ویژوال بیسیک نوشته شده بود که البته متاسفانه چون سورسشو ندارم نمی دونم چکار می کنه.
خوشحالم که بدردتون خورده:قلب:
این برنامه فقط سیستم رو refresh نمیکنه فکر کنم یه سری کار های دیگه هم میکنه این حتی ترتیب آیکن های Desktop منو بهم ریخت.:متعجب:

Heidari66
جمعه 05 شهریور 1389, 00:53 صبح
اینم سورس البته احتیاجی به سورس نبود ولی دیگه .... :

دوست عزیز فرض کن کاربر چندتا پنجره باز کرده یا شاید داره کپی میکنه اونموقع با این دستور تمام اینا به فنا میره...


دوستان من این فایل رو از یک برنامه ای که همین کارو میکرد(تغییر در رجیستری و بعد رفرش کل ویندوز) برداشتم
بینید شاید بدردتون بخوره:بوس:

این برنامه اسمش اینه Rebuilds the Icon Cache
در اصل کیچ آیکونها رو رفرش میکنه و کل رجیستری رو رفرش نمیکنه...

فکر کنم برای اینکار باید از F5 ویندوز کمک گرفت ، یعنی بعد از زدن دکمه ، دکمه F5 ویندوز هم زده بشه که من بلد نیستم ، اگه دوستان میدونن لطفا راهنمایی کنن...

ممنون

Heidari66
جمعه 05 شهریور 1389, 01:42 صبح
من اینو پیدا کردم فکر کنم جواب بده ، دستکتاپ رو رفرش میکنه...

ali190
جمعه 05 شهریور 1389, 10:37 صبح
سلام
ممنون از نمونه ای که قرار دادی
نمیدونم رفرش میکنه یا نه ولی خواسته من رو برآوده نکرد
من کدی میخوام که بعد از ایجاد تغییر در رجیستری سیستم این تغییر در کلیه فولدرها اعمال بشه و کاربر تغییر بوجود آمده رو لمس کنه
مثلاً من از طریق کدهای vb یک تغییر در رجیستری ایجاد میکنم (مثلاً نمایش فولدرهای مخفی سیستم از طریق folder option ، منتها از طریق رجیستری) میخوام که بعد از اعمال تغییر این ، این تغییر سریعاً اعمال بشه نه اینکه یک بار پنجره رو بسته و دوباره باز کنم
ممنون میشم اگر کنید

Heidari66
جمعه 05 شهریور 1389, 12:32 عصر
وقتی شما تو هر صفحه ای باشید و دکمه F5 رو بزنید فقط اون صفحه رفرش میشه و کل ویندوز رفرش نمیشه
این برنامه هم در حالت پیش فرض فقط دسکتاپ رو رفرش میکنه
در اصل تو کل ویندوز تاثیر میزاره

فکر کنم باید از تابع FindWindow و SetFocus استفاده کنیم و پنجره موردنظر پیدا کنه و از این کد استفاده کنه و رفرش کنه...

ali190
جمعه 05 شهریور 1389, 13:46 عصر
وقتی شما تو هر صفحه ای باشید و دکمه F5 رو بزنید فقط اون صفحه رفرش میشه و کل ویندوز رفرش نمیشه
این برنامه هم در حالت پیش فرض فقط دسکتاپ رو رفرش میکنه
در اصل تو کل ویندوز تاثیر میزاره

فکر کنم باید از تابع FindWindow و SetFocus استفاده کنیم و پنجره موردنظر پیدا کنه و از این کد استفاده کنه و رفرش کنه...
ممن.ن از توضیحاتت
من میخوام مسیر app.path برام رفرش بشه
ممنون میشم این کار رو برام انجام بدید

Heidari66
شنبه 06 شهریور 1389, 12:54 عصر
شرمنده روش کار کردم ولی نشد
از دوستان حرفه ای ببین کسی میتونه انجام بده

ali190
دوشنبه 15 شهریور 1389, 16:44 عصر
باسلام و عرض خسته نباشید
میخواستم سئوال کنم پدیده رفرش کردن بعد از اعمال تغییرات رجیستری رو نمیشه هیچ جوری(از طریق توابع api و...) اعمال نمود؟
ممنون

iltsaetsi
شنبه 20 شهریور 1389, 01:38 صبح
سلام .
جسارت نباشه ولی به نظر من روش هیچکدوم از دوستان اصولی نیست چون اولّا اگه بخوای به هر پنجره
یه پیغام بفرستی باید همش هندل بگیری . ثانیا اگه کاربر یه پوشه رو باز کرده باشه وقتی explorer رو میبندی پوشه هم بسته میشه .
برای این کار بعد از اینکه کد تغییر رجیستری رو نوشتی کد زیر رو اضافه کن .

Shell "gpupdate /force", vbHide

وقتی این کد اجرا میشه مثل اینه که سیستم ریست شده .

ali190
شنبه 20 شهریور 1389, 09:41 صبح
سلام iltsaetsi (http://barnamenevis.org/forum/member.php?u=145612) عزیز
من کدتون رو امتحان رکدم
متاسفانه جواب نگرفتم و عملیات رفرش انجام نشد.

ali190
یک شنبه 21 شهریور 1389, 00:00 صبح
سلام
بچه ها من تو گوگل nبار با nروش مختلف در این مورد سرچ کردم
کد رفرش زمین و زمان اومد الا اون چیزی که من میخواستم
سایت خارجی مرجع سراغ ندارین که من مشکلم رو حل کنم؟

iltsaetsi
یک شنبه 21 شهریور 1389, 02:03 صبح
اگه کد رو داخل تایمر میذاری باید interval تایمر بالای 6 ثانیه باشه چون حداقل 6 ثانیه طول میکشه تا عملیات
رفرش انجام بشه .