View Full Version : سوال: قفل کردن کیبورد و موس
mojtabadj
یک شنبه 22 اردیبهشت 1387, 19:45 عصر
سلام به تمام بچه هاي برنامه نويس
من يك مشكل دارم نميدونم حل ميشه يا نه من ميخوام زماني كه برنامم لود ميشه كيبورد وچپ كليك موس قفل بشه ولي راست كليك موس كار كنه من يك راهي پيدا كردم اونم اينه كه يه تابعي تويه USER32.DLL ويندوز وجود داره كه با صدا زدن اون موس و كيبورد قفل ميشه ولي من ميخوام راست كليك كار كنه آيا شما راهي به نظرتون ميرسه؟
mojtabadj
یک شنبه 22 اردیبهشت 1387, 20:13 عصر
اگه فقط كيبورد رو قفل كنه كافيه، من يه كد امتحان كردم نميدونم چرا كار نميكنه شما هم امتحان كنيد:
Uses SysUtils;
...
function PortIn(IOAddr : Word) :Byte;
begin
asm
mov dx,IOAddr
in al,dx
mov result,al
end;
end;
procedure PortOut(IOAddr : Word; Data : Byte);
begin
asm
mov dx,IOAddr
mov al,Data
out dx,al
end;
end;
procedure LockKeyboard(Lock:Boolean);
begin
if Lock then PortOut($21,PortIn($21) or 2)
else PortOut($21,PortIn($21) and 253);
end;
skmkh6056
دوشنبه 23 اردیبهشت 1387, 09:05 صبح
به نظر من بهترین روش استفاده از رجیستری هستش. من هم اگه وقت کردم برات جستجو میکنم.
B-Vedadian
چهارشنبه 25 اردیبهشت 1387, 08:14 صبح
در مد User - که تمامی برنامه های دلفی تو این مد هستند - سطح دسترسی اجازه کار با سخت افزار بصورت مستقیم رو نمیده. ا.ی. نمیشه از Out و In استفاده کنید.
منظورتون از قفل کردن موس و کیبورد رو واضح تر بیان کنید، اگه منظور اینه که تو برنامه شما نشه از کیبورد استفاده کرد، کافیه با استفاده از TApplicationEvents هر وقت یک Message صفحه کلید رو دریافت کردید، هیچ کاری انجام ندید ولی Handled رو True کنید.
mojtabadj
یک شنبه 29 اردیبهشت 1387, 18:29 عصر
در مد User - که تمامی برنامه های دلفی تو این مد هستند - سطح دسترسی اجازه کار با سخت افزار بصورت مستقیم رو نمیده. ا.ی. نمیشه از Out و In استفاده کنید.
منظورتون از قفل کردن موس و کیبورد رو واضح تر بیان کنید، اگه منظور اینه که تو برنامه شما نشه از کیبورد استفاده کرد، کافیه با استفاده از TApplicationEvents هر وقت یک Message صفحه کلید رو دریافت کردید، هیچ کاری انجام ندید ولی Handled رو True کنید.
میخوام اول کیبورد قفل باشه هر وقت خواستم ار قفل درش بیارم
B-Vedadian
دوشنبه 30 اردیبهشت 1387, 10:39 صبح
وقتی Handled رو True کنید، Window Procedure اصلی کاری انجام نمیده: قفل
وقتی اون رو False کنید همه چی عادی انجام میشه.
mojtabadj
دوشنبه 30 اردیبهشت 1387, 19:20 عصر
وقتی Handled رو True کنید، Window Procedure اصلی کاری انجام نمیده: قفل
وقتی اون رو False کنید همه چی عادی انجام میشه.
کدش به چه صورته؟
B-Vedadian
سه شنبه 31 اردیبهشت 1387, 08:07 صبح
با کامپوننت ApplicationEvents که همراه دلفی 7 هستش. راهنماشو ببین.
mojtabadj
سه شنبه 31 اردیبهشت 1387, 12:16 عصر
با کامپوننت ApplicationEvents که همراه دلفی 7 هستش. راهنماشو ببین.
دستت درد نکنه راه حل خوبی هست حالا اگه بخوایم راست کلیک کنیم و یک فرم جدید باز شه
باید چکار کرد چون دراین حالت به هیچ مسیجی جواب نمیده
B-Vedadian
سه شنبه 31 اردیبهشت 1387, 15:09 عصر
تو رویداد OnMessage باید چک کنی که چه پیغامی اومده بعد تصمیم بگیری که به کدوما اهمیت بدی و کدوما رو هندل نشده رها کنی. (فقط کلیک چپ و پیغامهای صفحه کلید رو رها کن)
mojtabadj
سه شنبه 31 اردیبهشت 1387, 15:17 عصر
تو رویداد OnMessage باید چک کنی که چه پیغامی اومده بعد تصمیم بگیری که به کدوما اهمیت بدی و کدوما رو هندل نشده رها کنی. (فقط کلیک چپ و پیغامهای صفحه کلید رو رها کن)
من در زمینه مسیج ها زیاد کار نکردم اگه میشه یک نمونه کد برام بزارین
B-Vedadian
چهارشنبه 01 خرداد 1387, 09:41 صبح
if ((message.Msg >= WM_KEYFIRST) and (message.Msg <= WM_KEYLAST)) or
(message.Msg = WM_LBUTTONDOWN) or
(message.Msg = WM_LBUTTONUP) then
Handled := True;
mojtabadj
پنج شنبه 02 خرداد 1387, 10:04 صبح
if ((message.Msg >= WM_KEYFIRST) and (message.Msg <= WM_KEYLAST)) or
(message.Msg = WM_LBUTTONDOWN) or
(message.Msg = WM_LBUTTONUP) then
Handled := True;
من کد رو تو رویداد ApplicationEvents1Message کپی کردم به message گیر میده ، نمیشناسه؟
B-Vedadian
پنج شنبه 02 خرداد 1387, 15:38 عصر
هرچي message.Msg هست با Msg.Message عوض کن.
mojtabadj
پنج شنبه 02 خرداد 1387, 15:54 عصر
برای اینکه فرم من اولویتش از سایر فرم ها بالاتر باشه باید چه مسیجی بفرستم . منظور من اینه که فرمم تمام
صفحه رو بگیره و تا زمانی که من Handled رو false نکردم حتی منوی start هم نتونه فعال بشه ، در کل هیچ
مسیجی نره تا زمانی که من اجازه بدم
B-Vedadian
پنج شنبه 02 خرداد 1387, 16:07 عصر
اگه از اين روش براي جلوگيري از دسترسي به ويندوز ميخواي استفاده کني، براي کاربراي متوسط هم کارآيي نداره چه رسد به کاربلدها.
در غير اينصورت (اگه قرار نيست خيلي قوي باشه) اولا FormStyle فرم اصليتو fsStayOnTop قرار بده، بعدش هم تو FormCreate برنامه با استفاده از SetWindowPos فرم اصليتو روي همه پنجره هاي TopMost قرار بده
SetWindowPos(Form1.Handle, 0, 0, 0, 0, HWND_TOPMOST)
mojtabadj
پنج شنبه 02 خرداد 1387, 16:17 عصر
اگه از اين روش براي جلوگيري از دسترسي به ويندوز ميخواي استفاده کني، براي کاربراي متوسط هم کارآيي نداره چه رسد به کاربلدها.
در غير اينصورت (اگه قرار نيست خيلي قوي باشه) اولا FormStyle فرم اصليتو fsStayOnTop قرار بده، بعدش هم تو FormCreate برنامه با استفاده از SetWindowPos فرم اصليتو روي همه پنجره هاي TopMost قرار بده
SetWindowPos(Form1.Handle, 0, 0, 0, 0, HWND_TOPMOST)
همینطور که شما گفتید براي جلوگيري از دسترسي به ويندوز هست چه راه حلی شما پیشنهاد
می دید ؟
mojtabadj
یک شنبه 26 خرداد 1387, 17:40 عصر
کسی نیست جواب بده؟
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.