2

実行中に一部のキーボード入力をブロックする必要があるソフトウェアを開発しています。この希望を放棄するいくつかの問題について話し合ったので、ここでは詳細を繰り返しません (状況をよりよく理解するために、これを読んでください: How can I disable specific Windows hotkeys from inside a software using C++? )

私の現在の問題は、Qt でやりたいことを実行できたことです。今度はそれを Borland C++ Builder 6 に渡す必要がありますが、Builder のコンパイラはコードを拒否しています。

SWH_return = SetWindowsHookEx(WH_KEYBOARD_LL,LowLevelKeyboardProc,GetModuleHandle(NULL),0);

指摘

[C++ エラー] FrmMain.cpp(155): E2034 'long (__stdcall *)(int,unsigned int,long)' を 'int (__stdcall *)()' に変換できません

Qt がこのコード行でまったく問題を検出せず、すべてが正常に実行されると、これは非常に奇妙です。問題は、「SetWindowsHookEx」に「LowLevelKeyboardProc」が含まれていることです。コードをいくつか変更してみましたが、成功しませんでした。

誰かが私にこれを手伝ってくれませんか?

ありがとう、

モメルギル

注: コードの詳細については、私が投稿したリンクにアクセスしてください。

4

2 に答える 2

1

問題は解決しました - 期待通りではないかもしれませんが...

Borland Builder c++ 6 は 2002 年のものであり、Builder のコンパイラの winuser.h ファイル (HOOKPROC が定義されている場所) のバージョンと Qt の winuser.h を比較すると、予想どおり、まったく異なることがわかりました。 Microsoft が Builder のバージョンのファイルをリリースしてから 10 年が経ちました。

したがって、私がしなければならなかったことは、HOOKPROC が宣言されている Builder の winuser.h 行と、HOOKPROC の定義の ctrl+c/ctrl+v Qt の winuser.h バージョンにコメントすることだけで、うまくいきました。

しかし、これがこの問題を解決する最も「政治的に正しい」方法だとは思いませんが、とにかくうまくいきました。

ありがとう、

モメルギル

于 2012-08-17T20:15:38.790 に答える
1

STRICTこれは、プリプロセッサ マクロが定義されていないことに関係していると思います。

ただし、簡単な回避策は、関数ポインタをHOOKPROC.

SWH_return = SetWindowsHookEx(WH_KEYBOARD_LL, (HOOKPROC)LowLevelKeyboardProc, GetModuleHandle(NULL), 0);
于 2012-08-17T14:43:07.367 に答える