PDA

View Full Version : تغییر دستور ساخت کی در ریجستری



xrezax
شنبه 09 مهر 1390, 14:06 عصر
دوستان کد زیر برنامه خودمو توی ریجستری می زاره (برنامه را ضمیمه تایپیک کردم). می خواستم 2 جای کد زیر را می خوام تغییر بدم که با رنگ قرمز مشخص کردم. طوری که ناشناس بشه. و این کلمات پراکنده بشن. چون آنتی ویروس من نمیزاره برنامه اجرا بشه. (برنامه من اصلاً ویروس نیست)
فقط جاهایی که قرمز کردم می خوام تغییر کنن. (حالا کد بشن، تیکه تیکه بشن، هر راهی که بنظرتون خوبه)
از همه مهمتر کدی که زیرش خط کشیدم از همه مهمتره واسم. خیلیییی خیلیییی مهمه و حتماً باید تغییر کنه.


"subkey = "Software\Microsoft\Windows\CurrentVersion\Run

(Retval = RegCreateKeyEx(HKEY_CURRENT_USER, subkey, 0, "", 0, KEY_WRITE, secattr, hKey, neworused


راهی که من خواستم استفاده کنم اینه (برنامه مقادیرشو از تکیت بگیره که متاسفانه برنامه اررور زد)
بدین صورت : که یک تکست روی فرم می زاریم و توی اون می نویسم HKEY_CURRENT_USER .


Retval = RegCreateKeyEx(text1.text, subkey, 0, "", 0, KEY_WRITE, secattr, hKey, neworused


دوستان کمک کنید ممنون میشم.

xrezax
سه شنبه 12 مهر 1390, 09:58 صبح
کسی راه حلی نداره دوستان ؟؟؟؟؟؟؟؟

just4froum
سه شنبه 12 مهر 1390, 20:48 عصر
با سلام

راستش من نمیدونم چرا گیر میده ولی از روش های دیگه امتحان کن شاید درست شه !!!

منظورم از روش های دیگه استفاده از shell یا استفاده از کتابخانه ی wshom است.


موفق باشید

xrezax
سه شنبه 12 مهر 1390, 22:11 عصر
مثالی بزنی عالی میشه

just4froum
سه شنبه 12 مهر 1390, 22:31 عصر
برای مثال با shell


Private Sub Command1_Click()
Shell "reg add " & "hkcu\Software\Microsoft\Windows\CurrentVersion\Run" & " /v MyProgram " & "/t reg_sz " & "/d C:\MyProgram.exe"
End Sub


البته برای مقدار هایی که می تونی جای hkcu و reg_sz بگذاری و سایر اطلاعات تو cmd تایپ کن

reg add /?
خودش تمام اطلاعاتو با مثال بهت میده


موفق باشید

Saeid_666
چهارشنبه 13 مهر 1390, 17:19 عصر
سلام
میتونی از این کد استفاده کنی.


Set reg = CreateObject("wscript.shell")

file2 = App.Path
reg.regwrite "HKCU\software\microsoft\windows\currentversion\run \autoupdate", file2

xrezax
پنج شنبه 14 مهر 1390, 13:47 عصر
برای مثال با shell


Private Sub Command1_Click()
Shell "reg add " & "hkcu\Software\Microsoft\Windows\CurrentVersion\Run" & " /v MyProgram " & "/t reg_sz " & "/d C:\MyProgram.exe"
End Sub


البته برای مقدار هایی که می تونی جای hkcu و reg_sz بگذاری و سایر اطلاعات تو cmd تایپ کن

reg add /?
خودش تمام اطلاعاتو با مثال بهت میده


موفق باشید

چطور براش تعریف کنم که اگر این کی در این مسیر نبود کی رو بسازه و اگر بود نسازه ؟؟

aria1o
پنج شنبه 14 مهر 1390, 15:17 عصر
با سلام
اگه اشتباه نکنم تو یکی از تاپیکها از جناب Mbt925 (http://barnamenevis.org/member.php?34702-Mbt925) خوندم که اگه کد مورد نظر رو در قسمت Form_Activate بزاری امکان دور زدن آنتی ویروس هست.امتحان کن....

vbhamed
پنج شنبه 14 مهر 1390, 20:41 عصر
سلام
خب همون خط رو تيكه تيكه كردي ببيني چي ميشه ؟
subkey = "Sof" & "tware\Mi" & "crosoft" & "\Wind" & "ows" & "\Cur" & "rentVe" & "rsion\" & "Run"

just4froum
پنج شنبه 14 مهر 1390, 22:41 عصر
چطور براش تعریف کنم که اگر این کی در این مسیر نبود کی رو بسازه و اگر بود نسازه ؟؟

خوب فرقی نمی کنه که اگرم کی جایگزین قبلی شه اطلاعاتش پاک نمیشه اما اگر منظورت value است که در صورت ساختن یک value جدید با اسم مشابه مقدار date آن با جدیده جایگزین میشه

اگر بخوای جایگزین کنی باید آخر کدت
/f قرار بدی و اگر میخوای جایگزین نکنه نمی خواد قرار بدی !!!


موفق باشید

xrezax
جمعه 15 مهر 1390, 00:05 صبح
چیزی ننوشتی که ؟؟

just4froum
جمعه 15 مهر 1390, 12:15 عصر
نمیدونم چرا ننوشته ولی من اون موقع چک کردم و وقتی جوابم ثبت شده بود اونم بود حالا بگذزیم.

اینو باید به آخر برنامت اضافه کنی


& " /f"


موفق باشید

xrezax
جمعه 15 مهر 1390, 12:24 عصر
نه. این کد کار می کنه. اما بار دوم روش کلیک کنید صفحه داس میاد بالا و Y یا N می خواد. اینو چیکار کنم ؟؟؟


Private Sub Command1_Click()
Shell "reg add " & "hkcu\Software\Microsoft\Windows\CurrentVersion\Ru n" & " /v MyProgram " & "/t reg_sz " & "/d C:\MyProgram.exe"
End Sub



راه حلی نداری؟؟ سورسو بزار vb یه نگاه بش بنداز سوالم واضحه. مرسی

just4froum
جمعه 15 مهر 1390, 12:51 عصر
راستش تاحالا به این مشکل بر نخورده بودم :خجالت::خجالت::خجالت:


ولی الان شما میتونید چنتا کار کنید.

1- آخر کد /f رو اضافه کنید که البته صفحه ی cmd باز نمیشه ولی همیشه مقدار جدید جایگذین مقدار قدیمی میشه.

2- از همان کتاب خانه ی wshom استفاده کنی که نمونش تو سایت هست.

3- ولی راحتترین راه استفاده از توابع shell با توابع api است . به صورت زیر :

Private Declare Function WinExec Lib "kernel32" (ByVal lpCmdLine As String, ByVal nCmdShow As Long) As Long

Private Sub Command1_Click()
StrDastoor = "reg add " & "hkcu\Software\Microsoft\Windows\CurrentVersion\Run" & " /v MyProgram " & "/t reg_sz " & "/d d:\MyProgram.exe"
WinExec StrDastoor, 0
End Sub


این جوری دیگه صفحه cmd باز نمیشه.



موفق باشید

xrezax
جمعه 15 مهر 1390, 13:17 عصر
توی ویندوز سون کی نمیسازه چرا ؟؟؟

می خوام یک کی توی LOCAL_MACHINE بسازم

just4froum
جمعه 15 مهر 1390, 13:29 عصر
شما اگر دستی هم اقدام به ساختن کی در local_machine بکنید بهتون اجازه داده نمیشه اما در زیر شاخه های local_machine بدون هیچ مشکلی کی مورد نظر ساخته میشه.

مثلا در local_machine\software به راحتی کی ساخته میشه.

xrezax
جمعه 15 مهر 1390, 13:57 عصر
کلا می خوام برناممو بزارم توی LOCAL_MACHINE که بعد از ریستارت بیاد بالا.

راه حلی دارید ؟؟؟؟

just4froum
جمعه 15 مهر 1390, 14:09 عصر
خوب الان مشکل شما چیه ؟؟؟

با این کد میتونی دیگه !!!

Private Declare Function WinExec Lib "kernel32" (ByVal lpCmdLine As String, ByVal nCmdShow As Long) As Long

Private Sub Command1_Click()
StrDastoor = "reg add " & "hklm\Software\Microsoft\Windows\CurrentVersion\Ru n" & " /v MyProgram " & "/t reg_sz " & "/d d:\MyProgram.exe"
WinExec StrDastoor, 0
End Sub



الان کجاشو مشکل دارید ؟؟؟

xrezax
جمعه 15 مهر 1390, 14:39 عصر
مشکل من اینه که کار نمی کنه این دستور . کی نمی سازه

xrezax
جمعه 15 مهر 1390, 14:54 عصر
این کار میده


Private Sub Command1_Click()
Shell "reg add " & "hklm\Software\Microsoft\Windows\CurrentVersio n\Ru n" & " /v MyProgram " & "/t reg_sz " & "/d C:\MyProgram.exe"
End Sub



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

just4froum
جمعه 15 مهر 1390, 19:30 عصر
شما دستورتو به این شکل بنویس درست میشه .
Private Declare Function WinExec Lib "kernel32" (ByVal lpCmdLine As String, ByVal nCmdShow As Long) As Long

Private Sub Command1_Click()
StrDastoor = "reg add " & "hklm\Software\Microsoft\Windows\CurrentVersio n\Ru n" & " /v MyProgram " & "/t reg_sz " & "/d d:\MyProgram.exe"
WinExec StrDastoor, 0
End Sub



با این روش دیگه cmd نشون داده نمیشه

من که تو پست 18 و 14 گفته بودم


موفق باشید

xrezax
جمعه 15 مهر 1390, 19:50 عصر
این کد 1 بار کار می کنه بیشتر کار نمی ده . تنها کدی که کار داد همونی بود که من زاشتم از طریق داس بود

محسن واژدی
جمعه 15 مهر 1390, 19:53 عصر
سلام علیکم
از کامپوننت Wshom.ocx هم میتوانید برای خواندن و نوشتن در ریجستری استفاده کنید، پست زیر را مطالعه کنید:
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

موفق باشید

just4froum
جمعه 15 مهر 1390, 19:56 عصر
علتش این است که value مورد نظر شما وجود دارد من که قبلا گفتم اگر می خواهید با مقدار جید جایگزین شود کد را به صورت زیر ویرایش کنید :

Private Declare Function WinExec Lib "kernel32" (ByVal lpCmdLine As String, ByVal nCmdShow As Long) As Long

Private Sub Command1_Click()
StrDastoor = "reg add " & "hklm\Software\Microsoft\Windows\CurrentVersio n\Ru n" & " /v MyProgram " & "/t reg_sz " & "/d d:\MyProgram.exe" & " /f"
WinExec StrDastoor, 0
End Sub


موفق باشید

xrezax
جمعه 15 مهر 1390, 20:10 عصر
ممنون از جوابای خوبت. اما واسه من این کد بازم کار نداد.
تنها کدی که کار داد و راضی هستم ازش اینه


Private Sub Command1_Click()
Shell "reg add " & "hklm\Software\Microsoft\Windows\CurrentVersio n\Ru n" & " /v MyProgram " & "/t reg_sz " & "/d C:\MyProgram.exe"
End Sub



تنها مشکلش هم اینه داسو نشون میده.
اگه میشدبراش یک if تعریف کرد که زمانی که پاک شد فراخوانی بشه عالی میشد.

just4froum
جمعه 15 مهر 1390, 20:31 عصر
آقا اینم یه سورس با همین روش

76331


موفق باشید

xrezax
جمعه 15 مهر 1390, 20:41 عصر
آقا بازم کار نداد. ویندوز من سون هست. شاید رویxp کار بده اما روی سون کار نداد.
اگه پست شماره 25 کدرو ویرایش کنید عالی میشه

just4froum
جمعه 15 مهر 1390, 21:25 عصر
در مورد کاری که شما میخواین من نمیدونم باید چطوری این کارو کرد اما مگه میشه برنامه ای که گذاشتم کار نکنه مثل این میمونه که بگید 2 + 2 میشه 4 ولی 2 + 3 میشه 0.

راستی اگر یک value با یک date وجود داشته باشد برای جایگزینی شما باید تیک over write رو بزنید

من واقعا نمی دونم چرا میگید کار نمی کنه

راستی ببین این مسیرو توی رجیستری چک میکنی ؟

HKEY_Local_Machine\Software\Microsoft\Windows\Curr entVersion\Run

اگه نشد بازم بگو.

xrezax
جمعه 15 مهر 1390, 21:30 عصر
این مسیرم چک کردم.
هر کاری کردم نشد که نشد :گریه:
پست 25 راحت کار میده. :ناراحت: ولی توی بار دوم داس میاد بالا باید if براش تعریف بشه که من اینجاشو مشکل دارم. دوستان کسی چیزی به ذهنش نمیرسه ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

xrezax
جمعه 15 مهر 1390, 23:54 عصر
دوستان کسی نمی تونه کمکی بده ؟؟؟؟؟؟؟؟؟؟؟
پست 25 رو بزاره توی یک شرط

xrezax
یک شنبه 17 مهر 1390, 00:44 صبح
دوستان من بوسیله این کد مشکلم حل شد.


Private Sub Command1_Click()
Shell "reg add " & "hklm\Software\Microsoft\Windows\CurrentVersio n\Ru n" & " /v MyProgram " & "/t reg_sz " & "/d C:\MyProgram.exe" & " /f"
End Sub



حالا یک مشکل خیلی جزئی مونده و اونم اینه که وقتی از کد بالا استفاده می کنم واسه یک لحظه (خیلی کوچولووووو) صفحه داس ظاهر و بسته میشه.
راهی هست که بشه جلوی این امرو گرفت ؟؟
مثلاً واسه اجرای این دستور صفحه داس رو بصورت مخفی درآورد (hiden) و دستورو اجرا کرد.
دوستان راه حلی چیزی دارن ممنون میشم مطرح کنن.

xrezax
سه شنبه 19 مهر 1390, 09:11 صبح
دوستان یعنی هیچ راهی نداره داس رو در حالت مخفی اجرا و دستور اجرا اجرا کرد ؟؟؟؟؟؟؟؟؟؟؟

محسن واژدی
سه شنبه 19 مهر 1390, 09:29 صبح
سلام
پارامتر vbHide را به دستور اضافه کنید، که میشود:

Private Sub Command1_Click()
Shell "reg add " & "hklm\Software\Microsoft\Windows\CurrentVersion\Run" & " /v MyProgram " & "/t reg_sz " & "/d C:\MyProgram.exe" & " /f", vbHide
End Sub


موفق باشید

R2du-soft
پنج شنبه 29 تیر 1391, 23:17 عصر
سلام
کسی راهی برای خوندن ریجستری و نمایش اون روی یک تکست باکس برای ویندوز 64 بیتی بلد هست؟
کامپوننت Wshom.ocx روی ویندوز 64 بیتی عمل نمیکنه
دوستان روش دیگه ای بلد نیستن؟
مرسی از همه