PDA

View Full Version : نوشتن برنامه بدون دسكتاپ



مليكا2012
چهارشنبه 18 مرداد 1391, 11:56 صبح
با سلام و تشكر از سايت خوبتون
يه برنامه مي‌خوام بنويسم(MFC) كه با اجراي اون explorer و taskmanager و log off و... غير فعال شه و فقط نرم افزاري كه مورد نظرم هست، فعال باشه. يعني در حقيقت سيستم قفل شه و فقط نرم افزار مورد نظر من بتونه كار كنه. ممنون ميشم اگه يه نفر توضيح بده كه چجوري كدهاي اين برنامه رو بنويسم و به يه dialog بدم.
مرسي

fjm11100
چهارشنبه 18 مرداد 1391, 12:21 عصر
برای اینکه برنامه ات جای دسکتاب باشه کافیه مسیر برنامه ات را در کلید Shell مسیر زیر در رجیستری جایگزین explorer کنی
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
اما برای اینکه taskmanager نیاد کار از ویندوز ویستا به بعد کمی سخت شده. 2 راه داری یا اینکه از طریق اجرای gpedit.msc و تغییر تنطیمات مانع از نمایش دکمه taskmanager در صفحه alt+ctrl+del بشی یا اینکه بری توی مود کرنل و کیبورد را هوک کنی و بجای جلوی کلیدهای alt+ctrl+del را بگیری. البته میتونی از api و توابع مربوط به advapi32.dll استفاده کنی و مانع بسته شدن برنامه ات در تسک منیجر بشی(همون پیام Access denied معروف) که من شرحش را در بخش C# جدیدا گذاشتم با کمی تغییر در c++ میتونی استفاده کنی.

مليكا2012
چهارشنبه 18 مرداد 1391, 12:44 عصر
ممنون دوست عزيز از راهنماييتون، اما من تقريبا مي دونم كه مثلا براي بدون دسكتاپ كردن بايد به مسير [HKEY_USERS\_DEFAULT\Software\Microsoft\Windows\Cur rentVersion\Policies\Explorer] برم و یک مقدار باینري به نام NoDesktop بسازم و به اون مقدار 01 بدم يا براي غير فعال كردن taskmanager در مسير HKEY_Current_User\Software\Microsoft\Windows\Curre ntVersion\Policies\System با بکار بردن دستور DisableTaskMgr با مقدار 1 سه کلید CTL + ALT + DEL غیرفعال ميشه. اما مي خوام بگي چجوري اين برنامه و كدهاي اون رو بنويسم.
ممنون

مليكا2012
چهارشنبه 18 مرداد 1391, 12:45 عصر
ممنون دوست عزيز از راهنماييتون، اما من تقريبا مي دونم كه مثلا براي بدون دسكتاپ كردن بايد به مسير [HKEY_USERS\_DEFAULT\Software\Microsoft\Windows\Cur rentVersion\Policies\Explorer] برم و یک مقدار باینري به نام NoDesktop بسازم و به اون مقدار 01 بدم يا براي غير فعال كردن taskmanager در مسير HKEY_Current_User\Software\Microsoft\Windows\Curre ntVersion\Policies\System با بکار بردن دستور DisableTaskMgr با مقدار 1 سه کلید CTL + ALT + DEL غیرفعال ميشه. اما مي خوام بگي چجوري اين برنامه و كدهاي اون رو بنويسم.
ممنون

fjm11100
چهارشنبه 18 مرداد 1391, 15:02 عصر
یعنی فقط مشکل نوشتن توی رجیستری را داری؟!!! خب اگر اینطوره که یک سرچ بزنی نمونه اش ریخته مثل
http://stackoverflow.com/questions/2817307/how-to-write-into-registry-using-vc-2010

مليكا2012
چهارشنبه 18 مرداد 1391, 15:24 عصر
یعنی فقط مشکل نوشتن توی رجیستری را داری؟!!! خب اگر اینطوره که یک سرچ بزنی نمونه اش ریخته مثل
http://stackoverflow.com/questions/2817307/how-to-write-into-registry-using-vc-2010

من ميخوام اين برنامه اي كه توضيحشو دادمو در قالب MFC و تو يه dialog based كدنويسي كنم، ضمنا چيزيم بلد نيستم و اومدم اينجا كه سرچ نكنم. حالا اگه كسي چيزي مي دونه راهنمايي كنه.

#target
چهارشنبه 18 مرداد 1391, 19:08 عصر
چنین تابعی بنویسین برا اون کلید ها و در موقع مورد نظر فراخوانیش کنین >
void Disable()
{
HKEY Hnd;
const DWORD Data = 1;
RegCreateKeyEx(HKEY_CURRENT_USER , L"Software\\Microsoft\\Windows\\CurrentVersion\\Poli cies\\System" , 0 , 0 , 0 , KEY_ALL_ACCESS , 0 , &Hnd , 0 );
RegSetValueEx(Hnd , L"DisableTaskMgr" , 0 , REG_DWORD , (BYTE*)&Data , 4);
RegCloseKey(Hnd);
RegCreateKeyEx(HKEY_CURRENT_USER , L"Software\\Microsoft\\Windows\\CurrentVersion\\Poli cies\\Explorer" , 0 , 0 , 0 , KEY_ALL_ACCESS , 0 , &Hnd , 0 );
RegSetValueEx(Hnd , L"NoDesktop" , 0 , REG_DWORD , (BYTE*)&Data , 4);
RegCloseKey(Hnd);
}

بعلاوه اگر برای ویندوزی مثل 7 طراحی میکنید . باید Manifest را طوری تنظیم کنید که در حالت Administrator بیاد فایلتون
برای اینکار رو پروژه با راست کلیک وارد Properties بشین . قسمت Linker و Manifest File بخش UAC Execution Level رو به requireAdministrator (/level='requireAdministrator') تغییر بدین

مليكا2012
پنج شنبه 19 مرداد 1391, 09:10 صبح
خيلييييييييييي ممنونم از راهنماييت :لبخندساده:، اگه بخوام چند تا كليد ديگه هم اضافه كنم به اين صورت:
حذف Explorer
بازيابي Explorer
حذف task Manager
اجراي Task Manager
چه كنم؟

مليكا2012
پنج شنبه 19 مرداد 1391, 09:20 صبح
يه سوال ديگم دارم، ميشه كامل توضيح بدي چجوري در قالب MFC ، برنامه "ايجاد يك كليد توي رجيستري" رو بنويسم و dialog ايجاد كنم؟ همه مراحلو لطفا توضيح بده. ممنون.

#target
پنج شنبه 19 مرداد 1391, 18:21 عصر
برای حذف کردن کافیه بجای اون خط RegSetValue تابع مربوط به حذف کلید رو بذاری
RegDeleteValue(Hnd , L"DisableTaskMgr");
دکمه رو قرار دادید و Event Handler رو براش گذاشتین داخل کدهای مربوط به دکمه که براتون میاره کدا رو قرار میدین !

مليكا2012
پنج شنبه 26 مرداد 1391, 11:54 صبح
اون چيزي كه براي حذف دسكتاپ گفتي جسارتا يكم اشكال داشت. براي حذف دسكتاپ بايداين مسير رو تو رجيستري بريد:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
بعد اونجا يه کليد به نام SHELL هست اون رو باز کنيد valu date كه explorer.exe هست. خوب، برا حذف دسكتاپ explorer.exe بايد نباشه..

حالا اين دستورو چجوري بايد نوشت تا برنامه اجرا شه؟

#target
پنج شنبه 26 مرداد 1391, 17:31 عصر
خوب فرقی نمیکنه با همون کدهای قبلی بذار
فقط اینجا داده مورد نظر از نوع رشته

مليكا2012
جمعه 27 مرداد 1391, 17:10 عصر
خوب ممنون، این خوبه؟
voidDisable()
{
HKEYHnd;
constDWORDData = 1;
RegCreateKeyEx(HKEY_LOCAL_MACHINE , L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon", 0 , 0 , 0 , KEY_ALL_ACCESS , 0 , &Hnd , 0 );
RegSetValueEx(Hnd , L"NoDesktop", 0 , REG_DWORD , (BYTE*)&Data , 4);
RegCloseKey(Hnd);
}

حالا explorer.exe رو چجوری از کلید SHELL حذف کنم؟

#target
شنبه 28 مرداد 1391, 00:18 صبح
HKEY Hnd;
const TCHAR* Data = L"MyProgram.exe";
RegCreateKeyEx(HKEY_LOCAL_MACHINE , L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon" , 0 , 0 , 0 , KEY_ALL_ACCESS , 0 , &Hnd , 0 );
RegSetValueEx(Hnd , L"Shell" , 0 , REG_SZ , (BYTE*)Data , 27);
RegCloseKey(Hnd);

چنین کدی میتونی
نوع REG_SZ برا رشته هست . بعدی اشاره گر به داده هست . آخری هم سایز رشته چرا هم پشت Data علامت & نذاشتم چون Data اینجا خودش اشاره گره

مليكا2012
شنبه 28 مرداد 1391, 10:37 صبح
اين 27 طول چه رشته ايه؟
در مورد خط اول هم ميشه يه توضيح بدي؟ const TCHAR* Data = L"MyProgram.exe";
مرسي

#target
یک شنبه 29 مرداد 1391, 17:11 عصر
TCHAR هر کاراکتر دو بایت میگیره
طول اون رشته 13 کاراکتر که هر کاراکتر میشه 2 بایت تا اینجا 26 بایت ی بایت هم برا پایان رشته میشه 27
TCHAR* Data = L"MyProgram.exe";
اینم که نوع داده ای TCHAR هست مثل همون char منمتهی برای کاراکتر های یونیکود استفاده میشه اون L پشت رشته هم برا همین که رشته رو بصورت Unicode دربیاره