سلام
میخوام یه برنامه بنویسم که وقتی ویندوز بالا اومد بلافاصله run بشه و کل صفحه مانیتور رو پر کنه و کاربر به جز صفحه برنامه به هیچی دیگه مثل desktop , start , ... دسترسی نداشته باشه و فقط بتونه از اون برنامه استفاده کنه ، راهش چیه ؟
ممنون
سلام
میخوام یه برنامه بنویسم که وقتی ویندوز بالا اومد بلافاصله run بشه و کل صفحه مانیتور رو پر کنه و کاربر به جز صفحه برنامه به هیچی دیگه مثل desktop , start , ... دسترسی نداشته باشه و فقط بتونه از اون برنامه استفاده کنه ، راهش چیه ؟
ممنون
فول اسکرین اجرا کردن برنامت که کاری نداره ولی این که کار با بقیه اجزا غیر ممکن بشه جای کار داره، در حالت معمول میتونی برنامه ات رو بصورت OnTop اجرا کنی ولی در حالت مورد نظر خودت باید برنامه ات مثل ویروس عمل کنه و دسترسی به TaskManager و ... رو ببنده و ضمنا TaskBar رو هم ناپدید کنه.
توی user32.dll دو تا کلاس وجود داره که بهشون نیاز داری: FindWindow و ShowWindow که بصورت زیر Declare می کنی:
[DllImport("user32.dll")]
private static extern int FindWindow(string className, string windowText);
[DllImport("user32.dll")]
private static extern int ShowWindow(int hwnd, int command);
بعدش با متد FinWindow پنجره Taskbar رو پیدا می کنی:
int hwnd = FindWindow("Shell_TrayWnd","");
و در آخر با استفاده از متد ShowWindow و پاس دادن مقدار 0 به اون، پنجره رو Hide می کنی و از کار می اندازیش:
ShowWindow(hwnd,SW_HIDE);
اینم کل کد برنامه:
[DllImport("user32.dll")]
private static extern int FindWindow(string className, string windowText);
[DllImport("user32.dll")]
private static extern int ShowWindow(int hwnd, int command);
private const int SW_HIDE = 0;
private const int SW_SHOW = 1;
private int _taskbarHandle = FindWindow("Shell_TrayWnd", "");
private void showTaskBar()
{
ShowWindow(_taskbarHandle, SW_SHOW);
}
private void hideTaskBar()
{
ShowWindow(_taskbarHandle, SW_HIDE);
}
private void Form1_Load(object sender, EventArgs e)
{
hideTaskBar();
}
آخرین ویرایش به وسیله LORD AELX : دوشنبه 13 اردیبهشت 1389 در 14:30 عصر
سلام به همه
ویژگی نمایش فرم رو به حالت ماکسیمایزد هم یادتون نره!
کد کامل برنامه رو گذاشتم برات فقط کافیه اونو تو کلاس اصلی برنامه کپی کنی. اصلا میخوای یه کد کامل از همه چیزایی که گفتی برات بگذارم؟؟؟
آنتی ویروس ها بهش گیر نمیدن ؟
ببینید دوست عزیز، کلی میگم،
اول شما باید برنامتون رو بصورت Maximized اجرا کنید، مقدار FormBorderStyle رو برابر None قرار بدید و خاصیت TopMost رو True کنید. همینطور باید Taskbar رو با برنامه تون Cover کنید. اونم فقط با درآوردن رزولوشن سیستم امکان پذیره. همینطور اگه نیاز دارید، طرف دسترسی از طریق صفحه کلید به TaskBar نداشته باشید، باید همان عملیات بالا رو انجام بدید.
برای Autorun کافیه اول چک کنید ببینید قبلا Key ساختید یا نه وگرنه بیاید تو مسیر:
Software\Microsoft\Windows\CurrentVersion\Run
یک Key با مقدار آدرس فایل اجرایی برنامه (توسط متد ()Application.ExecutablePath) و با نام خود برنامه ایجاد کنید. اینطوری هر وقت ویندوز بیاد بالا، برنامه شما هم لود میشه.
بازم اگه نیاز به سورس کد دارید، بگید من حوصله ام گرفت، برات می نویسم، امروز که دیگه حال ندارم
اگه تسک بار رو مخفی کنی 50% شاید گیر بدن ولی اگه باعث بسته شدن TaskManager بشی، اونوقت احتمال گیر دادنشون 70% هستش...... البته آنتی ویروس های امروزی و هوشمند، خصوصیات بیشتری رو مد نظر قرار میدن، شاید حتی اگه تو برتامتون تاخیر کاری داشته باشید و یا یه PictureBox گذاشته باشید، گیر ندن ولی خوب، هر چیزی رو باید از قبل تست کنید.
اینم پروژه ای که قرار بود برات بنویسم!!
امکانات این برنامه:
1. اجرای برنامه بصورت کاملا Full Screen (حتی پوشاندن Taskbar)
2. غیر فعال کردن منوی Taskbar (که اگه نیازی بهش نیست، میتونی حذفش کنی، بهر حال این تاثیری تو بقیه برنامه ات نمیگذاره!!! )
3. غیر فعال کردن کلید های Alt+F4 ،Alt+Esc ،Ctrl+Esc ،Alt+Tab ،Ctrl+Alt+Delete (بوسیله Hook کردن ویندوز)
4. اجرا بصورت Autorun
همین دیگه!!! فکر کنم همه چیزایی که خواسته بودی توش باشه.....
فقط اگه میخوای اون دکمه Exit رو برداری، حتما کدهایی که تو رویدادش هست رو بگذار جای دکمه خروج برنامه خودت.
موفق باشید
دمت گرمو خیرا دادا ، الهی خیر ببینی
من برنامه رو اجرا کردم
اما error زیر رو میده
The type or namespace name 'DllImportAttribute' could not be found (are you missing a using directive or an assembly reference?)
تو ویندوز 7 ران کردم Ctrl+Alt+Delete کار میکنه ، اول برنامه هم این ارور رو میده
---------------------------
---------------------------
System.UnauthorizedAccessException: Access to the registry key 'HKEY_CURRENT_USER\Software\Microsoft\Windows\Curr entVersion\Policies\System' is denied.
at Microsoft.Win32.RegistryKey.Win32Error(Int32 errorCode, String str)
at Microsoft.Win32.RegistryKey.CreateSubKey(String subkey, RegistryKeyPermissionCheck permissionCheck, RegistrySecurity registrySecurity)
at FullScreenEx.Form1.KillCtrlAltDelete() in C:\Documents and Settings\MEMPHIS\My Documents\Visual Studio 2008\Projects\FullScreenEx\FullScreenEx\Form1.cs:l ine 83
---------------------------
OK
---------------------------
احتمالا سیستم اجازه دسترسی و تنظیم رجیستری رو به یوزر شما نمیده. ببینید اقدام امنیتی خاصی روی سیستم شما اجرا شده یا نه.
نظر MSDN:
.NET Framework Class Library
UnauthorizedAccessException Class
The exception that is thrown when the operating system denies access because of an I/O error or a specific type of security error.
من این برنامه رو اجرا کردم
حالا چطور میتونم متوقفش کنم
برناتمت عالی بود دوست من
خیلی نکات ازش یاد گرفتم
ولی CTRL+ALT+DEL رو نمی بنده
فقط اون قسمتش کار نمی کنه
من از نود 32 استفاده می کنم ، و ویندوزم هم ایک پی سرویس 3 هستش
فکر کنم نود نمیزاره که بسته بشه
از ترای و کش استفاده شده ولی هیچ خطایی نمی ده
موفق باشی دوست من
ربطی به NOD 32 نداره، منم از همین آنتی ویروس استفاده می کنم... احتمالا ایشون یوزر ویندوزش Admin نیست یا از طرف Admin محدودیت خورده وگرنه روی سیستم من که کامل اجرا میشه، البته من روی XP تست کردم ولی نباید روی win7 مشکلی داشته باشه!!! من وب رو هم گشتم ولی چیزی در این مورد پیدا نکردم. به احتمال زیاد مشکل از سیستم خودتون هست...
برای متوقف کردنش هم یه دکمه Exit گذاشتم، دوست عزیز
این دفعه Visual Studio رو با پرمیشن Administrator ران کردم درست شد ، ولی هنوز Ctrl+Alt+Delete رو نمیبنده ، راستی من برنامه رو نصب نکردم فقط با Visual Studio ران کردم ولی وقتی دستگاه رو رستارت میکنم میاد بالا .
اگه کدی که برای غیر فعال کردن Ctrl+Alt+Delete نوشتم کار نمیکنه، حالا به هر دلیلی، میتونید از این کد بجاش استفاده کنید:
[DllImport("user32.dll")]
public static extern int FindWindow(string lpClassName, string lpWindowName);
[DllImport("User32.dll")]
public static extern Int32 SendMessage(int hWnd, int Msg, int wParam, int lParam);
public void KillCtrlAltDelete()
{
Process p = new Process();
p.StartInfo.WorkingDirectory = Environment.GetFolderPath(Environment.SpecialFolde r.System);
p.StartInfo.FileName = "taskmgr.exe";
p.StartInfo.CreateNoWindow = true;
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
p.Start();
}
public void EnableCtrlAltDelete()
{
const int WM_CLOSE = 0x0010;
int taskManager = FindWindow("#32770", "Windows Task Manager");
SendMessage(taskManager, WM_CLOSE, 0, 0);
}
با این کار برنامه Taskmanager رو بصورت Hidden اجرا می کنه و در این حالت امکان Kill کردن Process نیست. حتی با زدن کلیدهای Ctrl+Alt+Delete و سعی در اجرای دوباره اون، باز هم بصورت مخفی باقی میمونه. بعد از اتمام برنامه هم Taskmanager رو می بنده.
آخرین ویرایش به وسیله LORD AELX : سه شنبه 14 اردیبهشت 1389 در 09:57 صبح
برای اینکه دوباره بالا نیاد می تونی دستی یا توسط کد کلید ایجاد شده در رجیستری رو پاک کنی
اصلا می تونی عین نرم افزار های خوش آمد گوئی برنامه ها که ته فرم یک چک باکس برای بالا آمدن دوباره فرم در دفعات بعد میزارن ما هم یه چک باکس بزاریم
البته برای دوستمون که تاپیک رو ایجاد کردن لازم نیست چون کاربردش همین بود که در هنگام بالا آمدن ویندوز اونم بیاد بالاولی برای کاربرد های خاص میشه چک باکس رو گذاشت
ممنون از نمونه کد
چطور می شه یک textbox تو فروم گذاشت تا بتونم توش اطلاعات وارد کنم اخه وقتی برنامه اجرا می شه کی برد غیر فعال میشه .
می خوام بتونم ورود اطلاعات کنم اما نشه از برنامه خارج بشی. میشه ؟