PDA

View Full Version : مبتدی: هيچ راه خروجي در برنامه نباشه



repo20
سه شنبه 13 بهمن 1388, 13:59 عصر
سلام دوستان
يه سوال
مي خواهم در برنامه اي درست كردم هيچ راه خروجي نباشه به جز يه button .
براي مثال كليد هاي Alt+F4 وAlt+Tab كارنكند و Windows Task Manager هم اجرا نشه.

AliRezaPro
سه شنبه 13 بهمن 1388, 16:30 عصر
باید از API استفاده کنی

http://www.experts-exchange.com/Programming/Languages/C_Sharp/Q_20675500.html

http://www.codeproject.com/KB/cs/globalhook.aspx

repo20
سه شنبه 13 بهمن 1388, 17:45 عصر
باید از 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كار نكنه خيلي ممنون ميشم.:لبخندساده:

debugger
سه شنبه 13 بهمن 1388, 22:08 عصر
َAlt+Tab را به عنوان یک کلید ترکیبی تو برنامه ات بگیر .

مثلا وقتی این کلید ها را زد یه پیغام بیاد

ایجوری مال ویندوز کار نخواهد کرد

repo20
سه شنبه 13 بهمن 1388, 22:35 عصر
َAlt+Tab را به عنوان یک کلید ترکیبی تو برنامه ات بگیر .

مثلا وقتی این کلید ها را زد یه پیغام بیاد

ایجوری مال ویندوز کار نخواهد کرد


ميشه بيشتر توضيح بديد يا يك نمونه كد يا سورس بذاريد.
چطوري به عنوان یک کلید ترکیبی تو برنامه بگيرمش.
شرمنده من تازه كارم و به كمك شما شديدا نيازمندم.

debugger
چهارشنبه 14 بهمن 1388, 09:37 صبح
این کد ها برای غیر فعال کردن 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();
}
}
}

repo20
چهارشنبه 14 بهمن 1388, 14:54 عصر
[quote=debugger;902096]این کد ها برای غیر فعال کردن Alt+Tab, Alt+Esc, Ctrl+Esc هست البته برای محیط خارج از دیباگ



ممنون ولي من تازه كارم و نميدونم اينو كجاي برنامه بايد بنويسم.
لطفا اگه ميشه يه كد كوچيك يا يه نمونه سورس بديد.

يك دنيا مرسي:لبخندساده:

repo20
چهارشنبه 14 بهمن 1388, 15:31 عصر
این کد ها برای غیر فعال کردن 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();
}
}
}





هيچ تفاوتي نداشت.
هنوز هم كليد هاي Alt+Tab وAlt+Esc و Ctrl+Escكار مي كنند . :افسرده:

debugger
چهارشنبه 14 بهمن 1388, 22:44 عصر
دوست عزیز در محیط دیباگ یا همون ویژوال استدیو کار می کنه

شما کد را بنویس و برنامه را build کن و از ویژوال استدیو خارج شو و برنامه را اجرا کن یعنی فایل اجرایی برنامه را مستقل اجرا کن

اونوقت ببین کار می کنه یا نه ؟؟

repo20
پنج شنبه 15 بهمن 1388, 10:24 صبح
دوست عزیز در محیط دیباگ یا همون ویژوال استدیو کار می کنه

شما کد را بنویس و برنامه را build کن و از ویژوال استدیو خارج شو و برنامه را اجرا کن یعنی فایل اجرایی برنامه را مستقل اجرا کن

اونوقت ببین کار می کنه یا نه ؟؟


خيلي خيلي ممنون نجاتم دادي.