سلام دوستان
يه سوال
مي خواهم در برنامه اي درست كردم هيچ راه خروجي نباشه به جز يه button .
براي مثال كليد هاي Alt+F4 وAlt+Tab كارنكند و Windows Task Manager هم اجرا نشه.
Printable View
سلام دوستان
يه سوال
مي خواهم در برنامه اي درست كردم هيچ راه خروجي نباشه به جز يه button .
براي مثال كليد هاي Alt+F4 وAlt+Tab كارنكند و Windows Task Manager هم اجرا نشه.
باید از API استفاده کنی
http://www.experts-exchange.com/Programming/Languages/C_Sharp/Q_20675500.html
http://www.codeproject.com/KB/cs/globalhook.aspx
دوست عزيز
براي كار نكردن Alt+F4 توي رویداد FormClosing نوشتم:
e.Cancel = true;
براي اجرا نشدن Windows Task Manager هم يه تايمر گذاشتم و توي اون نوشتم:
Process[] ps = Process.GetProcesses();
foreach (Process p in ps)
{
if (p.ProcessName.ToLower() == "taskmgr")
{
p.Kill();
}
}
كد هاي بالا كاملا كار كرد اما مشكل من غير فعال كردن Alt+Tabاست كه بوسيله Alt+Tabميشه از برنامه اي به برنامه ديگر رفت.
اگه كدي بگيد كه Alt+Tabكار نكنه خيلي ممنون ميشم.:لبخندساده:
َAlt+Tab را به عنوان یک کلید ترکیبی تو برنامه ات بگیر .
مثلا وقتی این کلید ها را زد یه پیغام بیاد
ایجوری مال ویندوز کار نخواهد کرد
این کد ها برای غیر فعال کردن Alt+Tab, Alt+Esc, Ctrl+Esc هست البته برای محیط خارج از دیباگ
namespace BlockShortcuts
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private delegate int LowLevelKeyboardProcDelegate(int nCode, int
wParam, ref KBDLLHOOKSTRUCT lParam);
[DllImport("user32.dll", EntryPoint = "SetWindowsHookExA", CharSet = CharSet.Ansi)]
private static extern int SetWindowsHookEx(
int idHook,
LowLevelKeyboardProcDelegate lpfn,
int hMod,
int dwThreadId);
[DllImport("user32.dll")]
private static extern int UnhookWindowsHookEx(int hHook);
[DllImport("user32.dll", EntryPoint = "CallNextHookEx", CharSet = CharSet.Ansi)]
private static extern int CallNextHookEx(
int hHook, int nCode,
int wParam, ref KBDLLHOOKSTRUCT lParam);
const int WH_KEYBOARD_LL = 13;
private int intLLKey;
private KBDLLHOOKSTRUCT lParam;
private struct KBDLLHOOKSTRUCT
{
public int vkCode;
int scanCode;
public int flags;
int time;
int dwExtraInfo;
}
private int LowLevelKeyboardProc(
int nCode, int wParam,
ref KBDLLHOOKSTRUCT lParam)
{
bool blnEat = false;
switch (wParam)
{
case 256:
case 257:
case 260:
case 261:
//Alt+Tab, Alt+Esc, Ctrl+Esc, Windows Key
if (((lParam.vkCode == 9) && (lParam.flags == 32)) ||
((lParam.vkCode == 27) && (lParam.flags == 32)) || ((lParam.vkCode ==
27) && (lParam.flags == 0)) || ((lParam.vkCode == 91) && (lParam.flags
== 1)) || ((lParam.vkCode == 92) && (lParam.flags == 1)) || ((true) &&
(lParam.flags == 32)))
{
blnEat = true;
}
break;
}
if (blnEat)
return 1;
else return CallNextHookEx(0, nCode, wParam, ref lParam);
}
private void KeyboardHook(object sender, EventArgs e)
{
intLLKey = SetWindowsHookEx(WH_KEYBOARD_LL,new LowLevelKeyboardProcDelegate(LowLevelKeyboardProc) ,
System.Runtime.InteropServices.Marshal.GetHINSTANC E(
System.Reflection.Assembly.GetExecutingAssembly(). GetModules()[0]).ToInt32(), 0);
}
private void ReleaseKeyboardHook()
{
intLLKey = UnhookWindowsHookEx(intLLKey);
}
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
if (checkBox1.Checked)
KeyboardHook(this, e);
else
ReleaseKeyboardHook();
}
}
}
[quote=debugger;902096]این کد ها برای غیر فعال کردن Alt+Tab, Alt+Esc, Ctrl+Esc هست البته برای محیط خارج از دیباگ
ممنون ولي من تازه كارم و نميدونم اينو كجاي برنامه بايد بنويسم.
لطفا اگه ميشه يه كد كوچيك يا يه نمونه سورس بديد.
يك دنيا مرسي:لبخندساده:
دوست عزیز در محیط دیباگ یا همون ویژوال استدیو کار می کنه
شما کد را بنویس و برنامه را build کن و از ویژوال استدیو خارج شو و برنامه را اجرا کن یعنی فایل اجرایی برنامه را مستقل اجرا کن
اونوقت ببین کار می کنه یا نه ؟؟