PDA

View Full Version : غیرفعال کردن موس و کیبورد در سی شارپ



YasserDivaR
جمعه 01 بهمن 1400, 01:18 صبح
سلام دوستان من دنبال سورس یا کدی هستم که بتونم باهاش موس وکیبورد رو برای لحظاتی غیرفعال کنم
البته کد رو دارم ولی مشکل اینه که برنامه حتما باید دسترسی ادمین داشته باشه



publicpartialclassForm1:Form
{
[return:MarshalAs(UnmanagedType.Bool)]
[DllImport("user32.dll",CharSet=CharSet.Auto,ExactSpelling=true)]
publicstaticexternvoidBlockInput([In,MarshalAs(UnmanagedType.Bool)]bool fBlockIt);
publicForm1()
{
InitializeComponent();
}
privatevoid button1_Click(object sender,EventArgs e)
{
timer1.Enabled=true;
}
privatevoid timer1_Tick(object sender,EventArgs e)
{
BlockInput(true);
progressBar1.Increment(+5);
if(progressBar1.Value==100)
{
timer1.Enabled=false;
BlockInput(false);
progressBar1.Value=0;
}
}





و مورد دیگه چجوری میشه بجز تایمر یه حالت تغییری توی یکی از المان ها رو رصد کرد
مثلا اگه مقادیری به لیست باکس اضافه بشه البته اینم بگم اضافه شدن بصورت خودکار و لحظه ای هست

YasserDivaR
جمعه 01 بهمن 1400, 11:49 صبح
اینو پیدا کردم
Lock keyboard and mouse or prevent user leaving window in C # - It_qna (https://itqna.net/questions/7280/lock-keyboard-and-mouse-or-prevent-user-leaving-window-c)
ولی خب متاسفانه مشکل اینه کد بصورت ناقص کار میکنه و تا حدودی کلید های ترکیبی فعال هستن
میخوام بصورت کلی کیبور و موس غیرفعال بشه به جهت جلوگیری از سرقت اطلاعات

SajjadKhati
جمعه 01 بهمن 1400, 11:51 صبح
سلام
توی جزئیات این متد ، نوشته نیست که دسترسی admin میخواد .
اگه میخواد ، خوب ناچارا باید دسترسی ادمین برای برنامه تون ایجاد کنین دیگه .
این متد را در ویندوز 64 بیت هم تست کنین که جواب میده یا نه .

هر چند اگه فقط موس را بخواین نمایش ندین ، از متد زیر میتونستین استفاده کنین :

Cursor.Hide Method (System.Windows.Forms) | Microsoft Docs (https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.cursor.hide?view=netframework-4.8#system-windows-forms-cursor-hide)

روش دیگه هم شاید استفاده از hook کردن ، بکار بیاد (نمیدونم) :

Processing Global Mouse and Keyboard Hooks in C# - CodeProject (https://www.codeproject.com/Articles/7294/Processing-Global-Mouse-and-Keyboard-Hooks-in-C)

=========

برای با خبر شدن از تغییر ، از رویدادها استفاده کنید دیگه .

SajjadKhati
جمعه 01 بهمن 1400, 11:57 صبح
اینو پیدا کردم
Lock keyboard and mouse or prevent user leaving window in C # - It_qna (https://itqna.net/questions/7280/lock-keyboard-and-mouse-or-prevent-user-leaving-window-c)
ولی خب متاسفانه مشکل اینه کد بصورت ناقص کار میکنه و تا حدودی کلید های ترکیبی فعال هستن
میخوام بصورت کلی کیبور و موس غیرفعال بشه به جهت جلوگیری از سرقت اطلاعات

همین متدِ BlockInput هم که کار میکنید ، همینطوره :

BlockInput function (winuser.h) - Win32 apps | Microsoft Docs (https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-blockinput?redirectedfrom=MSDN)



The system will unblock input in the following cases:


The thread that blocked input unexpectedly exits without calling BlockInput with fBlock set to FALSE. In this case, the system cleans up properly and re-enables input.
The user presses CTRL+ALT+DEL or the system invokes the Hard System Error modal message box (for example, when a program faults or a device fails).


کاربر اگه کلیدهای ترکیبیِ CTRL+ALT+DEL را فشار بده ، موس و کیبردش فعال میشه .

YasserDivaR
جمعه 01 بهمن 1400, 12:46 عصر
همین متدِ BlockInput هم که کار میکنید ، همینطوره :

BlockInput function (winuser.h) - Win32 apps | Microsoft Docs (https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-blockinput?redirectedfrom=MSDN)



کاربر اگه کلیدهای ترکیبیِ CTRL+ALT+DEL را فشار بده ، موس و کیبردش فعال میشه .

سلام و درود بر شما
این موارد رو بررسی کردم
هدفم اینه توی سیستم خودم به محض اتصال فلش مموری کیبور و موس غیرفعال بشه
البته مشکل اینه این دستورات فقط در حالت ادمین اجرا میشه و مورد دیگه هم اینه که اون اکانت دسترسی ادمین نداره و محدوده
روش هایی هست ولی خب تاجایی که میدونم شدنیه

یه مورد دیگه بدون استفاده از تایمر چجوری میشه یه حالتی از سیستم رو رصد کرد منظورم Realtime هست مثلا گرفتن کد درایو های USB بصورت مانیتورینگ باشه البته بجز تایمر

چون اگه تایمر اضافه کنم هی باید مثلا لیست باکس و کلیر کنم که باعث اختلال در برنامه میشه

336699
جمعه 01 بهمن 1400, 13:58 عصر
سلام و درود بر شما
این موارد رو بررسی کردم
هدفم اینه توی سیستم خودم به محض اتصال فلش مموری کیبور و موس غیرفعال بشه
البته مشکل اینه این دستورات فقط در حالت ادمین اجرا میشه و مورد دیگه هم اینه که اون اکانت دسترسی ادمین نداره و محدوده
روش هایی هست ولی خب تاجایی که میدونم شدنیه

یه مورد دیگه بدون استفاده از تایمر چجوری میشه یه حالتی از سیستم رو رصد کرد منظورم Realtime هست مثلا گرفتن کد درایو های USB بصورت مانیتورینگ باشه البته بجز تایمر

چون اگه تایمر اضافه کنم هی باید مثلا لیست باکس و کلیر کنم که باعث اختلال در برنامه میشه

با فرض اینکه برنامه شما به محض اتصال فلش، کیبورد وموس رو غیر فعال کرد.

خب کابر میتونه یه برنامه دیگه در سیستم ران بکنه که به محض اتصال فلش به صورت اتوماتیک فایلها رو کپی بکنه.

در نتیجه برای جلوگیری از سرقت فایلها باید جلوی خواندن و نوشتن اطلاعات روی فلش و یا هارد اکسرنال رو بگیرید.

YasserDivaR
جمعه 01 بهمن 1400, 14:01 عصر
با فرض اینکه برنامه شما به محض اتصال فلش، کیبورد وموس رو غیر فعال کرد.

خب کابر میتونه یه برنامه دیگه در سیستم ران بکنه که به محض اتصال فلش به صورت اتوماتیک فایلها رو کپی بکنه.

در نتیجه برای جلوگیری از سرقت فایلها باید جلوی خواندن و نوشتن اطلاعات روی فلش و یا هارد اکسرنال رو بگیرید.

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

336699
جمعه 01 بهمن 1400, 14:38 عصر
خب برا جلوگیری از این روش هم نیازمند دسترسی ادمین هست با استفاده از کلید های رجیستری
البته افراد دانش فنی لازم رو ندارن
وقتی قرار باشه جلوی کپی اطلاعات رو بگیریم

دیگر نیازی نیست که مدام این قابلیت رو فعال و یا غیر فعال بکنیم

یکبار کاربر ادمین امکان کپی اطلاعات در فلش رو غیر فعال میکنه

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

اگر سیستم یک سیستم شخصی باشه شما نمیتوانید جلوی اون شخص رو بگیرید

SajjadKhati
جمعه 01 بهمن 1400, 20:11 عصر
سلام و درود بر شما
این موارد رو بررسی کردم
هدفم اینه توی سیستم خودم به محض اتصال فلش مموری کیبور و موس غیرفعال بشه
البته مشکل اینه این دستورات فقط در حالت ادمین اجرا میشه و مورد دیگه هم اینه که اون اکانت دسترسی ادمین نداره و محدوده
روش هایی هست ولی خب تاجایی که میدونم شدنیه


سلامی مجدد
اگه دسترسی ادمین ندارین ، تا جایی که میدونم ، کلا یک راه براتون باقی میمونه اون هم استفاده از Hook هست (نمیدونم که این روش به دسترسی ادمین نیاز داره یا نه) (البته اگه از اون متد Cursor.Hide هم استفاده نمیکنید) . روش دیگه ای را نمیدونم .

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

Hooks Overview - Win32 apps | Microsoft Docs (https://docs.microsoft.com/en-us/windows/win32/winmsg/about-hooks?redirectedfrom=MSDN)

و همچنین همون لینکی که دادید و قبلا هم دادم ، منابعی درباره ی Hook هستن .

جریان Hook را نمیدونم ولی متد BlockInput ، به راحتی قابل دور زدن هست . از فشردن کلید Ctrl+Alt+Del گرفته تا اینکه برنامه (یا نخ ای که از اون نخ تون ، این متد را فراخونی کردین) ، بسته بشه و تمام بشه ، روال کیبرد و موس ، به حالت اول و عادی برای کاربر برمیگرده (یا Message یا پیغام Hard System Error فراخونی بشه) .

خودِ پسورد ویندوز براحتی قابل دور زدن هست با نرم افزارهای تحت بوت و ... .




یه مورد دیگه بدون استفاده از تایمر چجوری میشه یه حالتی از سیستم رو رصد کرد منظورم Realtime هست مثلا گرفتن کد درایو های USB بصورت مانیتورینگ باشه البته بجز تایمر

چون اگه تایمر اضافه کنم هی باید مثلا لیست باکس و کلیر کنم که باعث اختلال در برنامه میشه


کد درایوهای usb یعنی چی؟
منظورتون شناسه ی درایو هست یا نام درایو؟
فرضا وقتی یه فلش درایو ، به سیستم متصل شد ، برنامه تون مطلع بشه؟ منظورتون اینه؟