1. ホーム
  2. c++

[解決済み] C++ LPDWORDの正しい使い方

2022-02-04 23:03:56

質問事項

クリックを監視したいボタンのhWndsの配列があります。また、それらを監視するために使用するHWINEVENTHOOKsの配列を持っています。GetWindowThreadProcessIDは、LPDWORDプロセスIDを与えますが、これは、SetWinEventHookでは受け入れられません。この例で、LPDWORDを正しく使用しているかどうか、不明です。どなたか、正しい方向性を示していただけないでしょうか?

EDIT: 投稿してくださった皆様、ありがとうございました。修正したコードを以下に掲載します。

新しいコード

int i = 0;
for (HWND hWnd : hWnds) {
    DWORD processID = 0;
    DWORD threadID = GetWindowThreadProcessId(hWnd, &processID);
    hooks[i] = SetWinEventHook(EVENT_OBJECT_INVOKED, EVENT_OBJECT_INVOKED, 
    NULL,
        WinEventProcCallback, processID, threadID, WINEVENT_OUTOFCONTEXT);
        i++;
}

解決方法は?

LPDWORD の型定義は、単に DWORD* で、Windows SDKの関数パラメータが"LPsomething"の場合、一般に"something"へのポインタを渡す必要があります(LP[C][W]STR文字型は除く)。

DWORD processID;
DWORD threadID = GetWindowThreadProcessId(hWnd, &processID);
if (threadID)
{
  // Do something with threadID and/or processID
}

Windows SDKは システムハンガリー語表記 は、Desktop/Classic API に使用されます。