<div><br></div> <div>음..F2를 누르면 파일이름을 단순한 패턴에따라 변경하는 프로그램을 만들었습니다</div> <div>VB에서 keyboard hook을 이용해서 만들었는데요</div> <div>5,6번정도는 정상적으로 실행되다가, 그후로는 반응이 없네요</div> <div>실행자체가 안된다면 그러려니하겠는데..실행이 되다가 안되니까 미묘하네욥..</div> <div><br></div> <div><br></div> <div>실행부분</div> <div> <div>Public Class Form1</div> <div><span style="font-size:9pt;line-height:1.5;"> Private Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)</span></div> <div><br></div> <div> Private Const WH_KEYBOARD_LL As Integer = 13</div> <div> Private Const HC_ACTION As Integer = 0</div> <div> Private Const WM_KEYDOWN = &H100</div> <div> Private Const WM_KEYUP = &H101</div> <div> Private Const WM_SYSKEYDOWN = &H104</div> <div> Private Const WM_SYSKEYUP = &H105</div> <div><br></div> <div> Private WithEvents kbHook As New KeyboardHook</div> <div><br></div> <div><br></div> <div> Private Sub kbHook_KeyDown(ByVal Key As System.Windows.Forms.Keys) Handles kbHook.KeyDown</div> <div><span style="font-size:9pt;line-height:1.5;"> If Key = Keys.F2 Then</span></div> <div> Sleep(500)</div> <div> SendKeys.Send("{LEFT}")</div> <div> SendKeys.Send("{LEFT}")</div> <div> SendKeys.Send("{LEFT}")</div> <div> SendKeys.Send("{BS}")</div> <div> SendKeys.Send("{LEFT}")</div> <div> SendKeys.Send("{LEFT}")</div> <div> SendKeys.Send("{LEFT}")</div> <div> SendKeys.Send("{.}")</div> <div> SendKeys.Send("{E}")</div> <div> End If</div> <div> End Sub<span style="font-size:9pt;line-height:1.5;"> </span></div> <div>End Class</div></div> <div><br></div> <div><br></div> <div>keyboardhook부분(검색해서 찾으거라 잘모릅니당)</div> <div><br></div> <div> <div>Imports System.Runtime.InteropServices</div> <div><br></div> <div>Public Class KeyboardHook</div> <div><br></div> <div> <DllImport("User32.dll", CharSet:=CharSet.Auto, CallingConvention:=CallingConvention.StdCall)> _</div> <div> Private Overloads Shared Function SetWindowsHookEx(ByVal idHook As Integer, ByVal HookProc As KBDLLHookProc, ByVal hInstance As IntPtr, ByVal wParam As Integer) As Integer</div> <div> End Function</div> <div> <DllImport("User32.dll", CharSet:=CharSet.Auto, CallingConvention:=CallingConvention.StdCall)> _</div> <div> Private Overloads Shared Function CallNextHookEx(ByVal idHook As Integer, ByVal nCode As Integer, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As Integer</div> <div> End Function</div> <div> <DllImport("User32.dll", CharSet:=CharSet.Auto, CallingConvention:=CallingConvention.StdCall)> _</div> <div> Private Overloads Shared Function UnhookWindowsHookEx(ByVal idHook As Integer) As Boolean</div> <div> End Function</div> <div><br></div> <div> <StructLayout(LayoutKind.Sequential)> _</div> <div> Private Structure KBDLLHOOKSTRUCT</div> <div> Public vkCode As UInt32</div> <div> Public scanCode As UInt32</div> <div> Public flags As KBDLLHOOKSTRUCTFlags</div> <div> Public time As UInt32</div> <div> Public dwExtraInfo As UIntPtr</div> <div> End Structure</div> <div><br></div> <div> <Flags()> _</div> <div> Private Enum KBDLLHOOKSTRUCTFlags As UInt32</div> <div> LLKHF_EXTENDED = &H1</div> <div> LLKHF_INJECTED = &H10</div> <div> LLKHF_ALTDOWN = &H20</div> <div> LLKHF_UP = &H80</div> <div> End Enum</div> <div><br></div> <div> Public Shared Event KeyDown(ByVal Key As Keys)</div> <div> Public Shared Event KeyUp(ByVal Key As Keys)</div> <div><br></div> <div> Private Const WH_KEYBOARD_LL As Integer = 13</div> <div> Private Const HC_ACTION As Integer = 0</div> <div> Private Const WM_KEYDOWN = &H100</div> <div> Private Const WM_KEYUP = &H101</div> <div> Private Const WM_SYSKEYDOWN = &H104</div> <div> Private Const WM_SYSKEYUP = &H105</div> <div><br></div> <div> Private Delegate Function KBDLLHookProc(ByVal nCode As Integer, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As Integer</div> <div><br></div> <div> Private KBDLLHookProcDelegate As KBDLLHookProc = New KBDLLHookProc(AddressOf KeyboardProc)</div> <div> Private HHookID As IntPtr = IntPtr.Zero</div> <div><br></div> <div> Private Function KeyboardProc(ByVal nCode As Integer, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As Integer</div> <div> If (nCode = HC_ACTION) Then</div> <div> Dim struct As KBDLLHOOKSTRUCT</div> <div> Select Case wParam</div> <div> Case WM_KEYDOWN, WM_SYSKEYDOWN</div> <div> RaiseEvent KeyDown(CType(CType(Marshal.PtrToStructure(lParam, struct.GetType()), KBDLLHOOKSTRUCT).vkCode, Keys))</div> <div> Case WM_KEYUP, WM_SYSKEYUP</div> <div> RaiseEvent KeyUp(CType(CType(Marshal.PtrToStructure(lParam, struct.GetType()), KBDLLHOOKSTRUCT).vkCode, Keys))</div> <div> End Select</div> <div> End If</div> <div> Return CallNextHookEx(IntPtr.Zero, nCode, wParam, lParam)</div> <div> End Function</div> <div><br></div> <div> Public Sub New()</div> <div> HHookID = SetWindowsHookEx(WH_KEYBOARD_LL, KBDLLHookProcDelegate, System.Runtime.InteropServices.Marshal.GetHINSTANCE(System.Reflection.Assembly.GetExecutingAssembly.GetModules()(0)).ToInt32, 0)</div> <div> If HHookID = IntPtr.Zero Then</div> <div> Throw New Exception("Could not set keyboard hook")</div> <div> End If</div> <div> End Sub</div> <div><br></div> <div> Protected Overrides Sub Finalize()</div> <div> If Not HHookID = IntPtr.Zero Then</div> <div> UnhookWindowsHookEx(HHookID)</div> <div> End If</div> <div> MyBase.Finalize()</div> <div> End Sub</div> <div><br></div> <div>End Class</div></div>
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.