PDA

View Full Version : سوال: سوال در مورد Refresh کردن Registry



fire.angle
دوشنبه 18 بهمن 1389, 19:56 عصر
با سلام
من یه برنامه دارم که چیزی رو در رجیستری تغییر میده اما همون طور که میدونید برای اعمال تغییرات داده شده در رجیستری ، باید سیستم را Restart کرد ویا باید با استفاده از Task Manager یک بار برنامه Explorer.exe را باز و بسته نمود

حالا سوال من اینه که چطور باید کاری کنم که تغییرات انجام شده بلافاصله اعمال و اجرا بشوند ؟؟؟؟؟؟؟؟

آیا باید با کدنویسی باید برنامه Explorer.exe را یک بار باز و بسته کنم ؟؟؟؟ یا راه دیگری برای این کار وجود دارد ؟؟؟

لطفا راهنمایی کنید و کدهای مربوطه را هم بنویسید

ممنون

AliReza Vafakhah
دوشنبه 18 بهمن 1389, 20:05 عصر
دوست عزیز مگه چه تغییری می خواهید انجام دهید که باید سیستم رو Restart کنید و یا Explorer.exe را Terminate کنید؟؟؟

شما همون موقعه ای که مقداری را تغییر دهید و یا حذف و درج کنید می توانید از آن در مراحل بعدی برنامتون استفاده کنید.

در رجیستری هم وقتی تغییری اعمال کردید کلید F5 را بزنید تا Refresh بشه.

Felony
دوشنبه 18 بهمن 1389, 21:07 عصر
با سلام
من یه برنامه دارم که چیزی رو در رجیستری تغییر میده اما همون طور که میدونید برای اعمال تغییرات داده شده در رجیستری ، باید سیستم را Restart کرد ویا باید با استفاده از Task Manager یک بار برنامه Explorer.exe را باز و بسته نمود

حالا سوال من اینه که چطور باید کاری کنم که تغییرات انجام شده بلافاصله اعمال و اجرا بشوند ؟؟؟؟؟؟؟؟

آیا باید با کدنویسی باید برنامه Explorer.exe را یک بار باز و بسته کنم ؟؟؟؟ یا راه دیگری برای این کار وجود دارد ؟؟؟

لطفا راهنمایی کنید و کدهای مربوطه را هم بنویسید

ممنون

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

fire.angle
دوشنبه 18 بهمن 1389, 21:27 عصر
بله ، تغیری که من در رجیستری میدم تغییری است که مربوط به سیستم میشه مثلا میخوام عکس پس زمینه دسکتاپ رو تغییر بدم و یا هر چیز دیگه ای رو

اگر اینچنین تغیراتی رو بخوایم بدیم باید سیستم ریست بشه

حالا چیکار کنیم که بلافاصله تغییر اعمال بشه ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

nsco_nsco
دوشنبه 18 بهمن 1389, 21:45 عصر
سلام هیچ کاری نمی تونی بکنی غیر از بردن سیستم به حالت خروج از ویندوز یا همون فکر کنم لوگ اف هم بشه البته برای گفته خودم که میگم نمیشه دلیل دارم و اون اینه که اگر دقت کرده باشی ویروس نویسی همیشه پس از اون ناچار هستند ریست کنن یعنی فرمان ریست بدن تا جاگزین بشه چون برنامه که حال روی سیستم در حال اجرا هست از حافظه موقت پاک بشه و دوبار جاگزین بشه باید بگم تغییری که می دی همون ان انجام میشه اما برای جاگزینی مجدد نیاز به راه اندازی داره موفق باشی دوست من :قلب:

fire.angle
دوشنبه 18 بهمن 1389, 21:53 عصر
دوستان نظر دیگه ای ندارند

من توی Serche به یه مورد برخورد کردم ولی هنوز زیاد ازش سر در نمیارم یعنی این مورد برای مثلا عوض کردن تصویر پس زمینه جواب میده ولی
نمیدونم میشه ازش یرای بقیه تغیرات رجیستری استفاده کرد یه خیر
اون دستور اینه SystemParametersInfo

این لینک رو ببینید متوجه میشید


http://www.delphipages.com/forum/showthread.php?t=30308

لطفا راهنمایی کنید

AliReza Vafakhah
دوشنبه 18 بهمن 1389, 23:07 عصر
شرمنده من سوال را درست متوجه نشدم ، بله دوستان اگر راه حل هست بیان کنند.

من خودم هم خیلی دنبالش هستم

Mask
دوشنبه 18 بهمن 1389, 23:50 عصر
برای آپدیت رجیستری بدون ری استارت یا لوگ آف روشهای زیادی هست.
یکیش استفاده از کد زیر

SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0, 0);
دومیش :
تغییرات مورد نظر رو در یک فایل reg گزاشته و مقادیر زیر را در یک bat file ریخته و اجرایش کنید.

@echo off
echo.
echo Copy new file ...
regedit /s 1.reg
echo.
echo Registry updated.
echo Well done.
pause >nul

exit

fire.angle
سه شنبه 19 بهمن 1389, 02:01 صبح
سلام

دوست عزیز این روش SendMessage جواب نمیده

میتونید امتحان کنید

من یک برنامه میزارم که با استفاده از دستور SystemParametersInfo تغیررات اعمال شده در رجیستری رو بلافاصله اعمال و اجرا میکنه ولی این روش ظاهرا فقط برای تغییر عکس پس زمینه کاربرد داره
البته ظاهرا میشه از سایر پارامترهای این دستور برای سایر دستورات رجیستری استفاده کرد اما مطمین نیستم

بهر حال دوستان لطفا راهنمایی کنید تا به جواب درست برسیم که همیشه بشه ازش استفاده کرد

اینم برنامه تغییر عکس پس زمینه دسکتاپ بصورت بلافاصله

Felony
سه شنبه 19 بهمن 1389, 06:43 صبح
دوستان نظر دیگه ای ندارند

من توی Serche به یه مورد برخورد کردم ولی هنوز زیاد ازش سر در نمیارم یعنی این مورد برای مثلا عوض کردن تصویر پس زمینه جواب میده ولی
نمیدونم میشه ازش یرای بقیه تغیرات رجیستری استفاده کرد یه خیر
اون دستور اینه SystemParametersInfo

این لینک رو ببینید متوجه میشید


http://www.delphipages.com/forum/showthread.php?t=30308

لطفا راهنمایی کنید
بستگی به کاری که میخواین انجام بدید داره ، باید بررسی کنید ببینید براش پارامتری ارائه شده یا نه .

fire.angle
سه شنبه 19 بهمن 1389, 09:57 صبح
بستگی به کاری که میخواین انجام بدید داره ، باید بررسی کنید ببینید براش پارامتری ارائه شده یا نه .

حالا اگه پارامتری براش ارایه نشده بود چی کار کنیم ؟؟؟؟؟
اون SendMessage هم که جواب نداد. اونو چی کار کنیم؟؟؟؟؟

loo30fer
سه شنبه 19 بهمن 1389, 11:12 صبح
دوست عزیز یک راه حل براتون دارم شما وقتی به برنامتون میدین که عکس دکستاپ رو عوض کنه از My Computer , Tools , Folder Options و وارد تب View بشین و Restore Defaults رو بزنید میبینید سریع کلید رجیستریتون اعمال و پس زمینه عوض میشه و این راه برای خیلی از کلیدهای رجیستری جواب میده ولی یک مشکلی که هست حالا باید برین دنبال نحوه صدا زدن ویندوز که اینکار مستقیم براتون انجام بده

fire.angle
سه شنبه 19 بهمن 1389, 11:30 صبح
احتمالا این کارو با همون Send Message انجام میده ولی چجوری نمیدونم


دوست عزیز یک راه حل براتون دارم شما وقتی به برنامتون میدین که عکس دکستاپ رو عوض کنه از My Computer , Tools , Folder Options و وارد تب View بشین و Restore Defaults رو بزنید میبینید سریع کلید رجیستریتون اعمال و پس زمینه عوض میشه

این روش رو هم تست کردم ولی جواب نداد . میتونید امتحان کنید


لطفا دوستان راهنمایی کنند

loo30fer
سه شنبه 19 بهمن 1389, 11:39 صبح
من که نمونه شما رو دانلود کردم و ار همین روشم استفاده کردم جواب داد :متفکر:

fire.angle
سه شنبه 19 بهمن 1389, 11:52 صبح
من که نمونه شما رو دانلود کردم و ار همین روشم استفاده کردم جواب داد :متفکر:

اون برنامه ای که گذاشتم اصلا احتیاجی نداره که شما برید و از Folder Option\Restor default رو انتخاب کنید

ولی من میخوام با هر تغییری ، رجیستری Refresh بشه و سریعا اون تغییر بدون ریست کردن اعمال بشه

دوستان لطفا راهنمایی کنید

Mask
سه شنبه 19 بهمن 1389, 19:19 عصر
شما بفرمایید چه تغییری میخواهید در رجیستری انجام بدید تا روش اعمال بدون ری استارت رو براتون بشه پیاده سازی کرد؟

fire.angle
سه شنبه 19 بهمن 1389, 21:14 عصر
تغییر خاصی مد نظرم نیست

من میخوام تغییرات متعددی رو انجام بدم برای همین به روشی نیاز دارم مه بتونه با هر تغییری در رجیستری ، رجیستری رو Refresh و بلافاصله تغییرات رو اعمال کنه
حتما باید یه روش باشه ..........

lord_viper
چهارشنبه 20 بهمن 1389, 09:33 صبح
[QUOTE=Delphi-7;1209712]برای آپدیت رجیستری بدون ری استارت یا لوگ آف روشهای زیادی هست.
یکیش استفاده از کد زیر

SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0, 0);

این روش صحیح هست من تو چندین برنامه از این روش استفاده کردم

fire.angle
چهارشنبه 20 بهمن 1389, 10:32 صبح
سلام

منم استفاده کردم نشد

یعنی تغییرات داده شده رو بلافاصله اعمال نمیکنه مثل تغییر عکس پس زمینه

میگی نه نگاه کن .....

در پست بعدی یه نمونه برنامه شو گذاشتم . میتونی خودت ببینی

fire.angle
چهارشنبه 20 بهمن 1389, 10:49 صبح
فقط دقت داشته باش قسمتی که مربوط به مسیر عکس هست رو باید برای کامپیوتر خودت تغییر بدی
عکس باید با فرمت BMP باشه
و من 3 دستور دیگه رو هم کتمنت کردم میتونی هر کدوم را جداگانه امتحان کنی
که فقط دستور SystemParametersInfo جواب میده

دوستان لطفا راهنمایی کنید......

lord_viper
چهارشنبه 20 بهمن 1389, 12:24 عصر
قضیه تعویض کردن بک گراند ربطی به رفرش رجیستری نداره بلکه خود سیستم باید این کارو انجام بده که اونم میتونین با تابع زیر انجام بدین



SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, PChar('c:\picname.bmp'), SPIF_SENDWININICHANGE);

fire.angle
چهارشنبه 20 بهمن 1389, 12:33 عصر
برنامه رو دانلود نکردید ؟؟؟؟؟؟؟؟

من خودم این دستور رو بلدم و در برنامه هم ازش استفاده کردم اگه دیده باشید

مسیله به صورت کلی نگاه کنید ... برای هر تغییری که نمیشه از این دستور استفاده کرد

lord_viper
چهارشنبه 20 بهمن 1389, 17:22 عصر
برنامه رو دانلود نکردید ؟؟؟؟؟؟؟؟

من خودم این دستور رو بلدم و در برنامه هم ازش استفاده کردم اگه دیده باشید

مسیله به صورت کلی نگاه کنید ... برای هر تغییری که نمیشه از این دستور استفاده کرد

مگه قرار بود بشه ؟


The SystemParametersInfo function queries or sets systemwide parameters. This function can also update the user profile while setting a parameter.

BOOL SystemParametersInfo(

UINT uiAction, // system parameter to query or set
UINT uiParam, // depends on action to be taken
PVOID pvParam, // depends on action to be taken
UINT fWinIni // user profile update flag
);

شما اینجا برای اعمال تنظیمات کاربری که همون تغییر بک گراند ویندوز هست دارین ازش استفاده میکنید نه رفرش رجیستری

این هم اطلاعات MSDN



An application sends the WM_WININICHANGE message to all top-level windows after making a change to the WIN.INI file. The SystemParametersInfo function sends this message after an application uses the function to change a setting in WIN.INI.

Note The WM_WININICHANGE message is provided only for compatibility with earlier versions of the system. Applications should use the WM_SETTINGCHANGE message.

میبینین که اون تابع هم از این پیغام استفاده میکنه
GoodLuck