PDA

View Full Version : مبتدی: رجیستری در VB6



amirreza619
دوشنبه 18 دی 1391, 16:21 عصر
سلام !
بببخشین چجوری میتونم بدون استفاده از API کار های زیر رو با رجیستری بکنم ؟! ( چون توی کار با API واقعا خیلی جاها به مشکل میخورم ! )
افزودن کلید و مقدار
حذف کلید
ویرایش کلید ( که فک کنم بشه با کار " افزودن " این کارو کرد ! )
بدست آوردن مقدار یک کلید .
بدست آوردن همه مقادیر موجود در یک کلید !
ترجیحا از moudel هم استفاده نشه :لبخند::لبخند::لبخند:

Mr'Jamshidy
دوشنبه 18 دی 1391, 16:40 عصر
سلام

افزودن کلید بدون API میشه (ولی سخت تره)
حذف کلید فکر میکنم بشه
ویرایش کلید هم میشه
بدست آوردن مقدار نمیشه
بدست آوردن همه مقادیر که دیگه اصلا حرفشو نزن

بدون ماژول هم که میشه یک پروژه بهم ریخته

شما اگر واقعا بدون API می خوای این کار رو انجام بدی که بیخیال بشی بهتره

Hashemvp
دوشنبه 18 دی 1391, 19:00 عصر
دوست عزیز همچنین چیزی غیر ممکنه

با زبان های دیگه مثل C , C++ میشه ولی با زبان های سطح بالا مثل ویبی امکان نداره.

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

کامپونت هم هست ک اینکارا رو راحت بتونی انجام بدی بگردی پیدا میشه:D

موفق باشی

meys34
دوشنبه 18 دی 1391, 19:23 عصر
منبع http://support.microsoft.com/kb/244675 : نرید اینجا کد ها رو کپی پیست کنید بگید نشدها... این کد ها برای VBS هست که بسیار مشابه کد های VB6هست... به طوری که اگه به جای WSHShell.Popup بنویسی Msgbox همه چیز درست میشه...



یرای همه موارد این قسمت مشترکه... منتها خط 2 عوض میشه به ترتیبی که در زیر توضیح دادم...
Dim objRegistry As Object, Key As String
Set objRegistry = CreateObject("Wscript.shell")
Key = objRegistry.RegRead(RegPath)

برای ایجاد کلید و یا مقدار:
objRegistry.RegWrite RegPath, RegValue, "REG_SZ"

با این تفاوت که برای کلید باید آخر RegPath کاراکتر "\" وجود داشته باشه ولی برای مقدار نه....
مثال:


'برای کلید
objRegistry.RegWrite "HKCU\Software\VB and VBA Program Settings\BARNAMENEVIS.ORG\", "", "REG_SZ"
'برای مقدار
objRegistry.RegWrite "HKCU\Software\VB and VBA Program Settings\BARNAMENEVIS.ORG\USERs", "MEYSAM", "REG_SZ"



حذف کلید:
objRegistry.RegDelete RegPath
مثال:

'برای کلید
objRegistry.RegDelete "HKCU\Software\VB and VBA Program Settings\BARNAMENEVIS.ORG\"
'برای مقدار
objRegistry.RegDelete "HKCU\Software\VB and VBA Program Settings\BARNAMENEVIS.ORG\USERs"


ویرایش یک کلید:
objRegistry.RegWrite RegPath, RegValue, "REG_SZ"
مثال هم که بالاتر زده شده...


بدست آوردن مقدار یک کلید:
objRegistry.RegRead RegPath
مثال:
objRegistry.RegRead "HKCU\Software\VB and VBA Program Settings\BARNAMENEVIS.ORG\"
'برای کلید چون خواسته بودید باید آخرش کاراکتر "\" داشته باشه
'(هرچند معمولا مقدار کلید رو "" قرار میدهند
' ولی به این روش میشه بدست آورد...)


این قسمت هم به درد میخوره...

'HKEY_CURRENT_USER = HKCU
'HKEY_LOCAL_MACHINE = HKLM
'HKEY_CLASSES_ROOT = HKCR
'HKEY_USERS = HKEY_USERS
'HKEY_CURRENT_CONFIG = HKEY_CURRENT_CONFIG


'REG_SZ = String
'REG_DWORD = Integer
'REG_BINARY = Integer
'REG_EXPAND_SZ = String



در مورد "بدست آوردن همه مقادیر موجود در یک کلید !" هم به یه روش دیگه میشه که خیلی جالب نیست...( استفاده از WMI...(

amirreza619
دوشنبه 18 دی 1391, 20:25 عصر
OMG
چه آموزش کاملی گذاشتـــــــــــــی !!!!! BOW خیلی ممنونم :قلب:

Mr'Jamshidy
دوشنبه 18 دی 1391, 23:52 عصر
ای بابا باز که تو سر وی بی زدید
آخه دوست من هیچ زبونی نمیتونه وقتی سیستم عامل در حال اجراست بدون تابع های ویندوز تو رجیستری دست ببره

اطلاعات رجیستری تو فایل SAM (اگر اشتباه نکنم) ذخیره میشه و وقتی سیستم عامل میاد بالا اون فایل قفل میشه
حالا شما با اسمبلی هم نمیتونی تغییرش بدی

هیچ ربطی هم به زبون سطح بالا و پایین نداره

محسن واژدی
سه شنبه 19 دی 1391, 07:13 صبح
سلام علیکم
تاپیک زیر هم بررسی کنید:
http://barnamenevis.org/showthread.php?349918-%D8%AA%D8%B9%D8%B1%DB%8C%D9%81-%D9%85%D8%AA%D8%BA%DB%8C%D8%B1-(%D9%85%D8%AA%D8%BA%DB%8C%D8%B1%DB%8C-%D8%AF%D8%B1-%D8%B1%DB%8C%D8%AC%D8%B3%D8%AA%D8%B1%DB%8C)-%D8%AF%D8%B1-%D9%88%DB%8C%DA%98%D9%88%D8%A7%D9%84-%D8%A8%DB%8C%D8%B3%DB%8C%DA%A9

یا پست زیر:
http://barnamenevis.org/showthread.php?307088-%D9%85%D9%88%D8%AC%D9%88%D8%AF-%D8%A8%D9%88%D8%AF%D9%86-%DA%A9%D9%84%D8%A7%D8%B3-clsregistry-%D8%AF%D8%B1-vb6&p=1347843&viewfull=1#post1347843

موفق باشید
موفق باشید

Hashemvp
سه شنبه 19 دی 1391, 12:23 عصر
ای بابا باز که تو سر وی بی زدید
آخه دوست من هیچ زبونی نمیتونه وقتی سیستم عامل در حال اجراست بدون تابع های ویندوز تو رجیستری دست ببره

اطلاعات رجیستری تو فایل SAM (اگر اشتباه نکنم) ذخیره میشه و وقتی سیستم عامل میاد بالا اون فایل قفل میشه
حالا شما با اسمبلی هم نمیتونی تغییرش بدی

هیچ ربطی هم به زبون سطح بالا و پایین نداره

دوست عزیز ربط داره فایل SAM برای ذخیره پسورد ویندوزه و نام های کاربری هست

بعد اینکه شما اگه ی بار هم انتی ویروس کسپر اسکای رو نصب کنی متوجه میشه ک با زبان های سطح پایین میتونی کاری کنی ک ویندوز ک هیچی پدر ویندوز هم باشه و از اون فایل حفاظت کنه میشه درست کاریش کرد

توی زبان های سطح پایین دسترسی مستقیم ب بایت بایت هارد دیسک رو داری پس هر کاری بخوای میتونی بکنی

موفق باشی

amirreza619
چهارشنبه 04 بهمن 1391, 19:59 عصر
داداش همه چیز حل شد ولی ...
چجوری میتونم مثلا چک کنم که یه کلید وجود داره یا نه ؟! چون با regread که میرم ، خطای key path رو میاره ! ( البته با ارور هندلر درست کردم ولی میخام تو یه function بزارمش و اینجوری سرعت برنامه خیلی خیلی پایین میاد :( )

مرسی !

amirreza619
چهارشنبه 04 بهمن 1391, 22:04 عصر
:| درستش کردم :گیج:

Function RegKeyExists(KeyPath) As Boolean
On Error GoTo ErrorGandlerKE

Set objRegistry = CreateObject("Wscript.shell")
objRegistry.RegReaD (KeyPath)
RegKeyExists = True
Exit Function
ErrorGandlerKE:
If Err.Number <> 0 Then
RegKeyExists = False
End If
End Function

Mr'Jamshidy
پنج شنبه 05 بهمن 1391, 10:27 صبح
:| درستش کردم :گیج:

Function RegKeyExists(KeyPath) As Boolean
On Error GoTo ErrorGandlerKE

Set objRegistry = CreateObject("Wscript.shell")
objRegistry.RegReaD (KeyPath)
RegKeyExists = True
Exit Function
ErrorGandlerKE:
If Err.Number <> 0 Then
RegKeyExists = False
End If
End Function

این روش شما همون API هست با این تفاوت که شما اومدی و WScript رو واسطه کردی
اگر با تابع بین شما و رجیستری یک واسطه وجود داشته باشه
اینطوری میشه 2 تا واسطه و به همون نسبت سرعت کمتر میشه

موفق باشید

AbbasVB
پنج شنبه 05 بهمن 1391, 10:36 صبح
سلام من هم چند باری از همین روش اسکریپت استفاده کردم ولی بعضی مواقع رشته ها رو کم و زیاد بر می گردوند این روش خیلی قالب اعتماد نیست

m2011kh
پنج شنبه 05 بهمن 1391, 17:29 عصر
اخه کار با API که راحته چرا نمیری همون API رو یاد بگیری با چند دیقه مطالعه میتونی یاد بگیری.
Thanks
MMD

حمید محمودی
پنج شنبه 05 بهمن 1391, 20:03 عصر
سلام،

همونطوری که در پست های قبل بیان شد، اینکار شما لقمه رو دور سرتون چرخوندن هست؛ برنامه شما هرچقدر هم بدون واسطه اجرا بشه، باز هم محدود به ویندوز و توابع اون هست؛
روش استفاده از WSH هم توصیه نمیشه؛ و محدودیت داره. به دلیل اینکه، اولا دیده شده بعضی انتی ویروس ها که با این روش مشکل دارن، ثانیا اگر با برنامه هایی که میان فایل اجرایی رو در زمان اجرا بررسی میکنند نگاه کنید، میبنید که با استفاده از WSH دی ال ال ها و توابعی صدا زده میشند که نشون دهنده همون ارتباط این اجزا و محدود بودن به ویندوز هست. ضمن اینکه، اگر با فرض فعال بودن Software Restriction Policies introduced نگاه کنیم، برنامه ای که از اون WSH استفاده کرده یا اجرا نمیشه، یا گیر میکنه و خطا میده!


بببخشین چجوری میتونم بدون استفاده از API کار های زیر رو با رجیستری بکنم ؟! ( چون توی کار با API واقعا خیلی جاها به مشکل میخورم ! )امکانش هست بگین دلیل اینکار چیه؟ تا بتونیم بهتر راهنمایی تون کنیم.

helane
چهارشنبه 22 آبان 1392, 10:58 صبح
دوستان من میخوام سطل آشغال حذف كنم چیكار كنم Recycle Bin سوسرس میخوام