PDA

View Full Version : مشکل با رجیستری



Mohsen0025
شنبه 11 آبان 1392, 17:33 عصر
با سلام
من تو رجستری یه کلید ساختم و 25 تا زیر مجموعه که هر کدوم از این مجموعه ها 14 تا داده از نوع String درونشون هست ساختم حالا میخوام اطلاعاتشون دریافت کنم چه طوری؟
اینم بگم نمیخوام تکی تکی انجام بدم اگه اینطوری بکنم حساب کنید که 25 تا کلید که هر کدوم 14 تا string داره باید 350 تا خط بنویسم میخوام به صورت جالبی باشه،
مثل این که بخوای چند تا لینک بزاری یا فایل لود کنی دیگه نمیخوای دم به دقه از تابع ShellExecute استفاده کنی و میتونی از کد زیر برای راحتی استفاده کرد:
Public Function Link(ByVal URL As String)
ShellExecute 0&, "open", URL, vbNullString, vbNullString, 5
End Function

ضمناً اینا chkbox هستن.
خودم نوشتم اما نمیدونم chek باکسا رو چکار کنم!!!!!!! :اشتباه:
Public Function GetDataValuePrint(ByVal sPaths As String, K As CheckBox)
چک باکسا همه ndex دارن chk(0) و chk(1) تا chk(11)
تو کد بالا k لود نمیکنه چیزی رو ((((اشتباهه)))))
باید به این صورت باشه :

K(0).Value = GetString(HKEY_CURRENT_USER, "Software\TM\" & sPaths, "Farvardin")

:تشویق:

setroyd
شنبه 11 آبان 1392, 21:39 عصر
این نوع نوشتن شما کاملا گنگه اینطور که من متوجه شدم میخوای مثلا
112483

این کلید ها که قرمز نشون داده شده تو یک لیست باکس نشون داده بشه ویا مثلا با یک چک باکس یه چیزی تو این مایه ها ؟

Mohsen0025
یک شنبه 12 آبان 1392, 07:04 صبح
سلام
دوست عزیز من حدوداً 25 کلید دارم و داخل هر کلید 14 تا مقدار String هست من میخوام تو صفحه چاپی، این 25 تا کلید هر کدوم اسمی دارن مثلاً تهران،کرج،مشهد و.... که جلوش که ماه ها هستن قرار میگیره که با چک باکس تعیین شده:

فقط میخوام تو 25 تا کلید که اسامی هستن و تو فرم هم هستش فقط میخوام داده های این کلید ها به صورت یکجا لود بشه و

setroyd
یک شنبه 12 آبان 1392, 16:14 عصر
از این 2 api کمک بگیر

Private Declare Function RegEnumKeyEx Lib "advapi32.dll" Alias "RegEnumKeyExA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpName As String, lpcbName As Long, ByVal lpReserved As Long, ByVal lpClass As String, lpcbClass As Long, lpftLastWriteTime As Any) As Long
Private Declare Function RegEnumValue Lib "advapi32.dll" Alias "RegEnumValueA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpValueName As String, lpcbValueName As Long, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long

من یه برنامه کامل تو یه پروژه نوشتم که وقت جدا کردن کد رو ندارم یا از نوع بنویسم برات چون حوصله میخواد درسته شاید 10 دقیقه وقت بگیره چون خیلی وقته برنامه نویسی نکردم یکم کدهارو باید دنبالشون بگردم تو برنامه هایی که نوشتم واسه این حوصله ندارم ! , ولی شما میتونی با داشتن 2 تا حلقه تودرتو اول key هارو لود کنی و در بعدی value هارو به این صورت امکان پذیره وخیلی ساده . یه سرچ ساده بکن تو google و نحوه ی کار با اینهارو یاد بگیر اگر نتونستی pm بده برات توضیح میدم مو به مو همشو .

Mohsen0025
یک شنبه 12 آبان 1392, 19:21 عصر
اگه میشه یه نمونه بزاری ممنون میشم فدات بشم

vbhamed
دوشنبه 13 آبان 1392, 08:06 صبح
سلام
دوست عزيز، به نظر ميرسه داري داخل رجيستري يك بانك اطلاعاتي براي خودت ايجاد مي‌كني، براي اينكارا بهتره از همون بانك يا فايلهاي ini استفاده كني تا اگر ويندوزت هم خراب شد اطلاعات ذخيره شده خراب نشه

Mohsen0025
دوشنبه 13 آبان 1392, 08:31 صبح
سلام آره والا حالت یه بانکه نمیخوام از Data استفاده کنم.
برای لود کردن فایل های txt میدونم ولی چک باکس خطا میده!!!
اونم میگم 25 تا اسامی هستن که داخل این 25 تا حدوداً 14 تا داده قرار می گیره که هنگام ذخیره مشکلی نداره ولی هنگام لود تو رجستری به مشکل بر میخوره باید تک تک لود کنی که میشه حدود 350 خط کد!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
مر30 میشم کمک بدین

Mohsen0025
دوشنبه 13 آبان 1392, 09:13 صبح
سلام مجدد.
آقا فایل INI امتحان کردم درست بود و قشنگم لود میکرد و ذخیره هم میشد و مشکل حالا اینجاس که برای هر کدوم از اسامی که گفتم 25 تاس همون قبلی که ذخیره کردی رو میاره!!!! یعنی باید برای هر کدوم 25 تا اسامی 25 تا از اون دستوره به صورت مجزا و ........ استفاده کنم؟
112540
حالا اگه شد از رجستری یا همون فایل INI اگه میشه کمک کنید:
دستوری که استفاده کردم:
برا ذخیره:
Open "D:\01.ini" For Output As #1
For i = 0 To 11
Print #1, chk(i).Value
Next i
Close #1
برا دریافت:
Private Sub command2_Clicl()
On Error Resume Next
Dim St
For i = 0 To 11
chk(i).Value = 0
Next i
Open "D:\01.ini" For Input As #1
For i = 0 To 11
Line Input #1, St
chk(i).Value = St
Next i
Close #1
End Sub

من تو صفحه همون 12 تا چک باکس رو دارم حالا با تغییر اسامی از Combo که بالا قرار داه میخوام تنظیمات اون اسم رو لود کنه که تو این دستور لود نمیکنه ولی تو رجستری لود میکرد ولی تو صفحه چاپی که باید همه رو با هم لود کنه مشکل داشت!!!!
ممنون میشم راهنمایی کنید یا با دستور INI با رجستری
مر30

vbhamed
سه شنبه 14 آبان 1392, 05:59 صبح
سلام

اول اينكه اينطوري كه شما از فايل Ini استفاده كردي فقط پسوند فايلت ini هست و كارش مشابه فايلهاي متني معمولي
براي كار با فايلهاي Ini كه ساختار مشخصي شامل كليد و زير گزينه هاش رو دارن بايد از توابع API كه GetPrivateProfileString, WritePrivateProfileString هستن استفاده كني، اينها رو تو گوگل جستجو كنيد

اما مطلب دوم اينه كه اصلا شما چرا براي ذخيره چند تا تكست باكس راه به اين سختي رو انتخاب كردين، با يك رشته 350 حرفي كه هر حرفش ميتونه 0 يا 1 باشه مي‌توني كل چك باكس ها رو ذخيره كني، حالا تو رجيستري يا فايل متني معمولي يا فايل Ini
خوندن يك رشته هم كه كاري نداره و به هر كدوم از مقادير چك باكس ها داخل رشته هم مي‌توني با تابع Mid دسترسي پيدا كني
يا اينكه اگر دوست داشتي مقادير تكست باكسهاي هر كليد رو در يك رشته جداگانه 14 كاراكتري ذخيره كني چيزي شبيه اين : 10011010011010

Mohsen0025
سه شنبه 14 آبان 1392, 15:00 عصر
سلام
مر30 حامد جان
من استفاده کردم اما حالا با یه مشکل دیگه برخورد کردم اینه که نمیدونم چه طور همه اطلاعات رو یه دفه لود کنم!!!!
از کد زیر استفاده کردم:
Public Function SetData(ByVal Shahrestan As String, ByVal Mon As String, chk As CheckBox)
If chk.Value = 0 Then
WritePrivateProfileString Shahrestan, Mon, "0", App.Path & "\Setting.ini"
Else
WritePrivateProfileString Shahrestan, Mon, "1", App.Path & "\Setting.ini"
End If
End Function

Public Function GetData(ByVal chks As CheckBox, ByVal Shahrestann As String, MONS As String)
On Local Error Resume Next
Dim bUf As String
bUf = Space(255)
GetPrivateProfileString Shahrestann, MONS, "0", bUf, 255, App.Path & "\Setting.ini"
chks.Value = bUf
End Function

اطلاعات حدوداً 25 تا شهر و 12 ماه مثل عکس زیر:
112574
اگه میشه یه مثال بزنی!!ممنونم!! فقط دریافت همه اطلاعات :تشویق: :بوس:

vbhamed
چهارشنبه 15 آبان 1392, 14:46 عصر
سلام
به جاي اينكه براي هر شهرستان و هر ماه يك كليد ايجاد كنيد حداقل همه ماههاي يك شهرستان رو در يك رشته بنويسيد مثلا 100011010101 كه اين رشته نشون ميده فروردين 1 هست و ارديبهشت 0 و خرداد 0 و تير 0 و مرداد 1 و ... (البته از سمت چپ عدد رو بخونيد)
البته من اگر جاي شما باشم براي اين رشته هاي 12 حرفي رو كنار هم ميزارم و همه اطلاعات رو در يك كليد ذخيره مي‌كنم

Mohsen0025
چهارشنبه 15 آبان 1392, 17:53 عصر
سلام
مر30
من دیگه با WritePrivateProfileString و GetPrivateProfileString دارم درستشون میکنم!!!
اگه میشه یه مثال بزنید که بتونه همه اطلاعات رو با هم لود کنه اگه با regedit هم باشه باز مسئله ای نیست ولی گزینه اول بهتره چون اگه یوزر limit باشه به رجستری گیر میده!!!!!
ممنونم

Mohsen0025
جمعه 17 آبان 1392, 10:02 صبح
آقا مر30 میشم یکی کمک کنه،کارم گیره
فداتون

vbhamed
دوشنبه 20 آبان 1392, 16:52 عصر
سلام
مر30
من دیگه با WritePrivateProfileString و GetPrivateProfileString دارم درستشون میکنم!!!
اگه میشه یه مثال بزنید که بتونه همه اطلاعات رو با هم لود کنه اگه با regedit هم باشه باز مسئله ای نیست ولی گزینه اول بهتره چون اگه یوزر limit باشه به رجستری گیر میده!!!!!
ممنونم

سلام
خب چيزي هم كه تو پست 11 گفتم با همين توابع انجام ميشه
تنها چيزي كه هست اينه كه براي هر چك باكس كليد مجزا درست نكنيد و كل ماههاي يك شهرستان رو در يك كليد بنويسيد
ضمنا برنامتون رو تا جايي كه نوشتين بزاريد اينجا تا بررسي بشه

Mohsen0025
سه شنبه 21 آبان 1392, 10:15 صبح
با سلام
اینم سورس برنامه:
112742
ممنون

vbhamed
شنبه 25 آبان 1392, 23:26 عصر
سلام
اين برنامه اصلاح شده