PDA

View Full Version : سوال: چطوری می تونم تغیراتی که کاربر در نرم افزارم میده رو سیو کنم ؟



sinavb
شنبه 20 شهریور 1389, 02:56 صبح
سلام من می خوام برای نرم افزار فرم تنظیمات بزارم اما نمی دونم چطوری باید تغییراتی رو که کاربر می ده رو سیو کنم تا توی دفعات بعد نرم افزار بر اساس اون تغییرات لود بشه

morteza561
شنبه 20 شهریور 1389, 06:26 صبح
شما میتونی دو تا کار انجام بدی. یا تو صفحه تنظیمات یه دکمه بذاری که کاربر تنظیمات رو ذخیره کنه یا این که برای برنامه تعریف کنی موقع بسته شدن خودش تنظیمات رو ذخیره کنه.

در مورد نحوه ذخیره کردن شما باید همچین کدی بنویسید:


Private Sub Form_Unload(Cancel As Integer)
Open App.Path & "\Setting.dat" For Output As #1
Print #1, Command1.BackColor
Print #1, Label1.BackColor
Print #1, Me.BackColor
Close #1
End Sub

بعد دوباره برای لود کردن تنظیمات همچین کدی باید بنویسی:


Private Sub Form_Load()
Seting(3) As String
On Error Resume Next
Open App.Path & "\Setting.dat" For Input As #1
For i = 1 To 3
Input #1, setting(i)
Next
Close #1
Command1.BackColor = stting(1)
Label1.BackColor = setting(2)
Me.BackColor = setting(3)
End Sub

البته کارهای دیگه ای هم میشه کرد ولی فکر کنم این راحت ترینشون باشه.

مشکلی بود در خدمتم :قلب:

saeedvir
شنبه 20 شهریور 1389, 09:02 صبح
به نظر من بهترين روش كار با فايل هاي INI هست اگه خواستيد سورسش را براتون قرار مي دم

morteza561
شنبه 20 شهریور 1389, 09:15 صبح
به نظر من بهترين روش كار با فايل هاي INI هست اگه خواستيد سورسش را براتون قرار مي دم
سلام

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

ممنون میشم یاد بدید.

منتظرم :قلب:

Saman_12
شنبه 20 شهریور 1389, 12:15 عصر
سلام.
فایل های INI دارند منقضی میشن.(البته خیلی از شرکت های نرم افزاری بزرگ هنوز دارن از این روش استفاده میکنن.)
به نظر من بهتره که توی ریجستری ذخیره کنی و از توی ریجستری هم بخونی.(کاری نداره با یک خط.)

mmssoft
شنبه 20 شهریور 1389, 13:04 عصر
بهترین روش ذخیره در رجیستری هست؛ البته نه برای اطلاعات مهم مثل پسوردها...

morteza561
شنبه 20 شهریور 1389, 13:22 عصر
بله عزیزان. من هم میدونم بهترین راه استفاده از رجیستری هست. ولی فکر کردم راهی هست که بشه بدون ذکر نام و خاصیت تک تک عناصر تمامی تنظیمات رو سیو کرد. ولی مثل این که اشتباه می کردم.

باز هم ممنون از راهنماییتون :قلب:

حمید محمودی
شنبه 20 شهریور 1389, 13:29 عصر
به نظر من بهتره در مسیر APPData ویندوز و با فرمت INI ذخیره کنید تا در ویندوز هایی مثل سون مشکلی پیش نیاد.(چون فکر کنم این پیشنهاد خود مایکروسافت بود)
توی برنامتون هم یه TOOL برای Import/Export اون تنظیمات بدید. که کاربر دیگه دستی اینکارو انجام نده



فایل های INI دارند منقضی میشن.
میتونم بپرسم چرا این حرف رو میزنید؟

Saman_12
شنبه 20 شهریور 1389, 13:43 عصر
میتونم بپرسم چرا این حرف رو میزنید؟
چرا نمیتونید؟
فایل های INI توی ویندز های نسل گذشته مثل XP همه کاره بودن اما توی ویندوز های جدید مایکروسافت مثل 7 این فایل ها پشتبانی درستی نمیشن.(مثال :)
فایل Boot.ini توی ویندوز XP همه کاره ویندوز هست و اگه پاک بشه دیگه کار ویندوز تمومه.(مگه این که کپی از این فایل داشته باشین تا درصورت بروز مشکل با داس جایگزین بشه.)
اما توی 7 این فایل وجود نداره و تنظیمات جا های دیگه ذخیره مشین.(کافیه یا یک مثال دیگه بزنم؟)

aminvb
شنبه 20 شهریور 1389, 13:47 عصر
چرا نمیتونید؟
فایل های INI توی ویندز های نسل گذشته مثل XP همه کاره بودن اما توی ویندوز های جدید مایکروسافت مثل 7 این فایل ها پشتبانی درستی نمیشن.(مثال :)
فایل Boot.ini توی ویندوز XP همه کاره ویندوز هست و اگه پاک بشه دیگه کار ویندوز تمومه.(مگه این که کپی از این فایل داشته باشین تا درصورت بروز مشکل با داس جایگزین بشه.)
اما توی 7 این فایل وجود نداره و تنظیمات جا های دیگه ذخیره مشین.(کافیه یا یک مثال دیگه بزنم؟)

به نظر جواب قانع کننده ای بود

منم موافقم با سامان

حمید محمودی
شنبه 20 شهریور 1389, 14:05 عصر
فایل های INI توی ویندز های نسل گذشته مثل XP همه کاره بودن اما توی ویندوز های جدید مایکروسافت مثل 7 این فایل ها پشتبانی درستی نمیشن.(مثال :)
فایل Boot.ini توی ویندوز XP همه کاره ویندوز هست و اگه پاک بشه دیگه کار ویندوز تمومه.(مگه این که کپی از این فایل داشته باشین تا درصورت بروز مشکل با داس جایگزین بشه.)
خب اینکه توی سون دیگه به روش XP برای بوت، کار نشده دلیلی برای این نیست که این فرمت داره منقضی میشه. دلیل اصلی مایکروسافت این بوده که جلوی مشکلاتی که استفاده از روش INI عملا براش ایجاد میکرد رو بگیره. یکی از مشکلات هم همنظور که گفتید این بود اگه این فایل پاک بشه، دیگه ویندوز بالا نمیومد.


ضمن اینکه خودتون هم اشاره کردید که خیلی از کمپانی های معروف هنوز حتی نرم افزارهایی که دارن برای سون مینوسن رو از فرمت INI استفاده میکنن. بعضی هاشون هم که فقط EXTENSION فایل رو عوض کردن و فرمت اصلی همون INI هست.

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

مثلا فرض کنید یه نرم افزار پرتابل داریم که تنظیماتی باید save/import کنه؛ خب یه کار خیلی ساده استفاده از همین فرمت ini هست که بدون هیچ کار اضافه ای تنظیمات رو بخونیم و یا ذخیره کنیم.

Saman_12
شنبه 20 شهریور 1389, 14:40 عصر
نه مثل اینکه شما قانع نشدید.

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

حمید محمودی
شنبه 20 شهریور 1389, 15:11 عصر
حرف بالا رو که خودتون زدید اینو که دیگه نمیتونید انکار کنید.
خب بله دیگه. گفتم که این کمپانی برای BOOT دیگه استفادش نکرده تا به مشکل برنخوره.
یکی از بزرگترین مشکلاتش همین بود که اگه ویروس و .. حذفش میکردن دیگه ویندوز بالا نمیومد.
موضوع این تاپیک فکر نکنم به BOOT ویندوز ارتباطی داشته باشه.

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

راستش هنوز من متوجه نشدم که چرا روش INI داره منقضی میشه و اینکه مشکلاتش چیه؟؟؟ (شاید ما هم دیگه از این روش استفاده نکریم (: )
حتما اطلاع دارید که خیلی از نرم افزارها از این روش استفاده میکنن (بعضی هاشون هم که اومدن فقط پسوند فایل رو تغییر دادن)
اگه این روش مورد داشت چرا اونها کاری نکردند؟!

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



%APPDATA%

Saman_12
شنبه 20 شهریور 1389, 15:52 عصر
کلا بی خیال خوب نیسیت یک تایپیک رو اینجوری کنیم.(هر کسی نظر خودش رو گفت و هر کس هر چی می بایست بشنود شنید پس همه چیز تمومه.)

sinavb
شنبه 20 شهریور 1389, 19:47 عصر
بچه ها چه گردو خاکی کردین تو این تایپیک من الان نفهمیدم از چه روشی باید استفاده کنم ؟
از فایل INI استفاده کنم یا از یه چیزه دیگه لطفا از هر روشی بود خواهشا آموزش کاملش رو بگزارید ممنون

حمید محمودی
شنبه 20 شهریور 1389, 19:55 عصر
بچه ها چه گردو خاکی کردین تو این تایپیک من الان نفهمیدم از چه روشی باید استفاده کنم ؟
از فایل INI استفاده کنم یا از یه چیزه دیگه لطفا از هر روشی بود خواهشا آموزش کاملش رو بگزارید ممنون


والا ما که متوجه نشدیم منظور دوستمون از بیان اون جمله "منقضی شدن" چی بود؛
ولی به هر حال همه روش های گفته شده در این تاپیک خوبه.

هربرنامه ای متناسب با عملکردش میتونه روش متاسب تر با خودشو بکار بگیره(گرچه با روش های دیگه هم میشه کار رو جلو برد)مثلا همون برنامه پرتابل که من مثال زدم.


کلا من که از این روش ini استفاده میکنم و اونو در مسیر Application data یوزر فعلی ذخیره میکنم و ازش راضی هستم.
خیلی از نرم افزارهای معروف هم اینکار رو میکنند

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

Saman_12
شنبه 20 شهریور 1389, 20:32 عصر
یک کد نمونه میزارم که با هاش میشه BackColor رو ذخیره کرد بقش رو هم همین گونه میشه طراحی کرد.
این توی لود :

Me.BackColor = GetSetting(App.EXEName, "Settings Key", "Me_BackColor", Me.BackColor)
اینم توی Unload :

SaveSetting App.EXEName, "Settings Key", "Me_BackColor", Me.BackColor


والا ما که متوجه نشدیم منظور دوستمون از بیان اون جمله "منقضی شدن" چی بود؛
نه مثل اینکه شما نمی خوای بی خیال بشی.(مثال دوم :)
فایل های Wini.ini و System.ini هر دو توی XP بعضی از تنظیمات ویندوز رو توی خودشون نگه میدارند.(بعضی ویروس ها با تغییر در متن این فایل ها خودشون رو ران استارت آپ میکنن) اما توی 7 با اینکه این فایل ها وجود دارند ویروس نیمتونه خودشو با استفاده از تغییر متن اونو ها ران کنه.(یعنی اون پشتی بانی که XP از اینا میکرد توی 7 وجود نداره.)
من تمایلی به ادامه این بحث ندارم پس بهتره تمومش کنید.

ahmads
شنبه 20 شهریور 1389, 20:33 عصر
گذشته از مباحثی که پیش اومده فکر میکنم ذخیره تنظیمات توی ریجستری کاره بهتر و معقول تر و استانداردتری باشه

returnx
شنبه 20 شهریور 1389, 20:39 عصر
دوستانی که از Windows7 استفاده میکنند به آدرس زیر برند و فولدر ها رو باز کنند اگه دقت کنید در Windows7 هم از فایل های INI استفاده میشه.

M:\Windows\inf

Saman_12
شنبه 20 شهریور 1389, 20:51 عصر
دوستانی که از Windows7 استفاده میکنند به آدرس زیر برند و فولدر ها رو باز کنند اگه دقت کنید در Windows7 هم از فایل های INI استفاده میشه.

مثل اینکه شما پست ها رو نخونده پست داید.(مثلا من توی پست قبل فایل های System.ini و Win.ini رو مثال زدم.)پس کسی منکر استفاده کردن ویندوز 7 از ini File نمیشه و اصلا مضوع سر نبودن فایل های ini توی ویندوز های جدید نیست! هست(قصد بی احترامی ندارم.) ؟

حمید محمودی
شنبه 20 شهریور 1389, 22:06 عصر
فایل های Wini.ini و System.ini هر دو توی XP بعضی از تنظیمات ویندوز رو توی خودشون نگه میدارند.(بعضی ویروس ها با تغییر در متن این فایل ها خودشون رو ران استارت آپ میکنن) اما توی 7 با اینکه این فایل ها وجود دارند ویروس نیمتونه خودشو با استفاده از تغییر متن اونو ها ران کنه.(یعنی اون پشتی بانی که XP از اینا میکرد توی 7 وجود نداره.)
این حرفتون کاملا درسته.
اما ارتباطی به موضوع استفاده از روش های گفته شده برای ذخیره تنظیمات، نداشت!
اینکه قسمت هایی از ویندوز به جای روشهای قدیمی، روش های دیگه رو برگزیده است، دلیلی برای از رده خارج شدن فرمت ini نیست.
سون خیلی چیزها رو تغییر داد. تا کاربران سیستم عامل ویندوز رو نگه داشته باشه.
این موضوعی هم که شما درباره win.ini گفتین،به نظر من باز برمیگیرده به خود امنیت ویندوز نه منقضی شدن فرمت INI. چون همونطوری که خودتون هم اشاره کردید، خیلی از نرم افزارهای معروف هم ازش استفاده میکنن.
ضمن اینکه در آخرین پست خودتون هم گفتین، توی خود ویندوز سون، سیستم عامل داره ازش استفاده میکنه.

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

درهر حال دوستان با روش های ذخیره کردن تنظیماتتون، خوش باشید (:

اینم استفاده از INI (برای دوست ایجاد کننده تاپیک):

http://www.vbaccelerator.com/home/vb/code/libraries/Registry_and_Ini_Files/Easy_Ini_File_Access/article.asp
وقتی واردسایت شدید, درقسمت دانلود(سمت چپ بالا) یه Class وجود داره که کارکردن باهاش خیلی راحته.

اینم همون DEMO :
http://www.vbaccelerator.com/home/vb/code/libraries/Registry_and_Ini_Files/Easy_Ini_File_Access/cIniFile_Demonstration_Application.asp

موفق باشید.

IamOverlord
شنبه 20 شهریور 1389, 22:53 عصر
سلام دوستان!
به نظر من شما نمی تونید Registery یک Windows رو به راحتی به Windows دیگری انتقال بدهید. اما به راحتی می تونید با فایل های INI این کار رو بکنید، چون Portable هستند. اما در کل Registery برای ذخیره ی تنظیمات در یک سیستم واحد بهینه تره، و اصلا هدف Microsoft از Registery همین بوده. اما Microsoft رسما اعلام نکرده که فایل های INI منقضی شدند، و هنوز هم هر کدوم کاربرد خودشون رو دارن. و به نظرتون ((استفاده از NET. یا API)) مهم تر از ((استفاده از INI یا Registery)) نیست؟

برای کار با Registery از این Module استفاده کنید:

Global Const REG_SZ As Long = 1
Global Const REG_DWORD As Long = 4
Global Const REG_BINARY = 3 ' Free form binary

Global Const HKEY_CLASSES_ROOT = &H80000000
Global Const HKEY_CURRENT_USER = &H80000001
Global Const HKEY_LOCAL_MACHINE = &H80000002
Global Const HKEY_USERS = &H80000003

Global Const ERROR_NONE = 0
Global Const ERROR_BADDB = 1
Global Const ERROR_BADKEY = 2
Global Const ERROR_CANTOPEN = 3
Global Const ERROR_CANTREAD = 4
Global Const ERROR_CANTWRITE = 5
Global Const ERROR_OUTOFMEMORY = 6
Global Const ERROR_INVALID_PARAMETER = 7
Global Const ERROR_ACCESS_DENIED = 8
Global Const ERROR_INVALID_PARAMETERS = 87
Global Const ERROR_NO_MORE_ITEMS = 259
Global Const KEY_ALL_ACCESS = &H3F
Global Const REG_OPTION_NON_VOLATILE = 0

Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long

Declare Function RegCreateKeyEx Lib "advapi32.dll" Alias "RegCreateKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal Reserved As Long, ByVal lpClass As String, ByVal dwOptions As Long, ByVal samDesired As Long, ByVal lpSecurityAttributes As Long, phkResult As Long, lpdwDisposition As Long) As Long

Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long

Declare Function RegQueryValueExString Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, ByVal lpData As String, lpcbData As Long) As Long

Declare Function RegQueryValueExLong Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Long, lpcbData As Long) As Long

Declare Function RegQueryValueExNULL Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, ByVal lpData As Long, lpcbData As Long) As Long

Declare Function RegSetValueExString Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, ByVal lpValue As String, ByVal cbData As Long) As Long

Declare Function RegSetValueExLong Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpValue As Long, ByVal cbData As Long) As Long

Private Declare Function RegDeleteKey& Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String)

Private Declare Function RegDeleteValue& Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String)

Public Function SetValueEx(ByVal hKey As Long, sValueName As String, lType As Long, vValue As Variant) As Long
Dim lValue As Long
Dim sValue As String
Select Case lType
Case REG_SZ ' type of value is string
sValue = vValue
SetValueEx = RegSetValueExString(hKey, sValueName, 0&, lType, sValue, Len(sValue))
Case REG_DWORD ' type of value is Double word
lValue = vValue
SetValueEx = RegSetValueExLong(hKey, sValueName, 0&, lType, lValue, 4)
End Select
End Function

Function QueryValueEx(ByVal lhKey As Long, ByVal szValueName As String, vValue As Variant) As Long
Dim cch As Long
Dim lrc As Long
Dim lType As Long
Dim lValue As Long
Dim sValue As String
lrc = RegQueryValueExNULL(lhKey, szValueName, 0&, lType, 0&, cch)
Select Case lType
' For strings
Case REG_SZ:
sValue = String(cch, 0)
lrc = RegQueryValueExString(lhKey, szValueName, 0&, lType, sValue, cch)
If lrc = ERROR_NONE Then
vValue = Left$(sValue, cch)
Else
vValue = Empty
End If
' For DWORDS
Case REG_DWORD:
lrc = RegQueryValueExLong(lhKey, szValueName, 0&, lType, lValue, cch)
If lrc = ERROR_NONE Then vValue = lValue
Case Else
'all other data types not supported
lrc = -1
End Select
QueryValueExExit:
QueryValueEx = lrc
Exit Function
QueryValueExError:
Resume QueryValueExExit
End Function
Public Function DeleteKey(lPredefinedKey As Long, sKeyName As String)
Dim lRetVal As Long
lRetVal = RegDeleteKey(lPredefinedKey, sKeyName)
DeleteKey = lRetVal ' return function valu
End Function

Public Function DeleteValue(lPredefinedKey As Long, sKeyName As String, sValueName As String)
Dim lRetVal As Long
Dim hKey As Long
lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, hKey)
lRetVal = RegDeleteValue(hKey, sValueName)
RegCloseKey (hKey)
DeleteValue = lRetVal
End Function

Public Function CreateNewKey(lPredefinedKey As Long, sNewKeyName As String)
Dim hNewKey As Long
Dim lRetVal As Long
lRetVal = RegCreateKeyEx(lPredefinedKey, sNewKeyName, 0&, vbNullString, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, 0&, hNewKey, lRetVal)
RegCloseKey (hNewKey)
CreateNewKey = lRetVal
End Function

Public Function SetKeyValue(lPredefinedKey As Long, sKeyName As String, sValueName As String, vValueSetting As Variant, lValueType As Long)
Dim lRetVal As Long
Dim hKey As Long
lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, hKey)
lRetVal = SetValueEx(hKey, sValueName, lValueType, vValueSetting)
RegCloseKey (hKey)
SetKeyValue = lRetVal
End Function

Public Function QueryValue(lPredefinedKey As Long, sKeyName As String, sValueName As String)
Dim lRetVal As Long
Dim hKey As Long
Dim vValue As Variant
lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, hKey)
lRetVal = QueryValueEx(hKey, sValueName, vValue)
QueryValue = vValue
RegCloseKey (hKey)
End Function

Saman_12
شنبه 20 شهریور 1389, 23:04 عصر
به نظر من شما نمی تونید Registery یک Windows رو به راحتی به Windows دیگری انتقال بدهید. اما به راحتی می تونید با فایل های INI این کار رو بکنید
Microsoft رسما اعلام نکرده که فایل های INI منقضی شدند

بله شما درست میگید که مایکرو سافت نوز این فایل ها رو منقضی اعلام نکرده اما با مثال های که زدم کاملا معلوم هست که کاربرد این نوع فایل ها کمتر شده.

اما در مورد انتقال داده های ریجستری این کار کار بسیار ساده ای هست.(با یک خط میشه از کلید موردنظر یک Import کنار برنامه گرفت و توی سیستم دیگه باز هم با یک خط Export کرد.) .
ساده ترین راه ذخیره و باز یابی اطلاعات از ریجستری هم که همونیه که قبلا گفتم.(اون روش اسمش هم روشه و احتیاج به تعریف این همه API و ... رو نداره.)

ali190
یک شنبه 21 شهریور 1389, 00:15 صبح
بنظر من سامان درست میگه
استفاده از رجیستری هم ساده تره هم مطمئن تر
سامان اگر برات زحمتی نیست کد هایی که رجیستری مورد نظرمون رو ایمپورت و اکسپورت میکنه رو برام اینجا میزاری؟
ممنون

IamOverlord
یک شنبه 21 شهریور 1389, 00:28 صبح
سلام دوست عزیز!
کد برای کار با Registery رو 2 تا پست بالا تر گذاشتم دیگه!
:چشمک:

sinavb
یک شنبه 21 شهریور 1389, 00:59 صبح
دوستان من از رجیستری اطلاعات رو سیو کنم ؟
دوست عزیزم IamOverlord (http://www.barnamenevis.org/forum/member.php?u=72921) کد رجیستری رو گزاشتی ممنون ولی میشه یکم بیشتر در موردش توضیح بدی چطوری باید ازش استفاده کنم یه نمونه هم بگزاری ممنون میشم چون من اصلا کار با رجیستری رو بلد نیستم
تنظیمات نرم افزار منم فقط مربوط میشه به تغییر رنگ فورم ، نشون دادن/ندادن یک فرم در اول برنامه و چندتا چیز کوچیک دیگه

IamOverlord
یک شنبه 21 شهریور 1389, 01:39 صبح
سلام دوستان!
چند تا مثال می ذارم که واضح تر بشه:

گرفتن زبان کاربر:

L = QueryValue(HKEY_CURRENT_USER, "Control Panel\International", "sLanguage")
MsgBox L
زمانی که روی خصوصیت BackColor یک کنترل مثل PictureBox کلیک می کنید، یک پنجره باز می شه که در اون یه Tab به نام System هست، مقدار تمام اون رنگ ها به صورت یه رشته ی RGB در Registery ذخیره شده اند:

S = QueryValue(HKEY_CURRENT_USER, "Control Panel\Colors", "ActiveBorder")
MsgBox "ActiveBorder: " & S
S = QueryValue(HKEY_CURRENT_USER, "Control Panel\Colors", "ActiveTitle")
MsgBox "ActiveTitle:" & S
S = QueryValue(HKEY_CURRENT_USER, "Control Panel\Colors", "AppWorkSpace")
MsgBox "AppWorkSpace: " & S
S = QueryValue(HKEY_CURRENT_USER, "Control Panel\Colors", "Background")
MsgBox "Background: " & S
S = QueryValue(HKEY_CURRENT_USER, "Control Panel\Colors", "ButtonFace")
MsgBox "ButtonFace: " & S
S = QueryValue(HKEY_CURRENT_USER, "Control Panel\Colors", "ButtonShadow")
MsgBox "ButtonShadow: " & S
S = QueryValue(HKEY_CURRENT_USER, "Control Panel\Colors", "ButtonText")
MsgBox "ButtonText: " & S
S = QueryValue(HKEY_CURRENT_USER, "Control Panel\Colors", "Menu")
MsgBox "Menu: " & S
S = QueryValue(HKEY_CURRENT_USER, "Control Panel\Colors", "Window")
MsgBox "Window: " & S
S = QueryValue(HKEY_CURRENT_USER, "Control Panel\Colors", "MenuText")
MsgBox "MenuText: " & S
' and more ...
آدرس تصویری که برای Desktop انتخاب کردید:

S = QueryValue(HKEY_CURRENT_USER, "Control Panel\Desktop", "ConvertedWallpaper")
MsgBox S
آدرس Screen Saver انتخابی شما:

S = QueryValue(HKEY_CURRENT_USER, "Control Panel\Desktop", "SCRNSAVE.EXE")
MsgBox S
کشور شما:

S = QueryValue(HKEY_CURRENT_USER, "Control Panel\International", "sCountry")
MsgBox S
واحد پول شما:

S = QueryValue(HKEY_CURRENT_USER, "Control Panel\International", "sCurrency")
MsgBox S

و هزاران چیز دیگه که اگه خواستید می ذارم رو می تونید از Registery بخونید.

به طور خلاصه نحوه ی خواندن و نوشتن توسط Function های این Module رو در زیر نوشتم:

خواندن:

RValue = QueryValue(HKEY_USERS, "KeyName\KeyName\KeyName", "ValueName")

نوشتن:

SetKeyValue HKEY_USERS, "KeyName\KeyName\KayName", "ValueName", NewValue, REG_BINARY

توضیح:

به جای HKEY_USERS موارد زیر را هم می توانید بنویسید:
HKEY_CLASSES_ROOT
HKEY_CURRENT_USER
HKEY_LOCAL_MACHINE

به جای "KeyName\KeyName\KayName" آدرس کلید مورد نظر خودتان را بدهید.

به جای "ValueName" نام مقدار مورد نظری که در کلیدتان است را بنویسید.

به جای NewValue مقدار جدیدی را که به "ValueName" می دهید را بنویسید.

به جای REG_BINARY نوع مقدار (Value) بنویسید که موارد زیر هم می تواند باشد:
REG_SZ
REG_DWORD

اگه چیز دیگه ای هم مونده بگید ...
:چشمک:

Saman_12
یک شنبه 21 شهریور 1389, 10:33 صبح
این یک مثال که توی یک خط بدون تعریف API و فانکشن Export میگیره :

Shell "Reg Export HKCU\Software\Microsoft\Windows\CurrentVersion\Run " & Chr(34) & App.Path & "Registery.Reg" & Chr(34)
خوب جای HKCU نام مختصر شده ی کلید اصلی رو بزارید.
اینم برای Import :

Shell "Reg Import " & Chr(34) & App.Path & "REgistery.Reg" & Chr(34)

vbhamed
یک شنبه 21 شهریور 1389, 13:06 عصر
سلام

براي ذخيره كردن راههاي مختلفي وجود داره

1 - استفاده از فايلهاي Ini
2 - استفاده از رجيستري
3 - استفاده از بانك اطلاعاتي
4 - استفاده از فايلهاي ديگر مثل فايلهاي متني، باينري و ...
5 - ذخيره تنظيمات درون خود فايل اجرايي نرم افزار

در تاپيك زير توضيح مطالب را بخوانيد

http://barnamenevis.org/forum/showthread.php?t=246256

sinavb
دوشنبه 22 شهریور 1389, 03:14 صبح
من توی چند تا سورس نرم افزار ها دیدم که همین اطلاعاتی رو که من می خوام سیو بشه رو در یه دستور Save setting نوشته منم می تونم از این استفاده کنم ؟

حمید محمودی
دوشنبه 22 شهریور 1389, 03:18 صبح
من توی چند تا سورس نرم افزار ها دیدم که همین اطلاعاتی رو که من می خوام سیو بشه رو در یه دستور Save setting نوشته منم می تونم از این استفاده کنم ؟

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