PDA

View Full Version : غیر فعال کردن کلید Print Screen



M-Gheibi
سه شنبه 30 فروردین 1384, 21:36 عصر
با عرض سلام و خسته نباشید خدمت همه VB کاران عزیز
میخواستم بدونم راهی برای از بین بردن این قابلیت که بشه با استفاده از کلید Print Screen از صفحه عکس گرفت هست؟
منظورم اینه که من یه برنامه ای دارم و به دلایلی نمیخوام کاربر بتونه با استفاده از کلید مذکور از برنامه عکسی بگیره.
کسی راهی به ذهنش می رسه؟

ممنون
شب خوش

Fagat_tanhaie
سه شنبه 30 فروردین 1384, 23:11 عصر
میتونین clipboard رو مدام پاک کنین :موفق:

M-Gheibi
سه شنبه 30 فروردین 1384, 23:13 عصر
میتونین clipboard رو مدام پاک کنین
منطقی نیست. ولی در کل ممنون اینم نظریه :wink: منتظر نظر دیگر دوستان هم هستم.

بابک زواری
سه شنبه 30 فروردین 1384, 23:42 عصر
منم از همین راه رفتم چون نشد که این کلید رو از کار بیاندازم
با این حال امشب دنبالش میرم اگر پیدا شد بهتون اطلاع میدم

sammy
چهارشنبه 31 فروردین 1384, 00:36 صبح
میتونین clipboard رو مدام پاک کنین :موفق:

منم فکر میکنم بهترین و کوتاه ترین راه همین باشه

M-Gheibi
چهارشنبه 31 فروردین 1384, 09:30 صبح
منم فکر میکنم بهترین و کوتاه ترین راه همین باشه
منم تنها راهی که بهش رسیدم همین بود ولی فکر نکنم راه اصولیش این باشه.
راستی کوتاهی راه مهم نیست.

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

منتظرم

موفق باشید
روز خوش

علیرضا مداح
چهارشنبه 31 فروردین 1384, 10:24 صبح
منطقی نیست
موافقم .
چون امکان داره کاربر چیزی رو از قبل در کلیپ بورد ذخیره کرده باشه و با خالی کردن آن تمام اطلاعات موجود در کلیپ بورد با اجرای برنامه شما پاک میشه که اینکار اصلا" منطقی نیست .

در ضمن اگه شما به کاربر اجازه ندین که از برنامه شما توسط کلید PrintScreen عکس بگیره به احتمال زیاد کاربر توسط نرم افزارهای دیگه (مثل Snag-It) اینکارو انجام میده .

M-Gheibi
چهارشنبه 31 فروردین 1384, 10:31 صبح
به احتمال زیاد کاربر توسط نرم افزارهای دیگه (مثل Snag-It) اینکارو انجام میده .
درسته ولی امکان استفاده از چنین برنامه هایی در سیستم مورد نظر وجود ندارد. لذا تنها راه تصویر برداری استفاده از PrtScr هست.

بابک زواری
چهارشنبه 31 فروردین 1384, 16:45 عصر
فکر کنم با GetAsyncKeyState بشه کلید PrintScreen رو Detectکرد

بابک زواری
چهارشنبه 31 فروردین 1384, 16:47 عصر
اینم یک سورس برای Keyboard SPY ببین به دردتون میخوره



'In a module
Public Const DT_CENTER = &H1
Public Const DT_WORDBREAK = &H10
Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Declare Function DrawTextEx Lib "user32" Alias "DrawTextExA" (ByVal hDC As Long, ByVal lpsz As String, ByVal n As Long, lpRect As RECT, ByVal un As Long, ByVal lpDrawTextParams As Any) As Long
Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Declare Function SetRect Lib "user32" (lpRect As RECT, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Global Cnt As Long, sSave As String, sOld As String, Ret As String
Dim Tel As Long
Function GetPressedKey() As String
For Cnt = 32 To 128
'Get the keystate of a specified key
If GetAsyncKeyState(Cnt) <> 0 Then
GetPressedKey = Chr$(Cnt)
Exit For
End If
Next Cnt
End Function
Sub TimerProc(ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long)
Ret = GetPressedKey
If Ret <> sOld Then
sOld = Ret
sSave = sSave + sOld
End If
End Sub

'In a form
Private Sub Form_Load()
Me.Caption = "Key Spy"
'Create an API-timer
SetTimer Me.hwnd, 0, 1, AddressOf TimerProc
End Sub
Private Sub Form_Paint()
Dim R As RECT
Const mStr = "Start this project, go to another application, type something, switch back to this application and unload the form. If you unload the form, a messagebox with all the typed keys will be shown."
'Clear the form
Me.Cls
'API uses pixels
Me.ScaleMode = vbPixels
'Set the rectangle's values
SetRect R, 0, 0, Me.ScaleWidth, Me.ScaleHeight
'Draw the text on the form
DrawTextEx Me.hDC, mStr, Len(mStr), R, DT_WORDBREAK Or DT_CENTER, ByVal 0&
End Sub
Private Sub Form_Resize()
Form_Paint
End Sub
Private Sub Form_Unload(Cancel As Integer)
'Kill our API-timer
KillTimer Me.hwnd, 0
'Show all the typed keys
MsgBox sSave
End Sub

MM_Mofidi
پنج شنبه 01 اردیبهشت 1384, 17:56 عصر
از key board hook استفاده کنید.
در msdn و همین سایت مطالب مفیدی براش هست

M-Gheibi
جمعه 02 اردیبهشت 1384, 23:03 عصر
به این شکل موضوع رو ختم کردم :

Public Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Global Const VK_SNAPSHOT = &H2C

If GetAsyncKeyState(VK_SNAPSHOT) Then
Clipboard.Clear
End If

مجبور به حذف کلیپ بورد شدم.

ممنون از همه

شاپرک
دوشنبه 20 شهریور 1385, 09:36 صبح
Global Const VK_SNAPSHOT = &H2C

این خط رو Error میده !!!
و لطفا بگید کجا از این استفاده کردید . در Event KeyDown فرم ؟؟؟؟؟

Payman62
دوشنبه 20 شهریور 1385, 12:41 عصر
سلام.
شاپرک جان از این ثابت استفاده کن.

Public Const VK_SNAPSHOT = &H2C
تابع رو باید تو یه تایمر بذاری تا هر ثانیه چک کنه و اگه پرینت اسکرین فشرده شه پاکش کنه.
GetAsyncKeyState یه API هست و نیازی به رویداد کی دان و کی پرس نداره.