PDA

View Full Version : قفل کردن موس وکیبورد Locked Mouse & Keyboard



Plus.Plus
یک شنبه 14 اسفند 1384, 15:57 عصر
Salam be tamame baxaye bahale barnamenevis.org ye soal dige dashtam khedmatetoon

قفل کردن موس وکیبورد Locked Mouse & Keyboard

mamnon misham age kasi bege:چشمک: :چشمک: :چشمک: :بوس: :بوس: :بوس:

Payman62
یک شنبه 14 اسفند 1384, 17:45 عصر
Private Declare Function BlockInput Lib "user32.dll" (ByVal fblock As Long) As Long

Private Sub Form_Load()
BlockInput True
End Sub

The One
دوشنبه 15 اسفند 1384, 15:52 عصر
Motmaeni Payman jan ke in Code kar mide?

Payman62
دوشنبه 15 اسفند 1384, 18:20 عصر
Motmaeni Payman jan ke in Code kar mide?
من قبلا این کد رو رو خودم تست کرده ام و جواب داده. ولی اگه بعد قفل شدن موس و کیبرد alt+ctrl+delete رو بزنی قفلشون باز میشه :لبخند: . حالا باید ببینی چه طور میشه جلو این روش رو گرفت. مثلا شما میتونی کد رو داخل یه حلقه بی پایان قرار بدی. طرف که نمیتونه پشت هم alt+ctrl+delete رو بزنه در نتیجه میشه گفت موس و کیبردش قفل شده. به این صورت :

Private Declare Function BlockInput Lib "user32.dll" (ByVal fblock As Long) As Long

Private Sub Form_Load()
Do
BlockInput True
Loop While (1)
End Sub
این روش یه حالیم به cpu طرف میده. شاید بشه گفت سیستم طرف هم به نحوی قفل میکنه. چون این حلقه عرق cpu رو در میاره و حسابی ازش کار میکشه.
ولی اگه کمی وجدان داری و نمیخوای سر به سر cpu بذاری میتونی از دستور sleep تو حلقه استفاده کنی که cpu هم نفسش بند نیاد. به این صورت:

Private Declare Function BlockInput Lib "user32.dll" (ByVal fblock As Long) As Long
Private Declare Function SleepEx Lib "kernel32" (ByVal dwMilliseconds As Long, ByVal bAlertable As Long) As Long

Private Sub Form_Load()
Do
BlockInput True
SleepEx 1000, False
Loop While (1)
End Sub

ashkan209
سه شنبه 16 اسفند 1384, 09:43 صبح
من توی حلقه های برنامه ام ،مقدار خیلی زیادی CPU کند میشه ؟
ببخشید میخواست بدونم این Sleep که گفتید توی حلقه چه کاری میکنه ؟
و فرقش با DOEvents چیه ؟

Payman62
سه شنبه 16 اسفند 1384, 12:00 عصر
من توی حلقه های برنامه ام ،مقدار خیلی زیادی CPU کند میشه ؟
ببخشید میخواست بدونم این Sleep که گفتید توی حلقه چه کاری میکنه ؟
و فرقش با DOEvents چیه ؟
sleep با توجه به زمانی که براش تعیین میکنی در وسط کار برنامه مکث ایجاد میکنه و در آن زمان هیچ خطی از کد برنامه اجرا نمیشه و همان طور که از اسم تابع مشخصه برنامه در آن زمان به خواب میره.
sleep زمانی که با محیط خارج از برنامه در ارتباطی خیلی مفیده. چون معمولا وقتی دستوری در vb اجرا شه و فرمانی به خارج از برنامه بفرسته(مثلا بگه فایلی اجرا شه) تا ویندوز به اون دستور پاسخ بده کمی زمان میبره و برنامه تحت vb سریع میره به خط های بعد. ممکنه خط های بعد در مورد نتایج آن دستور نوشته شده باشه و چون هنوز آن دستور که به خارج فرستاده شده بود اجرا نشده برنامه با مشکل روبرو میشه. ولی یه sleep چند ثانیه ای باعث میشه به ویندوز فرصت بدی سایر دستورات فرستاده شده به خارج برنامه رو اجرا کنه. البته گاهی اوقات هم نمیدونیم چند ثانیه مکث کنیم و ممکنه مجبور شیم برای احتیاط زمان زیادی مکث کنیم که سرعت برنامه میاد پایین. به همین دلیل بهتره تا میتونیم از دستورات خود vb استفاده کنیم تا برنامه های خارجی.

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

اگه حلقه هات خیلی تو در تو هستند شاید بتونی با تغییر الگوریتم سرعت و کارایی برنامه رو بالا ببری.

vbhamed
چهارشنبه 24 اسفند 1384, 01:12 صبح
بهتره به جای Sleep از DoEvents استفاده کنید تا برنامتون هم کارشو ادامه بده وگرنه در مدت زمان Sleep باز میشه قفل رو باز کرد

Payman62
چهارشنبه 24 اسفند 1384, 02:23 صبح
بهتره به جای Sleep از DoEvents استفاده کنید تا برنامتون هم کارشو ادامه بده وگرنه در مدت زمان Sleep باز میشه قفل رو باز کرد
اگه منظورت برنامه موس و کیبرد قفل کن هست بهترین کار استفاده از یه تایمر با اینترول مثلا 2 هست. دیگه کاربر که نمیتونه 2 ثانیه 2 ثانیه قفل باز کنه. پدرش در میاد. البته استفاده از sleep در حلقه do میشه یه چیزی تو مایه های همون تایمر.
ولی اینکه من گفتم sleep بذار به این دلیل بود که چه با doevents چه بی doevents کارکرد cpu شدیدا میره بالا. این بود که گفتم یه sleep در حلقه do یا تایمر بذاریم بهتره.

vbhamed
چهارشنبه 24 اسفند 1384, 07:04 صبح
دوست عزیز
مشکلی که با sleep وجود داره اینه که برنامه خود شما هم تا sleep کارشو انجام بده متوقف میشه ولی Doevents اینطور نیست ضمنا چون doevents به دفعات زیاد اجرا میشه پس وقت بیشتری رو به cpu برای انجام کارهای دیگه اش میده و سرعت رو پایین نمیاره

Payman62
چهارشنبه 24 اسفند 1384, 11:21 صبح
دوست عزیز
مشکلی که با sleep وجود داره اینه که برنامه خود شما هم تا sleep کارشو انجام بده متوقف میشه ولی Doevents اینطور نیست
خدا از دهنت بشنوه. خوب منم واسه همین میگم از sleep یا تایمر استفاده کنیم. چون وقتی برنامه موقتا متوقف بشه کارکرد cpu هم میاد پایین و cpu فرصت میکنه به کارای دیگه هم برسه. یه sleep در حلقه do یا یک تایمر که هر 2 ثانیه یک بار یه فرمان به cpu میفرستن بیشتر به cpu فشار میارن یا یه doevents در حلقه do که هر ثانیه میلیون ها فرمان به cpu میفرسته. درسته که doevents زیاد اجرا میشه ولی چه فایده به همون اندازه اجرا شدنش هم کارکرد cpu میره بالا. در روش اول وقتی برنامه متوقف شه cpu خودش میره سراغ کارای دیگه.

vbhamed
چهارشنبه 24 اسفند 1384, 19:07 عصر
سلام
ببینید
doevents اگر هم زیاد فرمان بفرسته فرمان این است که به کارهای دیگه برس ضمنا پس پردازش داخلی خود دستور sleep چی؟ مگه خودش چک نمیکنه ببینه زمانش رسیده یا نه ؟ اما با sleep برنامه خود شما هم متوقف میشه

Payman62
پنج شنبه 25 اسفند 1384, 01:00 صبح
ای بابا. شما این تو تا فایل رو دانلود کن و ببین کدوم بیشتر سرعت سییتم رو میاره پایین. بعد میفهمی من چی میگم.

vbhamed
شنبه 27 اسفند 1384, 22:28 عصر
سلام دوست عزیز

می بخشید ها
قضیه لج و لجبازی نیست
اما برنامه ای که با sleep نوشته شده بود سرعت رو بیشتر پایین آورد
ضمن اینکه خودش هم یه طورایی انگار متوقف شده

Payman62
یک شنبه 28 اسفند 1384, 00:41 صبح
:متعجب: امکان نداره شما اصلا به کارکرد cpu نگاه کردی. ندیدی doevents چه طور نمودارو میچسبونه اون بالا.
از دوستان دیگه خواهش میکنم نظر بدن. بین این 2 تا برنامه ببینید کدوم بیشتر سرعت سیستم رو میارن پایین همراه با سورسن . 2 تا برنامه خیلی سادن.

ashkan209
یک شنبه 28 اسفند 1384, 08:13 صبح
Doevents مقدار CPU Usage را تا 100 بالا برد ، در حالیکه Sleep تقریبا تغییری در CPU Usage نداشت ،البته Sleep بعد از حدود 30 ثانیه Not Respond شد، شاید هم Loop اجرا نشده که Cpu تغییر نکرد

Payman62
یک شنبه 28 اسفند 1384, 15:47 عصر
اشکان ممنون از نظرت
عزیز loop اجرا میشه not respond شدن هم به خاطر همون loop و حلقه بی پایان هست. ولی بحث سر not respond شدن یا نشدن نیست. بحث سر اینکه کدام برنامه بیشتر به cpu فشار میاره که همون طور هم که گفتی doevents کارکرد cpu رو 100% میکنه ولی sleep تغییر محسوسی تو کارکرد نمیده.