实在是顶不住了,大家帮帮我吧.
我的程序目的是在记事本中,按F2,弹出一个无模式对话框。我使用的方法是钩子。我在一个MFC 扩展DLL中完成了这个程序的核心,使用消息钩子
核心如下:
....
reg *g_pWnd //reg是我建立的无模式对话框类名
...
LRESULT WINAPI MsgHookProc(int code, WPARAM wParam, LPARAM lParam)
{
PMSG pMsg = (PMSG)lParam;
if(pMsg->message == WM_KEYDOWN)
{
if (pMsg->wParam == VK_F2)
{
g_pWnd = new reg();
g_pWnd->Create(reg::IDD);
g_pWnd->ShowWindow(SW_SHOW);
} }
.......目的无非就是在记事本中按F2,弹出对话框。现在的效果是,一运行,弹出一大堆
Debug Assertion Failed,一直点“忽略”,最后才能看见对话框。
功能是实现了,但Debug Assertion Failed是怎么回事~~??大家帮帮我啊~
PS.我把显示对话框的代码加到钩子函数里——就是一下钩子,就弹出,可以正常运行。
我的程序目的是在记事本中,按F2,弹出一个无模式对话框。我使用的方法是钩子。我在一个MFC 扩展DLL中完成了这个程序的核心,使用消息钩子
核心如下:
....
reg *g_pWnd //reg是我建立的无模式对话框类名
...
LRESULT WINAPI MsgHookProc(int code, WPARAM wParam, LPARAM lParam)
{
PMSG pMsg = (PMSG)lParam;
if(pMsg->message == WM_KEYDOWN)
{
if (pMsg->wParam == VK_F2)
{
g_pWnd = new reg();
g_pWnd->Create(reg::IDD);
g_pWnd->ShowWindow(SW_SHOW);
} }
.......目的无非就是在记事本中按F2,弹出对话框。现在的效果是,一运行,弹出一大堆
Debug Assertion Failed,一直点“忽略”,最后才能看见对话框。
功能是实现了,但Debug Assertion Failed是怎么回事~~??大家帮帮我啊~
PS.我把显示对话框的代码加到钩子函数里——就是一下钩子,就弹出,可以正常运行。
如果出现则是你对话框的问题,
否则就是Hook问题,你的代码不全啊!!!
可能一些控件创建失败!
调试进去看看 什么都清楚了!
#include "stdafx.h"
#include <afxdllx.h>
#include "reg.h" // 这个是要开的对话框
....
#pragma data_seg("Sd")
HHOOK g_hook = NULL; // 钩子句柄
DWORD Pid = NULL;//进程id
#pragma data_seg()
#pragma comment(linker,"/section:Sd,RWS")reg *g_pWnd = NULL;LRESULT CALLBACK MsgHookProc(int code, WPARAM wParam, LPARAM lParam)
{
PMSG pMsg = (PMSG)lParam;
if(pMsg->message == WM_KEYDOWN)
{
if (pMsg->wParam == VK_F2)
{
g_pWnd = new reg();
g_pWnd->Create(reg::IDD);
g_pWnd->ShowWindow(SW_SHOW); } }
return(CallNextHookEx(g_hook, code, wParam, lParam));
}
void SetHook(DWORD h_word)
{
Pid = h_word;
g_hook = SetWindowsHookEx(WH_GETMESSAGE, MsgHookProc,GetModuleHandle(L"mfcdll"),Pid);
}def中的字段
....
EXPORTS
SetHook
if (code >= 0)
{
PMSG pMsg = (PMSG)lParam;
if(pMsg-> message == WM_KEYDOWN)
{
if (pMsg-> wParam == VK_F2)
{
g_pWnd = new reg();
g_pWnd-> Create(reg::IDD);
g_pWnd-> ShowWindow(SW_SHOW); }
}
}
另外,g_pWnd没有delete
显示对话框可以用线程。