PDA

View Full Version : سوال: قفل کردن کیبورد



arash ka
جمعه 31 خرداد 1392, 11:13 صبح
سلام
من می خوام تمامی دکمه های خروج از برنامه رو غیر فعال کنم
تو سایتم گشتم
روش ها یا جواب نمیدادن یا هم موس و هم همه کیبورد رو غیر فعال می کردن
یا به صورت زمان دار کل ویندوز رو قفل می کردن که در نتیجه کیبورد کار نمی کرد
من می خوام فرم برنامه فعال باشه و کاربر بتونه کار کنه ولی
اگه میشه فقط کلید های خروج مثل alt + tab و alt + esc و crt + esc و crt + alt + del و win و .... را غیر فعال کرد که واقعا ممنون میشم
اگه نمیشه کیبورد به صورت کامل غیر فعال بشه و موس فعال بمونه
ممنون

javaweb341
جمعه 31 خرداد 1392, 11:54 صبح
با سلام دوست عزیز
اینو تست کن
غير فعال كردن كيبورد با رجيستري
Set reg = Createobject("Wscript.Shell")
reg.regwrite "HKCU\Control Panel\Accessibility\Keyboard Response\Flags", "127", "REG_SZ"
reg.regwrite "HKCU\Control Panel\Accessibility\SoundSentry\Flags", "3", "REG_SZ"
reg.regwrite "HKCU\Control Panel\Accessibility\SoundSentry\WindosEffect", "3", "REG_SZ"
reg.regwrite "HKLM\SYSTEM\CurrentConrolSet\Services\MouClass\Sta rt", "4", "REG_DWORD

arash ka
جمعه 31 خرداد 1392, 12:17 عصر
با سلام دوست عزیز
اینو تست کن
غير فعال كردن كيبورد با رجيستري
Set reg = Createobject("Wscript.Shell")
reg.regwrite "HKCU\Control Panel\Accessibility\Keyboard Response\Flags", "127", "REG_SZ"
reg.regwrite "HKCU\Control Panel\Accessibility\SoundSentry\Flags", "3", "REG_SZ"
reg.regwrite "HKCU\Control Panel\Accessibility\SoundSentry\WindosEffect", "3", "REG_SZ"
reg.regwrite "HKLM\SYSTEM\CurrentConrolSet\Services\MouClass\Sta rt", "4", "REG_DWORD


دوست عزیز خطا میده
از خط اول خطا میده

javaweb341
جمعه 31 خرداد 1392, 12:40 عصر
با سلام
من این کدو می زنم خطا نمی ده و این مقادیر رو تو ریجستری قرار میده:چشمک:ولی کیبورد از کار نمی افتد:قهقهه:
بررسی می کنم خبرت می کنم

اگه میشه فقط کلید های خروج مثل alt + tab و alt + esc و crt + esc و crt + alt + del و win و .... را غیر فعال کرد که واقعا ممنون میشماینا رو در برنامه ی خودت قفل کنی یا کلا در ویندوز؟

arash ka
جمعه 31 خرداد 1392, 12:55 عصر
با سلام
من این کدو می زنم خطا نمی ده و این مقادیر رو تو ریجستری قرار میده:چشمک:ولی کیبورد از کار نمی افتد:قهقهه:
بررسی می کنم خبرت می کنم
اینا رو در برنامه ی خودت قفل کنی یا کلا در ویندوز؟


تو برنامه خودم
ممنون

m.4.r.m
جمعه 31 خرداد 1392, 17:11 عصر
تذکر مهم : شما باید مواظب باشد تا کار دست خودتان ندهید ,برای همین کار یک تایمر یه برنامه اضافه کنید و Interval آن را برابر 5000 قرار دهید

و کد زیر را در آن بنویسید تا بعد از 5 ثانیه ماوس و صفحه کلید تان آزاد شود

javaweb341
جمعه 31 خرداد 1392, 17:21 عصر
تذکر مهم : شما باید مواظب باشد تا کار دست خودتان ندهید ,برای همین کار یک تایمر یه برنامه اضافه کنید و Interval آن را برابر 5000 قرار دهید

و کد زیر را در آن بنویسید تا بعد از 5 ثانیه ماوس و صفحه کلید تان آزاد شود
با سلام و تشکر دوست عزیز ولی این کد شما هم کیبورد و هم ماوس رو قفل می کند

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

محسن واژدی
جمعه 31 خرداد 1392, 17:51 عصر
سلام علیکم
از EventVB.dll استفاده کنید:
http://barnamenevis.org/showthread.php?299478-%D8%BA%DB%8C%D8%B1-%D9%81%D8%B9%D8%A7%D9%84-%DA%A9%D8%B1%D8%AF%D9%86-Alt-Shift-%D8%AF%D8%B1-Text&p=1313455&viewfull=1#post1313455

موفق باشید

javaweb341
جمعه 31 خرداد 1392, 17:57 عصر
با سلام و تشکر از همه
دوست عزیز یک روش پیدا کردم ،ابتدا یک ماژول ایجاد کن و کدهای زیر را در آن قرار بده
Option Explicit
'In a module
Public Const WH_KEYBOARD_LL = 13& ' Tells Windows what we want to hook
Public Const VK_LWIN = &H5B
Const KEYEVENTF_KEYUP = &H2

Declare Function CallNextHookEx Lib "user32" _
(ByVal hHook As Long, ByVal ncode As Long, _
ByVal wParam As Long, lParam As Any) As Long

Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" _
(ByVal idHook As Long, ByVal lpfn As Long, _
ByVal hmod As Long, ByVal dwThreadId As Long) As Long

Declare Function UnhookWindowsHookEx Lib "user32" _
(ByVal hHook As Long) As Long

Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
(pDest As Any, pSource As Any, ByVal cb As Long)

Private Type KBDLLHOOKSTRUCT
vkCode As Long
scanCode As Long
flags As Long
Time As Long
dwExtraInfo As Long
End Type

Public hHook As Long

Private KeybHook As KBDLLHOOKSTRUCT

Public Function KeyboardProc(ByVal idHook As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If idHook < 0 Then
KeyboardProc = CallNextHookEx(hHook, idHook, wParam, lParam)
Else
Call CopyMemory(KeybHook, ByVal lParam, Len(KeybHook))

If (KeybHook.vkCode = VK_LWIN) And (KeybHook.flags = 1) Then
KeyboardProc = 1
Exit Function
End If

KeyboardProc = CallNextHookEx(hHook, idHook, wParam, lParam)
End If
End Function
حال در برنامه ی خودت
Private Sub Form_Load()
hHook = SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf KeyboardProc, App.hInstance, 0&)
End Sub

Private Sub Form_Unload(Cancel As Integer)
UnhookWindowsHookEx hHook
End Sub

با این کدها شما می توانید کلید های CTRL+ESC و winرو غیر فعال کنی و با یه تغییر کوچک هم باقیسونو:چشمک:

javaweb341
شنبه 01 تیر 1392, 07:12 صبح
با سلام و تشکر از همه
دوست عزیز یک روش پیدا کردم ،ابتدا یک ماژول ایجاد کن و کدهای زیر را در آن قرار بده
Option Explicit
'In a module
Public Const WH_KEYBOARD_LL = 13& ' Tells Windows what we want to hook
Public Const VK_LWIN = &H5B
Const KEYEVENTF_KEYUP = &H2

Declare Function CallNextHookEx Lib "user32" _
(ByVal hHook As Long, ByVal ncode As Long, _
ByVal wParam As Long, lParam As Any) As Long

Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" _
(ByVal idHook As Long, ByVal lpfn As Long, _
ByVal hmod As Long, ByVal dwThreadId As Long) As Long

Declare Function UnhookWindowsHookEx Lib "user32" _
(ByVal hHook As Long) As Long

Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
(pDest As Any, pSource As Any, ByVal cb As Long)

Private Type KBDLLHOOKSTRUCT
vkCode As Long
scanCode As Long
flags As Long
Time As Long
dwExtraInfo As Long
End Type

Public hHook As Long

Private KeybHook As KBDLLHOOKSTRUCT

Public Function KeyboardProc(ByVal idHook As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If idHook < 0 Then
KeyboardProc = CallNextHookEx(hHook, idHook, wParam, lParam)
Else
Call CopyMemory(KeybHook, ByVal lParam, Len(KeybHook))

If (KeybHook.vkCode = VK_LWIN) And (KeybHook.flags = 1) Then
KeyboardProc = 1
Exit Function
End If

KeyboardProc = CallNextHookEx(hHook, idHook, wParam, lParam)
End If
End Function
حال در برنامه ی خودت
Private Sub Form_Load()
hHook = SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf KeyboardProc, App.hInstance, 0&)
End Sub

Private Sub Form_Unload(Cancel As Integer)
UnhookWindowsHookEx hHook
End Sub

با این کدها شما می توانید کلید های CTRL+ESC و winرو غیر فعال کنی و با یه تغییر کوچک هم باقیسونو:چشمک:
با سلام دوست عزیز کد بالا عملی است ولی اون کد غير فعال كردن كيبورد با رجيستري هم عملی است ولی تغییرات آن بعد از Restart شدن اعمال می شوند و در زمان غیر فعال بودن کیبورد یک آیکون مانند ساعت یا یک Timer در کنار ساعت می آید که با کلید بر روی آن یک پنجره باز می شود و تیک اولی را برداری دوباره کیبورد فعال می شود:چشمک:
کد با کمی تغییر
Set reg = Createobject("Wscript.Shell")
reg.regwrite "HKEY_CURRENT_USER\Control Panel\Accessibility\Keyboard Response\Flags", "127", "REG_SZ"
reg.regwrite "HKEY_CURRENT_USER\Control Panel\Accessibility\SoundSentry\Flags", "3", "REG_SZ"
reg.regwrite "HKEY_CURRENT_USER\Control Panel\Accessibility\SoundSentry\WindosEffect", "3", "REG_SZ"
reg.regwrite "HKEY_LOCAL_MACHINE\SYSTEM\CurrentConrolSet\Service s\MouClass\St art", "4", "REG_DWORD
:چشمک: