v8 엔진이 내장 된 콘솔 애플리케이션이 있습니다. 키 이벤트를 등록하기 위해 후크를 추가하고 싶습니다. 이것은 Qt와 QtScript를 사용하기 전에는 모두 작동했지만 VC++ 2008에서는 똑바로 C++로 포팅했습니다. 응용 프로그램이 컴파일되고 실행되지만 후크는 호출되지 않습니다. 관련 코드는 다음과 같습니다.C++ 콘솔 앱, SetWindowsHookEx, Callback이 절대 호출되지 않습니다
주()
HWND hwndC = GetConsoleWindow() ;
HINSTANCE hInst = (HINSTANCE)GetWindowLong(hwndC, GWL_HINSTANCE);
if (SetWindowsHookEx(WH_KEYBOARD_LL, HookProc, hInst, NULL) == 0) {
printf("Failed to set hook\n");
} else {
printf("Hook established\n");
}
g->RunScript(argc,argv);
그리고 PROC :
LRESULT CALLBACK HookProc(int nCode, WPARAM wParam, LPARAM lParam)
{
printf("HookProc called\n");
PKBDLLHOOKSTRUCT p = (PKBDLLHOOKSTRUCT) (lParam);
if (wParam == WM_KEYDOWN) {
keyDown(p,g);
} else if (wParam == WM_KEYUP) {
keyUp(p,g);
}
fflush(stdout);
return CallNextHookEx(NULL, nCode, wParam, lParam);
}
이것은 V8의 샘플 코드에 shell.cc 팽창 본질적이다. 어떻게 든 차단하는지 궁금하네요? 나는 여기서 뭘하고 있는지 알지 못한다는 것을 인정한다. 놀고 배우기는하지만이 하나가 나를 곤란하게 만든다. 를 keyDown의 내부
내가 이런 걸 가지고 말 : 이v8::Handle<v8::String> callback_name = v8::String::New("onKeyDown");
v8::Handle<v8::Value> callback_val = g->_context->Global()->Get(callback_name);
if (!callback_val->IsFunction()) {
printf("No onKeyDown handler found\n");
return;
}
v8::Handle<v8::Function> callback = v8::Handle<v8::Function>::Cast(callback_val);
const int argc = 1;
v8::Handle<v8::Value> argv[argc] = { v8::Int32::New(char(p->vkCode)) };
printf("Calling onKeyDown\n");
v8::Handle<v8::Value> result = callback->Call(g->_context->Global(), argc, argv);
이 중 일부는 실제로 결국 작동하지 않을 수 있습니다,하지만 난이 프로그램을 실행할 때 그것은 단지라는 결코 극복하고, 정의 onKeyDown에 = function (key) {...}; 나는 onKeyDown이 잘 작동하는 것을 볼 수 있습니다. JS에서 바인딩 된 C++ 메소드를 모두 사용할 수 있습니다. 그래서이 것은 단지 나를 박쥐로 몰아 넣습니다.
어떤 도움이 될지 모르지만 일부 교육 자료에 대한 안내는 많은 도움이 될 것입니다.
이 함수는 c : LRESULT CALLBACK HookProc (int nCode, WPARAM wParam, LPARAM lParam) 함수가 호출되지 않았거나 printf를 보지 못했다는 것을 의미합니다. windows가 후크가 설립되었음을보고합니다.
/제이슨
그것이 내가 두려워했던 것입니다. 나는 그렇게 생각하지 않았습니다. 그러면 또 다른 질문이 생깁니다. 독서의 관점에서 무엇을 권하고 싶습니까? 응용 프로그램이 개발되면서 적어도 1 개의 추가 스레드가 실행되어야한다는 것을 알고 있습니다. 도움이 될만한 온라인으로 좋은 기사를 가리킬 수 있다면 정말 좋을 것입니다. –