PDA

View Full Version : شمردن تعداد کلیدها در رجیستری



A_Salimi
چهارشنبه 07 فروردین 1387, 13:51 عصر
سلام

من در رجیستری شاخه ای رو ایجاد کردم و در داخل اون شاخه هم چند تا کلید رو ایجاد کردم از اونجایی که در برنامه بدلایلی نیاز دارم تا تعداد زیر کلیدها رو بشمرم سعی میکنم تا از ATL (تابع EnumKey) به جای SDK (تابع RegEnumKeyEx ) استفاده کنم .
من تابع رو به صورت زیر مقداردهی میکنم :




#define MAX_KEY_LENGTH 255
.
.
.

DWORD dwWord;
TCHAR achKey[MAX_KEY_LENGTH];
int i=0;
while((m_cKey.EnumKey(i,achKey,&dwWord,NULL))!=ERROR_NO_MORE_ITEMS)
i++;



در msdn اینطوری اومده :


To enumerate the subkeys, call CRegKey::EnumKey with an index of zero. Increment the index value and repeat until the method returns ERROR_NO_MORE_ITEMS.

خوب من هم دقیقا همین کار رو میکنم اما نمیدونم چرا تابع همیشه عدد 259 رو برمیگردونه ؟
لطفا راهنمایی در مورد شمردن کلیدها بدید و بگید باید دقیقا چکار کنم ؟ ضمنا من کلیدها رو در سازنده کلاس create میکنم و در دفعات بعدی اجرا این تابع اونها رو باز میکنه و در مخرب هم کلید ها رو می بندم .

با تشکر

Nima_NF
چهارشنبه 07 فروردین 1387, 15:59 عصر
پارامتر سوم تابع EnumKey علاوه بر این که خروجی هست، ورودی نیز می باشد یعنی تعداد کارکتر های مجاز ورودی رشته شما در آرگومان دوم به TCHAR باید در آن قرار داشته باشد، پس باید مقدار اولیه داشته باشد:



DWORD dwWord = MAX_KEY_LENGTH;
// ...

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

Sadat_IT
چهارشنبه 07 فروردین 1387, 17:20 عصر
سلام
با عرض پوزش از طرح سوالم در این قسمت خواستم بدونم ذکر مطالب سایت در وبلاگها و محلهای دیگر اشکالی از نظر نویسندگان و یا اشکالی شرعی دارد؟یا خیر؟:گیج:
با تشکر

Nima_NF
چهارشنبه 07 فروردین 1387, 20:00 عصر
سلام
با عرض پوزش از طرح سوالم در این قسمت خواستم بدونم ذکر مطالب سایت در وبلاگها و محلهای دیگر اشکالی از نظر نویسندگان و یا اشکالی شرعی دارد؟یا خیر؟:گیج:
با تشکر
جای درست این سوال اینجا نبود و باید در بخش پیشنهادات و نظرات مطرح می شد ،

در هر حال بستگی به مطلب و موضوع دارد، در صورتی که نویسنده راضی باشد با ذکر منبع و نام نویسنده بلا مانع است.

Sadat_IT
چهارشنبه 07 فروردین 1387, 20:08 عصر
باز هم پوزش از اینکه این مطلب رو اینجا مطرح کردم:خجالت:.
میدونستم جاش اینجا نیست اما از طرفی هم نمیدونستم جاش کجاست:گریه:. درهرحال ممنون:لبخندساده:

A_Salimi
چهارشنبه 07 فروردین 1387, 21:04 عصر
اگه بیشتر توضیح بدید ممنون میشم :
من مجبور شدم در مثال پست قبل از حلقه while استفاده کنم چون که برای استفاده از حلقه For نمی دونستم که در مقدار شرط چه چیزی رو قرار بدم .
در msdn یک مقدار به نام cSubKeys که نوعش DWORD و یکبار در تابع RegQueryInfoKey استفاده شده را در یک حلقه برای پایان دادن به آن استفاده کرده است . می خواستم بدونم که این مقدار دقیقا چیه ؟ و اگه ممکنه با یک مثال توضیح بدید . با تشکر

Nima_NF
چهارشنبه 07 فروردین 1387, 23:06 عصر
یک راه استفاده از RegQueryInfoKey و سپس بدست آوردن تعداد subkey های کلید مورد نظر شما است یعنی index آخرین زیر کلید، که همانطوری که خودتان می دانید در MSDN مثال آن وجود دارد و نیازی به تکرار آن نیست.

روش دیگر هم همان حلقه while هست که انجام دادید ، ابتدا کاری را که در پست قبل گفتم انجام دهید و توجه داشته باشید که در هر مرحله از حلقه که ERROR_SUCCESS می گیرید نام یک subkey را در رشته خود دریافت می کنید که باید آن ها را در جای دیگری کپی کنید و یا مستقیم نمایش دهید که این کار را نکردید.

اگر هنوز هم جواب نمی دهد ، خودتان باید بررسی کنید که رجیستری باز شده درست انجام شده باشد.