回 帖 发 新 帖 刷新版面

主题:【求助】MFC DLL中的窗体消息传递问题

编写的是个带有窗体的DLL,功能是:按下C键之后,弹出一个可以输入密码的对话框,如果输入密码正确,则用户可以使用C键,否则就屏蔽C键。
这是键盘钩子的函数简单代码:
BEGIN_MESSAGE_MAP(CFileHookApp, CWinApp)
    //{{AFX_MSG_MAP(CFileHookApp)
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CFileHookApp construction

CFileHookApp::CFileHookApp()
{

}

CFileHookApp theApp;
LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wp, LPARAM lp)
{
    if (nCode==HC_ACTION) {
        if (wp=='C'){ //CTRL+C
            AFX_MANAGE_STATE(AfxGetStaticModuleState());
            SecretDlg secretDlg;//简单的Dlg,上面有密码输入编辑框以及确定按钮
            secretDlg.DoModal();
            if (判断输入的密码正确)
            {
            return CallNextHookEx(g_hHookKbdLL, nCode, wp, lp);
            }
            else
            {
            return 1;
            }
        }

    }
    return CallNextHookEx(g_hHookKbdLL, nCode, wp, lp);
}

DLLEXPORT BOOL DisableTaskKeys(HWND hwnd,BOOL bDisable)
{
    h_wnd=hwnd;
    if (bDisable) {
        if (!g_hHookKbdLL) {
            g_hHookKbdLL = SetWindowsHookEx(WH_KEYBOARD,
                KeyboardProc,theApp.m_hInstance, 0);
        }
        
    } else if (g_hHookKbdLL != NULL) {
        UnhookWindowsHookEx(g_hHookKbdLL);
        g_hHookKbdLL = NULL;
    }
    
    return g_hHookKbdLL != NULL;
}


现在的问题是:当可以输入密码的对话框弹出来以后输入密码,到该窗口关闭,如果将输入的数据(或者说返回一个true or false)传送到上面这个程序中的if()中间去呢。

还有个问题,如果我要屏蔽Ctrl+C键,怎么写呢?(如果不是带有窗体的dll,我可以解决。)

回复列表 (共1个回复)

沙发

现在问题我自己已经解决了。
1.if()中间应该怎么写

判断密码是否正确,是在SecretDlg对话框的自定义确定按钮方法中判断,如果正确调用onok方法;否则调用oncancel方法。

然后在if()之前定义一个整型参数int a=secretDlg.DoModal();
if(a==ONOK)
  调用下个钩子
else
 return 1;表示屏蔽成功

2, 解决CTRL+C
if中间写wp=='C'&&GetAsyncKeyState(VK_CONTROL)<0即可。

我来回复

您尚未登录,请登录后再回复。点此登录或注册