C++ CBT_钩子、HCBT_最小最大事件或子分类以隐藏对话框窗口。C++;在窗户上
我试图阻止MS Access为加密的accdb文件打开的对话框密码窗口变得可见。(相反,我通过启动程序使用SendMessage API输入密码) 我尝试安装CBT_钩子,但是对话框窗口的HCBT_MINMAX事件不会以与其他常规窗口相同的方式触发,即:lParam的低阶字不包含预期的显示窗口值(我可以覆盖该值)。[对于常规窗口,它确实可以正常工作] 该窗口首先创建为隐藏,因此在HCBT_CREATEWND事件中修改CBT_CREATEWND结构没有帮助。[我尝试将->cx和->cy设置为0大小,但子窗口强制使用最小大小] 我还尝试过对对话框窗口进行子分类(一旦触发了HCBT_CREATEWND,我就对它进行子分类),但是在那之后,将WM_SHOWWINDOW消息的lParam设置为FALSE并没有阻止窗口显示 我还尝试取消(返回0)窗口收到的大多数WM_u消息,例如WM_ACTIVATE、WM_SHOWWINDOW等,但没有成功 取消WM_NCCALCSIZE消息会有所帮助,但这并不会阻止子窗口显示,因此它并没有真正的帮助 有什么想法吗 [目前,在启动Access之前,我每10毫秒枚举一次所有窗口,一旦找到密码对话框,我就会向它发送一条隐藏消息,但即使每10毫秒这样做,也会导致它在被发现时闪烁一次,我希望防止这种情况发生 使用“窗口样式隐藏”启动Access没有帮助,因为主Access应用程序保持隐藏状态,但对话框不保持隐藏状态。]实现此目的的方法(以及隐藏另一个进程在创建对话框时创建的对话框的其他类似情况,如下所示): 在CBT_Hook子类中,对话框一创建(CBT_CREATEWND被激发)就立即启动 在window子类函数中,第一次调用时将window设置为transparentC++ CBT_钩子、HCBT_最小最大事件或子分类以隐藏对话框窗口。C++;在窗户上,c++,windows,event-handling,hook,messaging,C++,Windows,Event Handling,Hook,Messaging,我试图阻止MS Access为加密的accdb文件打开的对话框密码窗口变得可见。(相反,我通过启动程序使用SendMessage API输入密码) 我尝试安装CBT_钩子,但是对话框窗口的HCBT_MINMAX事件不会以与其他常规窗口相同的方式触发,即:lParam的低阶字不包含预期的显示窗口值(我可以覆盖该值)。[对于常规窗口,它确实可以正常工作] 该窗口首先创建为隐藏,因此在HCBT_CREATEWND事件中修改CBT_CREATEWND结构没有帮助。[我尝试将->cx和->cy设置为0大小
if (done != TRUE) {
LONG_PTR exstyle = GetWindowLongPtr(hwnd, GWL_EXSTYLE);
if (!(exstyle & WS_EX_LAYERED)) {
SetWindowLongPtr(hwnd, GWL_EXSTYLE, exstyle | WS_EX_LAYERED);
}
SetLayeredWindowAttributes(hwnd, 0, 0, LWA_ALPHA);
done = TRUE;
}
现在窗口将不会在屏幕上闪烁