PDA

View Full Version : فرم هميشه فعال



alinaghiha
جمعه 29 آبان 1388, 16:23 عصر
دوستان سلام
من ميخوام فقل كودك طراحي كنم يعني يه دكمه رو زدن يه فرم بياد بالا تا رمز ندادن بسته نشه
1- چطور ميشه يه فرم هميشه فعال طراحي كرد
2-چطور ميشه فرمي ساخت كه بسته نشه تا وقتي رمز درست وارد نشده
با تشكر

khmahdi
جمعه 29 آبان 1388, 18:21 عصر
فكر كنم اول بايد دستور هايي مثل Alt+Ctrl+Delete و Alt+F4 و Alt+Tab و... رو از كار بندازي ، بعد خاصيت TopMost فرم رو true كني تا هميشه رو باشه ودر ضمن اندازه ي فرم رو فول اسكرين كني

asd_moghadas
شنبه 30 آبان 1388, 07:22 صبح
سلام دوست عزیز
میشه اون کلید هایی راکه ذکر کردید درقالب کد توضیح بدی که چطوراین کاررا انجام بدهم چون مشکل من هم هست
ممنون

asd_moghadas
شنبه 30 آبان 1388, 12:00 عصر
ایا کسی نمی تواند راهنمایی کنه
همچنان منتظر

alinaghiha
دوشنبه 02 آذر 1388, 09:25 صبح
فكر كنم اول بايد دستور هايي مثل Alt+Ctrl+Delete و Alt+F4 و Alt+Tab و... رو از كار بندازي ، بعد خاصيت TopMost فرم رو true كني تا هميشه رو باشه ودر ضمن اندازه ي فرم رو فول اسكرين كني
اگه فول اسكرين كنم مشكل به كلي حل ميشه
اما خيلي ضايع مي شه يه فرم كل صفحه رو بگيره
من ميخوام يه فرم كوچيك بياد بالا و ديگه نشه كاري كرد
تو حالت نرمال اگه TopMost كنم كاربر مي تونه از كنار فرم فعال روي منو يا ساير گزينه ها كار كنه

shahab_ss
دوشنبه 02 آذر 1388, 10:25 صبح
به نظر من شما پروسه LogIn رو مجدداً اجرا کنی ،نتیجه کار میشه همونی که میخواستی!!!

alinaghiha
دوشنبه 02 آذر 1388, 10:51 صبح
منظور از اجراي login چيه
دوست عزيز اگه برنامه بسته بشه فايده نداره
اين قسمت رو واسه برنامه درمانگاه ميخوام وقتي منشي كامپيوتر را رها ميكنه كه خيلي هم اين اتفاق ميوفته يه دكمه بزنه و قفل بشه حتي كاربر ديگه هم نتونه با رمز خودش وارد شه فقط همين كاربر امكان ورود داشته باشه
من الان همون فرم تمام صفحه بدون نوار عنوان رو ساختم اما به نظرم زياد جالب نيست

Arash_janusV3
دوشنبه 02 آذر 1388, 11:00 صبح
سلام
منظورش همون فرم ورود کاربر بود که درست هم هست فقط وقتی که کاربر مثلا F را زد این فرم با مقدار اسم ورودی کاربر ست کن و تا رمز رو نزد فرم بسته نشه و اگر خروج LOGIN رو زد همه فرمها بسته شه

shahab_ss
دوشنبه 02 آذر 1388, 11:09 صبح
خوب اگر برنامه باید توی حالت جاری بمونه ،باید یک فرم باز کنی و کلمه عبور کاربر جاری رو دوباره ازش بگیری و بعد اون فرم رو ببندی.
توی زمانی که این فرم باز هست هم باید ازش خوووب محافظت کنی:چشمک:

از این کد میتونی استفاده کنی :



namespace BLL
{
public partial class frmLockScreen : Form
{



public struct KBDLLHOOKSTRUCT
{
public int vkCode;
public int scanCode;
public int flags;
public int time;
public int dwExtraInfo;
}


public delegate int LowLevelKeyboardProcDelegate(int nCode, int wParam, ref KBDLLHOOKSTRUCT lParam);
public static int intLLKey;


[DllImport("user32", EntryPoint = "UnhookWindowsHookEx", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
public static extern int UnhookWindowsHookEx(int hHook);

[DllImport("user32", EntryPoint = "SetWindowsHookExA", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
public static extern int SetWindowsHookEx(int idHook, LowLevelKeyboardProcDelegate lpfn, int hMod, int dwThreadId);



[DllImport("user32", EntryPoint = "CallNextHookEx", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
public static extern int CallNextHookEx(int hHook, int nCode, int wParam, ref KBDLLHOOKSTRUCT lParam);
public const int WH_KEYBOARD_LL = 13;

public int LowLevelKeyboardProc(int nCode, int wParam, ref KBDLLHOOKSTRUCT lParam)
{
bool blnEat = false;

try
{
switch (wParam)
{
case 256:
case 257:
case 260:
case 261:
//Alt+Tab, Alt+Esc, Ctrl+Esc, Windows Key,
//blnEat = ((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)) |
// ((lParam.vkCode == 73) && (lParam.flags == 0) |
// ((lParam.vkCode == 115) && (lParam.flags == 32)));
// blnEat = ((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)) | ((lParam.vkCode == 73) && (lParam.flags == 0));
blnEat = ((lParam.vkCode == 115) && (lParam.flags == 32));

break;
}

}
catch (Exception ex) { MessageBox.Show(ex.Message); }


if (blnEat == true)
{
return 1;
}
else
{
return CallNextHookEx(0, nCode, wParam, ref lParam);
}


}



private void frmLockScreen_Load(object sender, EventArgs e)
{
intLLKey = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, System.Runtime.InteropServices.Marshal.GetHINSTANC E(System.Reflection.Assembly.GetExecutingAssembly( ).GetModules()[0]).ToInt32(), 0);
}

private void frmLockScreen_FormClosing(object sender, FormClosingEventArgs e)
{
UnhookWindowsHookEx(intLLKey);
}



}

}

alinaghiha
دوشنبه 02 آذر 1388, 11:57 صبح
كدتون براي من خيلي سنگينه يه توضيح بدي ممنون ميشم
كاش خط بالاي namespace رو ميدادي آخه از DllImport خطا ميگيره احتمالا بايد از هدر فايلها (using) باشه

saed2006
دوشنبه 02 آذر 1388, 12:52 عصر
دوست عزیز فرم رو با حالت showdialg نمایش بده

AliRezaPro
دوشنبه 02 آذر 1388, 13:45 عصر
شما میتونی با هر دکه ی فانکشن یا بقیه فرم لاگین را فراخوانی کنید(فرم لاگین البته از قبل اید طراحی شده باشد)
در این صورت فرم اصلی را نمیشود تغییر داد(داده ئارد کرد یا دیلت کرد)
منظورتون همین بود؟
این هم کد
در رویداد KeyPress فرم
private void Form1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar ==Convert .ToChar ( Keys.Escape))
{
Form2 frm = new Form2();
frm.ShowDialog(this);
}

alinaghiha
سه شنبه 03 آذر 1388, 13:52 عصر
شما میتونی با هر دکه ی فانکشن یا بقیه فرم لاگین را فراخوانی کنید(فرم لاگین البته از قبل اید طراحی شده باشد)

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

alinaghiha
چهارشنبه 04 آذر 1388, 07:35 صبح
شما میتونی با هر دکه ی فانکشن یا بقیه فرم لاگین را فراخوانی کنید(فرم لاگین البته از قبل اید طراحی شده باشد)
در این صورت فرم اصلی را نمیشود تغییر داد(داده ئارد کرد یا دیلت کرد)
منظورتون همین بود؟
این هم کد
در رویداد KeyPress فرم
private void Form1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar ==Convert .ToChar ( Keys.Escape))
{
Form2 frm = new Form2();
frm.ShowDialog(this);
}
به نتيجه نرسيدم فرم 1 فرم لاگينه يا فرم 2 البته لاگينو خودم ساختم

AliRezaPro
چهارشنبه 04 آذر 1388, 14:47 عصر
Form2 رو فرم لاگین در نظر گرفته بودم

alinaghiha
چهارشنبه 04 آذر 1388, 17:55 عصر
فرم لاگين يعني چه!
ميشه تو يه پروژه بهم بدي
من هر كار كردم جواب نداد

saed2006
چهارشنبه 04 آذر 1388, 18:06 عصر
منظورش از فرم لاگین همون showdialg هست

AliRezaPro
پنج شنبه 05 آذر 1388, 09:22 صبح
شما میخواستید که وقتی کاربر به یک دکمه ی خاص کلیک کرد(مثلا خواست بره جایی و کامپیوتر رو رها کنه)فرم لاگین بیاد بالا تا اطلاعات یوزر پس رو بگیره
به شرط آنکه فرم لاگین از قبل درست شده بود (form2)من دستوری نوشتم که با زدن escape این فرم(فرم لاگین) بیاد بالا تا کسی جزء خود مسئول نتونه با برنامه کار کنه

fjm11100
پنج شنبه 05 آذر 1388, 11:44 صبح
بهترین کار اینه که یک فرم مول اسکرین داشته باشی اما وقتی کاربر صفحه شما را فعال کرد بجای یک فرم بیریخت یه عکس از دسکتاپ بگیری و رو فرمت نشون بدی تا به نظر بیاد دسکتاپ هست اما غیر فعاله
برای غیر فعال کردن کلیدهای Alt+Ctrl+Del وغیره نمونه کد تو اینترنت فراوونه

AliRezaPro
پنج شنبه 05 آذر 1388, 13:01 عصر
فرم رو میشه جذاب کرد;
به نظر من حرفه ایی تر اینه که فرم لاگین رو دوباره نشون داد تا اینکه کلی کد اظافه برای عکس گرفتن و همینطور از کار انتداختن کلیدهای اصلی ویندوز انجام داد.

khmahdi
پنج شنبه 05 آذر 1388, 20:56 عصر
بهترین کار اینه که یک فرم مول اسکرین داشته باشی اما وقتی کاربر صفحه شما را فعال کرد بجای یک فرم بیریخت یه عکس از دسکتاپ بگیری و رو فرمت نشون بدی تا به نظر بیاد دسکتاپ هست اما غیر فعاله
برای غیر فعال کردن کلیدهای Alt+Ctrl+Del وغیره نمونه کد تو اینترنت فراوونه
حرف ایشون کاملا درسته ،باید یه عکس از صفحه بگیرید وبذارید تو بکگراند فرم لاگینتون ،بعد تصور می شه که پنجره ها هستند ولی دستکاری نمی شه

mohammadjavad
پنج شنبه 05 آذر 1388, 21:43 عصر
چه لزومی به اینکار هست؟

system32
جمعه 06 آذر 1388, 08:04 صبح
می تونی یه تایمر بزارید که همینطور روی فرمتون فوکوس کنه.

alinaghiha
دوشنبه 09 آذر 1388, 07:44 صبح
ممنون از كمك دوستان من چند روزي نت نداشتم
تا اينجا 3 راه مختلف اشاره شده من بهتره 3 تا رو بكار برده و مقايسه كنم
بازم ممنون