1

現在、Windows 電卓アプリへのすべてのユーザー入力を取得しようとしています。これを行う方法は、Win32 を使用して、電卓ウィンドウ用のすべてのキーボードおよびマウス入力をインターセプトすることのようです。以下のリンクにあるウィンドウのサブクラス化に関する MSDN ページを読み、サブクラス化に関する調査を行いました。

ウィンドウをサブクラス化するための構文はありますが、サブクラス化するウィンドウをプログラムに伝える方法がわかりません。

私がこれまでに持っているコードを以下に示します。私の問題は、変数「hWndEdit」がどのように割り当てられているかがわからないことです。私はWin32プログラミングにかなり慣れていないので、助けていただければ幸いです。

(リンク) http://msdn.microsoft.com/en-us/library/windows/desktop/ms633570(v=vs.85).aspx

WNDPROC wpOrigEditProc; 

wpOrigEditProc = (WNDPROC) SetWindowLong(hWndEdit,GWL_WNDPROC,(long) WndEditProc);

LRESULT CALLBACK WndEditProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message) 
        {
        case WM_CHAR:
        case WM_KEYUP:
        case WM_KEYDOWN:
            if (hWnd == hWndEdit)
                return 0;
        break;
        case WM_DESTROY: 
            // Remove the subclass from the edit control. 
            SetWindowLong(hWndEdit, GWL_WNDPROC, (LONG) wpOrigEditProc); 
        break;
        default:
            return CallWindowProc((WNDPROC ) wpOrigEditProc, hWnd, message, wParam, lParam);
        }
    return CallWindowProc((WNDPROC ) wpOrigEditProc, hWnd, message, wParam, lParam);
}
4

1 に答える 1

1

ウィンドウを見つけるには、最初にSpy ++(Visual Studioと共にインストールされるツール)を使用して、電卓のメインウィンドウのクラス名とウィンドウ名を見つけます。次に、アプリケーションで、FindWindowAPIを使用します。

hWndEdit = FindWindow(className, windowName);

ただし、電卓ウィンドウはアプリケーションによって所有されていないため、ここでサブクラス化が正しい方法であるかどうかはわかりません。これはフックを使用して行う必要があります。

于 2012-09-03T21:15:45.083 に答える