تور لحظه آخری
امروز : سه شنبه ، 12 تیر 1403    احادیث و روایات:  امام علی (ع):هیچ ثروتی چون عقل و هیچ فقری چون جهل و هیچ میراثی چون ادب و هیچ پشتیبانی چون مشورت نخ...
سرگرمی سبک زندگی سینما و تلویزیون فرهنگ و هنر پزشکی و سلامت اجتماع و خانواده تصویری دین و اندیشه ورزش اقتصادی سیاسی حوادث علم و فناوری سایتهای دانلود گوناگون شرکت ها

تبلیغات

تبلیغات متنی

اتاق فرار

خرید ووچر پرفکت مانی

تریدینگ ویو

کاشت ابرو

لمینت دندان

ونداد کولر

صرافی ارکی چنج

صرافی rkchange

دانلود سریال سووشون

دانلود فیلم

ناب مووی

رسانه حرف تو - مقایسه و اشتراک تجربه خرید

سرور اختصاصی ایران

تور دبی

دزدگیر منزل

تشریفات روناک

اجاره سند در شیراز

قیمت فنس

armanekasbokar

armanetejarat

صندوق تضمین

پیچ و مهره

طراحی کاتالوگ فوری

دانلود کتاب صوتی

تعمیرات مک بوک

Future Innovate Tech

آموزشگاه آرایشگری مردانه شفیع رسالت

پی جو مشاغل برتر شیراز

قیمت فرش

آموزش کیک پزی در تهران

لوله بازکنی تهران

کاشت پای مصنوعی

میز جلو مبلی

پراپ رابین سود

هتل 5 ستاره شیراز

آراد برندینگ

رنگ استخری

سایبان ماشین

قالیشویی در تهران

مبل استیل

بهترین وکیل تهران

شرکت حسابداری

نظرسنجی انتخابات 1403

استعداد تحلیلی

کی شاپ

خرید دانه قهوه

دانلود رمان

وکیل کرج

آمپول بیوتین بپانتین

پرس برک

بهترین پکیج کنکور

خرید تیشرت مردانه

خرید نشادر

خرید یخچال خارجی

وکیل تبریز

اجاره سند

وام لوازم خانگی

نتایج انتخابات ریاست جمهوری

خرید سی پی ارزان

خرید ابزار دقیق

بهترین جراح بینی خانم

 






آمار وبسایت

 تعداد کل بازدیدها : 1803484298




هواشناسی

نرخ طلا سکه و  ارز

قیمت خودرو

فال حافظ

تعبیر خواب

فال انبیاء

متن قرآن



اضافه به علاقمنديها ارسال اين مطلب به دوستان آرشيو تمام مطالب
archive  refresh

تغییر در رجیستری و استفاده از Com


واضح آرشیو وب فارسی:سایت ریسک: View Full Version : تغییر در رجیستری و استفاده از Com cpplover06-01-2008, 12:06 AMسلام به خدایان cpp در این تالار گفتگو........ چه کسی میتونه منو راهنمایی بده؟ میخواستم بدونم چطور میشه یک کلید از رجیستری رو با visual c++6 دستکاری کرد؟ دستوراتش رو میخواستم؟؟ cpplover07-01-2008, 12:03 AMخیلی وقتها بعد از نصب ویندوز لازمه که یه سری تغییراتی رو خدمون به صورت دستی در رجیستری بدیم مثلا مثل عدم نمایش recent document افزایش پهنای باند و... حالا من میخوام برنامه ای بنویسم که این کارا رو واسه خودم انجام بده منتها دنبال دستوراتی در visual c++ هستم که باهاش بتونم این کارها رو بکنم ممکنه کسی این دستورات رو بگه؟ و اما سوال دوم : خیلی دوست دارم بدونم در همین زبان مثلا چطور میشه عکس دسکتاپ رو عوض کرد و اصلا در ویندوز این کار چطوری ممکنه ؟ از دوستان عزیزی مثل m3hrz4d و someone تقاضای کمک دارم ؟؟؟ m3hrz4d07-01-2008, 02:38 AMیک راه تغییر در رجیستری استفاده از ای پی آی ویندوز هست ولی اگه شما از MFC یا ATL استفاده میکنین میتونین از کلاس CRegKey استفاده کنین(برای استفاده در MFC فایل atlbase.h رو باید include# کنین). اگه با رجیستری آشنا باشین کار کردن باش راحته.با متد Open ش و دادن یک Parent Key مثل HKEY_LOCAL_MACHINE و دادن آدرس یک Key مثل "SoftwareMicrosoftCurrentVersionRun" یک Key رو به اصطلاح باز میکنین و میتونین با متد های مختلفی که داره Value های مورد نظر رو بخونین, عوض کنین یا ایجاد کنین و در آخر هم با متد Close اون Key رو میبندین: !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! اگه زیاد با رجسیتری آشنا نیستن بهتره اول با خود رجیستری کار کنین . اونوقت خیلی راحت میتونین با برنامه نویسی هم رجیستری رو تغییر بدین... -- چیزهایی مثل تغییر Background ویندوز تا تنظیمات Desktop و ... هم همه توی رجیستری ذخیره میشه و برای تغییرش باید رجیستری رو تغییر داد. someone08-01-2008, 09:46 PMسلام. ممنون از توضیحات دوستم m3hrz4d اما لازم دیدم چند نکته رو یادآوری کنم. در Visual C شما نیاز به Invoke کردن مستقیم خیلی از API ها ندارین و برای بسیاری از اونها یک wrapper نوشته شده. اینکه دوستمون گفتن از ATL استفاده کنین ، روش جالبی هست اما من به شخصه توصیه نمیکنم.(بنا به دلایلی) در هنگام نصب VC مجموعه ی نسبتا کوچکی (همراه با VS) تحت عنوان Platform SDK روی سیستم شما نصب میشه که شامل یک سری فایل h , lib هست و این مجموعه به شما کمک میکنه تا برای ویندوز راحت تر بتونین برنامه بنویسین. مثلا RegCreateKeyEx یک API برای ایجاد و یا بازکردن یک فایل Reg هست و شما در یک پروژه MFC و یا Win32 میتونین از اون استفاده کنین. البته این SDK شامل توابعی که پرکاربرد هستن میشه و برای در اختیار داشتن تمام توابع ویندوز (البته نه دقیقا همه ی اونها) کافیه Windows SDK رو از سایت Microsoft دانلود کنین. (چیزی حدود 400MB) اما در مورد تعویض عکس Desktop با نظر دوستمون موافق نیستم. دلیلش هم روشنه. چنین تغییراتی باید در لحظه باشه اما وقتی شما Reg رو تغییر میدین برای مشاهده تغییرات روی سیستم باید یک بار سیستم مجددا راه اندازی بشه. ( یا explore دوباره اجرا بشه) در اینجا بحث کمی عوض میشه. نمیدونم با COM آشنا هستین یا نه. COM یک معماری نرم افزاری برای به اشتراک گذاشتن یک مولفه بدون وابستگی به Platform هست. به عبارتی دیگه تکنولوژی COM به شما این اجازه رو میده از مجموعه ای که نوشتین در سایر زبان ها و مستقل از OS استفاده کنین. برای دستکاری و کار کردن به اجزای Desktop واسط و به عبارت بهتر Interface ی وجود داره با نام IActiveDesktop که مجموعه توابعی برای این کار رو در بر گرفته از جمله SetWallpaper . برای استفاده از این Interface باید نمونه از اون داشته باشین که این کار با استفاده از CoCreateInstance انجام میشه و ... با استفاده از این Object ها شما وارد دنیای جدیدتری میشین و احتمالا دیدتون راجع به برنامه نویسی عوض میشه. نمیدونم مشکلتون حل شده یا نه. اگه مایل بودین باهم بحث رو دنبال میکنیم. راستی به عنوان یک دوست پیشنهاد میکنم در کنار VS تون حتما از MSDN استفاده کنین که بدون اون برنامه نویسی برای ویندوز تقریبا غیرممکن هست. موفق باشین. cpplover09-01-2008, 07:59 PMسلام مجدد در مورد رجیستری بعدأ بیشتر صحبت خواهیم کرد اما الان میخواستم در مورد دسکتاپ بحث کنم ببینید من بیشتر موضوعات رو در msdn مطالعه کردم و اتفاقأ مطالب زیادی هم دستگیرم شد اما تو کد نویسی اشکالات اساسی دارم دوست دارم تا با هم بحث رو ادامه بدیم در مورد IActiveDesktop صحبت کردید من کلیه توابع اون رو دیدم مثل AddDesktop ، AddUrl و .... اما در مورد استفاده از اونا مشکل داشتم اگه لطفی کنید در مورد استفاده از اونا یک مثال کوچک (مثل عوض کردن عکس دسکتاپ) بیارید ممنون میشم . اون طوری که من متوجه شدم برای دستیابی به دسکتاپ فعال باید اشیا دسکتاپ فعال خلق بشن (CLSID_Active Desktop ) و به قول شما با استفاده ازتابع CoCreateInstance یک اشاره گر به اشیا IActiveDesktop بازیابی میشه ! اما خوب به خاطر تازه کار بودن میخوام در مورد انجام کار و حتی محل کپی کردن کد ها تو ضیح بدید چون خیلی از کدهایی رو هم که دیدم نتونستم اجرا کنم ضمنا header مربوطه (shlobj ) رو هم کپی کردم . با تشکر someone10-01-2008, 06:05 PMدوباره سلام! اول از همه باید توجه داشته باشین که تنها اضافه کردن shlobj.h کافی نیست. شما نیاز به اضافه کردن wininet.h هم دارین. wininet.h باید بعد از stdafx.h و قبل از shlobj.h باشه. مثلا به شکل زیر : !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! اما اگه باز در هنگام اجرا برنامه دوباره پیامی مبنی بر ناشناس بودن IActiveDesktop دارین، فایل stdafx.h رو باز کنین و wininet.h رو در محل زیر قرار بدین : !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! بعد از این مرحله یک اشاره گر به واسط IActiveDesktop ایجاد میکنیم. این تعریف رو در فایل h برنامه انجام می دیم و به اصطلاح یک عضو private از کلاس Dialog برنامه ایجاد میکنیم. !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! به تابع OnInitDialog رفته و کدهای زیر رو در اون قرار میدیم : !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! با توجه به اینکه شما MSDN رو در اختیار دارین من از توضیحات بیشتر خودداری میکنم اما اگه جایی نیاز به توضیح داشت ، خبر بدین. یک Button روی فرم اضافه کنین و کد زیر رو در اون وارد می کنیم : !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! الان اگه برنامه رو اجرا کنین با اجرا Button ، تصویر A که در درایو C قرار داره به عنوان Wallpaper انتخاب میشه و شما میتونین تغییرات رو مشاهده کنین. اگه از VC6.0 استفاده میکنین در MessageBox و SetWallpaper نیازی به استفاده از T_ نیست. باز هم تاکید میکنم اگه جایی از کد نیاز به توضیح داشت ، خبر بدین. موفق باشین. cpplover11-01-2008, 10:13 AMسلام چیزهایی که نوشتید خیلی عالی جواب دادند فقط اگر ممکنه بگید در stdafx.h مربوط به یک برنامه دیالوگ دقیقا چه اتفاقی میفته و فرضأ شما براساس چی اون کد رو در اون خط ها جاسازی کردید ؟ ولطفا توضیح مختصری در مورد کد های داخل OnInitDialog بدید؟ با تشکر someone11-01-2008, 02:06 PMدوباره سلام! فایل stdafx.h در بردارنده تمامی Header ها و تعریف هایی هست که برای یک پروژه ی MFC لازمه. فرضأ شما براساس چی اون کد رو در اون خط ها جاسازی کردید ؟ راستش من در این برنامه من" فرضا " عمل نکردم بلکه عملکرد من "قطعا" بوده!!! توضیحش کمی مفصله. در MSDN فایلی که برای IAvtiveDesktop معرفی شده shlobj.h هست. این فایل شامل تعریف های لازم برای اجرای متودهای مربوط به COM هست. وقتی شما این فایل به به برنامه اضافه میکنین و باز مولفه ی شما ناشناخته باقی میمونه باید دست به کار بشین و در فایل shlobj.h به دنبال تعریف ها و نحوه ی استفاده از اونها بگردین. برای این کار من فایل shlobj.h رو باز کردم و به دنبال ماکروهای شرطی در این فایل h گشتم. به قسمت زیر رسیدم : !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! کد بالا بخشی از فایل shlobj.h هست. همونطور که مشخصه اگه _WININET_ تعریف نشده کدهای بعد از ماکروی ifdef# اجرا نمیشن. علاوه بر این در توضیحات هم مشخصه که برای استفاده از structure های این واسط ما نیاز به استفاده از wininet.h داریم. ضمنا _WININET_ در wininet.h تعریف شده. خب! تا اینجا یک مرحله رو انجام دادیم! مرحله بعدی تشخیص محل قرار گرفتن wininet.h هست. چیزی که مشخصه و اول به نظر میاد اینه هست که wininet.h باید قبل از shlobj.h قرار بگیره. و بر همین اساس قاعدتا و با توجه به تعریفی از فایل stdafx.h شد باید بعد از اون و یا در داخل اون قرار بگیره. که این بر میگرده به نسخه ای از VS که شما استفاده میکنین. به عنوان مثال در VS2005 من این تغییر رو در فایل stdafx.h انجام دادم . نکته ای که وجود داره اینه : ترتیب قرار گرفتن Header ها در VC بسیار مهم و حیاتیه. مشکلی که با هم بررسیش کردیم از اون دسته مشکلاتی هست که واقعا برنامه نویس (کمی توسعه دهنده) رو به چالش میکشه. چون اصلا reference مناسبی براش وجود نداره. اما در مورد کدهایی که در OnInitDialog قرار گرفتن. 1- CoInitialize قبل از اینکه ما بتونیم از مولفه های COM استفاده کنیم باید کتابخانه های COM رو حافظه بار کنیم. با این کار میتونیم ا استفاده از یک اشاره گر به تخصیص دهنده حافظه ، به متود های مورد نظر دسترسی داشته باشیم. 2- CoCreateInstance اول بهتره چند تا تعریف داشته باشیم. هر COM شامل تعدادی کلاس که CoClass نا میده میشن و تعدادی Interface هست که در برگیرنده متود های مورد نظر هستن وجود داره. برای استفاده از کلاس های COM باید اونها Register شده باشن. هر کلاس دارای یک کد 64bit ی و یا 128bit ی ، یکتا هست. به عبارت دیکه شما دو CoClass با کد های یکسان پیدا نمیکنین. وقتی شما یک COM رو در سیستم Register میکنین ، برای هر کلاس یک کد در Registery سیستم عامل ثبت میشه. همینطور در مورد Interface ها. تابع CoCreateInstance یک شئ از کلاس مورنظر ما روی سیستم محلی (local) ایجاد میکنه. آرگومان اول id کلاس مورد نظر رو میگیره. آرگومان دوم اشاره گری هست به واسط IUnknown که فعلا به اون کاری نداریم و به اون مقدار NULL میدیم. آرگومان سوم وضعیت object جدیدی که ایجاد شده رو مشخص میکنه. که مقدار اون رو CLSCTX_INPROC_SERVER در نظر گرفته شده. به این معنی که Object مورد نظر در یک Dll قرار داره که در همون چرخه اجرا میشه. آرگومان چهارم هم که id واسط مورد نظر هست. آرگومان پنجم هم آدرس اشاره گر مورد نظر ما به واسط IActiveDesktop هست. که اون رو به صورت Private تعریف کردیم. مقدار برگشتی این تابع از نوع HRESULT هست که یا S_OK در صورت موفقیت و یا S_FALSE در صورت پش اومدن مشکل هست. در پایان هم باید با استفاده از CoUninitialize حافظه ای که برای بار شدن کتابخانه ی COM در نظر گرفته شده آزاد میشه. امیدوارم توضیحات واضح باشن. اگه جایی مشکل داشت ، خبر بدین. موفق باشین. سایت ما را در گوگل محبوب کنید با کلیک روی دکمه ای که در سمت چپ این منو با عنوان +1 قرار داده شده شما به این سایت مهر تأیید میزنید و به دوستانتان در صفحه جستجوی گوگل دیدن این سایت را پیشنهاد میکنید که این امر خود باعث افزایش رتبه سایت در گوگل میشود




این صفحه را در گوگل محبوب کنید

[ارسال شده از: سایت ریسک]
[مشاهده در: www.ri3k.eu]
[تعداد بازديد از اين مطلب: 387]

bt

اضافه شدن مطلب/حذف مطلب




-


گوناگون

پربازدیدترینها
طراحی وب>


صفحه اول | تمام مطالب | RSS | ارتباط با ما
1390© تمامی حقوق این سایت متعلق به سایت واضح می باشد.
این سایت در ستاد ساماندهی وزارت فرهنگ و ارشاد اسلامی ثبت شده است و پیرو قوانین جمهوری اسلامی ایران می باشد. لطفا در صورت برخورد با مطالب و صفحات خلاف قوانین در سایت آن را به ما اطلاع دهید
پایگاه خبری واضح کاری از شرکت طراحی سایت اینتن