PDA

View Full Version : سوال: برنامه فول اسکرین



maxpayn2
یک شنبه 12 اردیبهشت 1389, 08:15 صبح
سلام
میخوام یه برنامه بنویسم که وقتی ویندوز بالا اومد بلافاصله run بشه و کل صفحه مانیتور رو پر کنه و کاربر به جز صفحه برنامه به هیچی دیگه مثل desktop , start , ... دسترسی نداشته باشه و فقط بتونه از اون برنامه استفاده کنه ، راهش چیه ؟
ممنون

LORD AELX
یک شنبه 12 اردیبهشت 1389, 10:19 صبح
فول اسکرین اجرا کردن برنامت که کاری نداره ولی این که کار با بقیه اجزا غیر ممکن بشه جای کار داره، در حالت معمول میتونی برنامه ات رو بصورت 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();
}

taghvajou
یک شنبه 12 اردیبهشت 1389, 10:33 صبح
سلام به همه
ویژگی نمایش فرم رو به حالت ماکسیمایزد هم یادتون نره!

maxpayn2
یک شنبه 12 اردیبهشت 1389, 10:42 صبح
باید برنامه ات مثل ویروس عمل کنه و دسترسی به TaskManager و ... رو ببنده و ضمنا TaskBar رو هم ناپدید کنه.


- آنتی ویروس ها بهش گیر نمیدن ؟

- غیر از اوایل یادگیری C# دیگه برای ویندوز برنامه ننوشتم و فقط ASP.Net کار کردم ، میشه بگی این کد رو کجا باید بنویسم ؟

- در باره Auto run بودن نظری نداری ؟

LORD AELX
یک شنبه 12 اردیبهشت 1389, 10:59 صبح
کد کامل برنامه رو گذاشتم برات فقط کافیه اونو تو کلاس اصلی برنامه کپی کنی. اصلا میخوای یه کد کامل از همه چیزایی که گفتی برات بگذارم؟؟؟

maxpayn2
یک شنبه 12 اردیبهشت 1389, 11:28 صبح
آنتی ویروس ها بهش گیر نمیدن ؟

LORD AELX
یک شنبه 12 اردیبهشت 1389, 11:33 صبح
ببینید دوست عزیز، کلی میگم،

اول شما باید برنامتون رو بصورت Maximized اجرا کنید، مقدار FormBorderStyle رو برابر None قرار بدید و خاصیت TopMost رو True کنید. همینطور باید Taskbar رو با برنامه تون Cover کنید. اونم فقط با درآوردن رزولوشن سیستم امکان پذیره. همینطور اگه نیاز دارید، طرف دسترسی از طریق صفحه کلید به TaskBar نداشته باشید، باید همان عملیات بالا رو انجام بدید.

برای Autorun کافیه اول چک کنید ببینید قبلا Key ساختید یا نه وگرنه بیاید تو مسیر:

Software\Microsoft\Windows\CurrentVersion\Run
یک Key با مقدار آدرس فایل اجرایی برنامه (توسط متد ()Application.ExecutablePath) و با نام خود برنامه ایجاد کنید. اینطوری هر وقت ویندوز بیاد بالا، برنامه شما هم لود میشه.

بازم اگه نیاز به سورس کد دارید، بگید من حوصله ام گرفت، برات می نویسم، امروز که دیگه حال ندارم :چشمک:

LORD AELX
یک شنبه 12 اردیبهشت 1389, 11:37 صبح
آنتی ویروس ها بهش گیر نمیدن ؟

اگه تسک بار رو مخفی کنی 50% شاید گیر بدن ولی اگه باعث بسته شدن TaskManager بشی، اونوقت احتمال گیر دادنشون 70% هستش...... البته آنتی ویروس های امروزی و هوشمند، خصوصیات بیشتری رو مد نظر قرار میدن، شاید حتی اگه تو برتامتون تاخیر کاری داشته باشید و یا یه PictureBox گذاشته باشید، گیر ندن ولی خوب، هر چیزی رو باید از قبل تست کنید. :چشمک:

maxpayn2
یک شنبه 12 اردیبهشت 1389, 11:47 صبح
برای Autorun کافیه اول چک کنید ببینید قبلا Key ساختید یا نه وگرنه بیاید تو مسیر:

Software\Microsoft\Windows\CurrentVersion\Runیک Key با مقدار آدرس فایل اجرایی برنامه (توسط متد ()Application.ExecutablePath) و با نام خود برنامه ایجاد کنید. اینطوری هر وقت ویندوز بیاد بالا، برنامه شما هم لود میشه.

بازم اگه نیاز به سورس کد دارید، بگید من حوصله ام گرفت، برات می نویسم، امروز که دیگه حال ندارم :چشمک:

اگه حوصلت گرف لطفت رو از ما دریغ نکن

LORD AELX
دوشنبه 13 اردیبهشت 1389, 11:40 صبح
اینم پروژه ای که قرار بود برات بنویسم!! :قلب: :کف:

امکانات این برنامه:

1. اجرای برنامه بصورت کاملا Full Screen (حتی پوشاندن Taskbar)
2. غیر فعال کردن منوی Taskbar (که اگه نیازی بهش نیست، میتونی حذفش کنی، بهر حال این تاثیری تو بقیه برنامه ات نمیگذاره!!! :متفکر: )
3. غیر فعال کردن کلید های Alt+F4 ،Alt+Esc ،Ctrl+Esc ،Alt+Tab ،Ctrl+Alt+Delete (بوسیله Hook کردن ویندوز)
4. اجرا بصورت Autorun

همین دیگه!!! :لبخند: فکر کنم همه چیزایی که خواسته بودی توش باشه..... :لبخندساده:

فقط اگه میخوای اون دکمه Exit رو برداری، حتما کدهایی که تو رویدادش هست رو بگذار جای دکمه خروج برنامه خودت. :چشمک:

موفق باشید :قلب:

maxpayn2
دوشنبه 13 اردیبهشت 1389, 12:33 عصر
دمت گرمو خیرا دادا ، الهی خیر ببینی

papil2010
دوشنبه 13 اردیبهشت 1389, 12:53 عصر
من برنامه رو اجرا کردم
اما error زیر رو میده
The type or namespace name 'DllImportAttribute' could not be found (are you missing a using directive or an assembly reference?)

LORD AELX
دوشنبه 13 اردیبهشت 1389, 14:15 عصر
من برنامه رو اجرا کردم
اما error زیر رو میده
The type or namespace name 'DllImportAttribute' could not be found (are you missing a using directive or an assembly reference?)



باید از این namespace استفاده کنید:

using System.Runtime.InteropServices;

maxpayn2
دوشنبه 13 اردیبهشت 1389, 14:36 عصر
تو ویندوز 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
---------------------------

LORD AELX
دوشنبه 13 اردیبهشت 1389, 18:04 عصر
احتمالا سیستم اجازه دسترسی و تنظیم رجیستری رو به یوزر شما نمیده. ببینید اقدام امنیتی خاصی روی سیستم شما اجرا شده یا نه. :متفکر:


نظر 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.

papil2010
دوشنبه 13 اردیبهشت 1389, 20:22 عصر
من این برنامه رو اجرا کردم
حالا چطور میتونم متوقفش کنم

hojjatshariffam
دوشنبه 13 اردیبهشت 1389, 23:47 عصر
برناتمت عالی بود دوست من
خیلی نکات ازش یاد گرفتم

ولی CTRL+ALT+DEL رو نمی بنده
فقط اون قسمتش کار نمی کنه

من از نود 32 استفاده می کنم ، و ویندوزم هم ایک پی سرویس 3 هستش

فکر کنم نود نمیزاره که بسته بشه
از ترای و کش استفاده شده ولی هیچ خطایی نمی ده

موفق باشی دوست من

LORD AELX
سه شنبه 14 اردیبهشت 1389, 08:20 صبح
ربطی به NOD 32 نداره، منم از همین آنتی ویروس استفاده می کنم... احتمالا ایشون یوزر ویندوزش Admin نیست یا از طرف Admin محدودیت خورده وگرنه روی سیستم من که کامل اجرا میشه، البته من روی XP تست کردم ولی نباید روی win7 مشکلی داشته باشه!!! :متفکر: من وب رو هم گشتم ولی چیزی در این مورد پیدا نکردم. به احتمال زیاد مشکل از سیستم خودتون هست... :چشمک:

برای متوقف کردنش هم یه دکمه Exit گذاشتم، دوست عزیز :لبخندساده:

maxpayn2
سه شنبه 14 اردیبهشت 1389, 08:25 صبح
این دفعه Visual Studio رو با پرمیشن Administrator ران کردم درست شد ، ولی هنوز Ctrl+Alt+Delete رو نمیبنده ، راستی من برنامه رو نصب نکردم فقط با Visual Studio ران کردم ولی وقتی دستگاه رو رستارت میکنم میاد بالا .

LORD AELX
سه شنبه 14 اردیبهشت 1389, 09:45 صبح
اگه کدی که برای غیر فعال کردن 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:47 صبح
این دفعه Visual Studio رو با پرمیشن Administrator ران کردم درست شد ، ولی هنوز Ctrl+Alt+Delete رو نمیبنده ، راستی من برنامه رو نصب نکردم فقط با Visual Studio ران کردم ولی وقتی دستگاه رو رستارت میکنم میاد بالا .


این برنامه نصبی نیست، دفعه اول که run میشه، خودش یه اتوران توی registry میسازه که باعث میشه هر دفعه با start up ویندوز لود بشه :چشمک:

hojjatshariffam
سه شنبه 14 اردیبهشت 1389, 12:05 عصر
این دفعه Visual Studio رو با پرمیشن Administrator ران کردم درست شد ، ولی هنوز Ctrl+Alt+Delete رو نمیبنده ، راستی من برنامه رو نصب نکردم فقط با Visual Studio ران کردم ولی وقتی دستگاه رو رستارت میکنم میاد بالا .
برای اینکه دوباره بالا نیاد می تونی دستی یا توسط کد کلید ایجاد شده در رجیستری رو پاک کنی
اصلا می تونی عین نرم افزار های خوش آمد گوئی برنامه ها که ته فرم یک چک باکس برای بالا آمدن دوباره فرم در دفعات بعد میزارن ما هم یه چک باکس بزاریم
البته برای دوستمون که تاپیک رو ایجاد کردن لازم نیست چون کاربردش همین بود که در هنگام بالا آمدن ویندوز اونم بیاد بالاولی برای کاربرد های خاص میشه چک باکس رو گذاشت

top_level
چهارشنبه 31 شهریور 1389, 10:30 صبح
ممنون از نمونه کد
چطور می شه یک textbox تو فروم گذاشت تا بتونم توش اطلاعات وارد کنم اخه وقتی برنامه اجرا می شه کی برد غیر فعال میشه .
می خوام بتونم ورود اطلاعات کنم اما نشه از برنامه خارج بشی. میشه ؟