アプリ版:「スタンプのみでお礼する」機能のリリースについて

お世話になります

VB6でプリントスクリーンを無効にする機能を作成しているのですが、

hHook = SetWindowsHookEx(WH_KEYBOARD, AddressOf KeyBoardProc, 0&, App.ThreadID)
フックはたぶん正常に定義できているようで、
KeyBoardProcでプリントスクリーンキーを捕まえて「44」でブレイクも脹れています。
ここで戻り値「1」を返しているのですが、クリップボードに画像が生成されてしまいます。

画像が生成されない様にするには、何が間違っているのかおしえていただけないでしょうか?

'*********************************************************************
' フックプロシジャー
'*********************************************************************
Public Function KeyBoardProc(ByVal nCode As Integer, ByVal wParam As Long, ByVal lParam As Long) As Long
Dim ret As Long

If nCode < 0 Then
KeyBoardProc = CallNextHookEx(hHook, nCode, wParam, lParam)
Exit Function
End If

Select Case wParam
' Print Screen
Case 44
KeyBoardProc = 1
Exit Function
End Select

KeyBoardProc = CallNextHookEx(hHook, nCode, wParam, lParam)
End Function

A 回答 (1件)

これ(参照URLの一番上の回答)でできているけど、何が違うのか良くわかりません。



unhookを呼び出す際にclipboard.clearしても同じ状況でしょうか?

Private 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

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

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

Private 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

Private Const HC_ACTION = 0
Private Const VK_SNAPSHOT = &H2C
Private Const WH_KEYBOARD_LL = 13&

Private hKeyb As Long

Public Function KeybCallback(ByVal Code As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Static udtHook As KBDLLHOOKSTRUCT

If (Code = HC_ACTION) Then
'Copy the keyboard data out of the lParam (which is a pointer)
Call CopyMemory(udtHook, ByVal lParam, Len(udtHook))
If udtHook.vkCode = VK_SNAPSHOT Then
KeybCallback = 1
Exit Function
End If
End If
KeybCallback = CallNextHookEx(hKeyb, Code, wParam, lParam)
End Function

Public Sub HookKeyboard()
UnhookKeyboard
hKeyb = SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf KeybCallback, App.hInstance, 0&)
End Sub

Public Sub UnhookKeyboard()
If hKeyb <> 0 Then
Call UnhookWindowsHookEx(hKeyb)
hKeyb = 0
End If
End Sub

参考URL:http://www.vbforums.com/showthread.php?372390-RE …
    • good
    • 0
この回答へのお礼

回答ありがとうございました
本当はKeyそのものを受け付けない様にしたかったのですが
clipboard.clearでも、目的を達成できたので、
採用させていただきました。

お礼日時:2013/09/19 13:02

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!