我想要与Windows 7任务栏具有相同的效果.
我已经看过这个问题:
 保持窗口看起来很活跃
 
它很好但只有窗口有一个非客户区域.
我的窗口是无边框的,无论我做什么,它的内容(只是黑色背景)都会呈现为不活动状态.
我将窗口标志设置为Windows 7任务栏,但它没有帮助.
我现在唯一的想法就是用边框画它并剪掉它们,有没有更好的方法来实现我想要的?
编辑1:
 
剪切不起作用,剪切边框后,窗口内容呈现为非活动窗口.那么Windows 7任务栏到底有什么用呢?
EDIT2:
 
添加一些照片来更好地解释自己,以下窗口内容是黑色背景.  
这是一个非活动窗口(内容呈现有点暗):
  
这是一个活跃的窗口:
  
如果窗口没有客户区,则内容总是呈现为非活动窗口,但是窗口任务栏总是呈现为活动窗口,并且它没有任何NC区域(至少根据spy ++).这就是我想要模仿的东西.
编辑3:
 
分享我最近的发现.explorer.exe主窗口是无框架的,并具有以下标志:

我潜入了探险家的进程dwmapi.dll导出函数:

就像我一样,它使用DwmEnableBlurBehindWindow.
我检查了未记录的序数函数,但没有一个与将空气玻璃渲染为活动状态有关.
可能是DWM规则不适用于资源管理器吗?
我正在向某个进程注入一个DLL,该DLL有一个正在运行消息循环的工作线程.
我想正确地退出线程,即发布一个退出消息(PostThreadMessage)并等待它(WaitForSingleObject).
我在哪里可以等待这个线程关闭?我无法在DLL_PROCESS_DETACH上执行此操作,因为此时所有线程都已关闭或终止,我不知道该进程何时即将关闭.
我唯一的想法是,有没有办法拦截主线程消息循环并寻找WM_CLOSE\DESTROY消息?
我很想听到任何其他想法\解决方案.
编辑:
尝试使用带有WH_CALLWNDPROC的SetWindowsHookEx挂钩主线程,但它没有很好地工作,我设法挂钩并接收线程的消息.但是,我没有收到WM_QUIT消息,只有WM_DESTROY和WM_NCDESTROY,它们都与windows相关联.   
谢谢,
奥梅尔
我正在尝试将64位DLL注入64位进程(探测器).
我尝试过使用Remote-thread\Window Hooks技术,但是一些Anti-Viruses检测到我的加载器是误报.
阅读本文后:Darawk的Dll Injection,我决定使用代码洞穴.
它适用于32位,但因为VS不支持64位的内联汇编,所以我必须明确地编写操作码和操作数.
我看了这篇文章:64Bit注入使用代码洞穴,正如文章所述,存在一些差异:  
这里必须包含几个不同之处:
- MASM64使用fastcall,因此函数的参数必须在寄存器中传递,而不是在堆栈中传递.
 - 必须考虑地址的长度--32对64位.
 - MASM64没有指令将所有寄存器压入堆栈(如32位的pushad),因此必须通过显式推送所有寄存器来完成.
 
我按照这些指导原则运行了文章的例子,但没有我做过的工作.
目标进程刚刚在我恢复主线程时崩溃,我不知道如何真正调查它因为ollydbg没有64位支持.  
这是我注入之前代码的样子:
   codeToInject:  
000000013FACD000  push        7741933Ah  
000000013FACD005  pushfq  
000000013FACD006  push        rax  
000000013FACD007  push        rcx  
000000013FACD008  push        rdx  
000000013FACD009  push        rbx  
000000013FACD00A  push        rbp  
000000013FACD00B  push        rsi  
000000013FACD00C  push        rdi  
000000013FACD00D  push        r8  
000000013FACD00F  push        r9  
000000013FACD011  push        r10  
000000013FACD013  push        r11  
000000013FACD015  push        r12  
000000013FACD017  push        r13  
000000013FACD019  push        r14  
000000013FACD01B  push        r15  
000000013FACD01D  mov         rcx,2CA0000h  
000000013FACD027  mov         rax,76E36F80h  
000000013FACD031  call        rax  
000000013FACD033  pop …Run Code Online (Sandbox Code Playgroud) 我有一个透明窗口(使用WS_EX_LAYERED创建),我想接收零alpha区域的鼠标事件.
据我所知,我可以:    
1)使用鼠标钩
2)用几乎完全透明的颜色(不透明度为1)绘制背景  
然而,第一个解决方案是耗时的,第二个解决方案将减慢我的渲染时间,因为我的窗口几乎遍布桌面,大多数像素目前都是完全透明的.
是否有其他方式接收这些鼠标事件?
我正在寻找一种方法来检测用户是否使用小图标:

我在GetSystemMetrics\SystemParametersInfo中找不到任何内容.
我试图使用"正在运行的应用程序"窗口的大小:

当任务栏的方向位于底部\顶部时,它可正常工作,但当它位于左侧\右侧时,此窗口将占用整个任务栏的宽度.
有任何想法吗?
编辑:我改述了我的问题,请忽略下面的所有评论(截至5月7日).
首先,我将尝试解释这个问题:
我的过程是尝试使用ITrayDeskBand :: ShowDeskBand以编程方式显示Deskband.
除了操作系统加载所有进程(重置或注销后)之外,它在任何时候都可以正常工作.  
Windows启动并开始加载各种应用程序\服务后,鼠标光标设置为等待几秒钟(取决于运行的应用程序数量\所有内容的速度).
如果鼠标光标设置为wait并且进程在此期间运行,则调用将失败.
但是,如果我的进程等待几秒钟(在此之后光标变为常规)然后调用该调用,一切都很好.   
在Windows 7和Windows Vista上都重现了此行为.
基本上我要问的是:
1)仅仅为了基本知识,当光标设置为忙时操作系统会做什么?
2)更重要的问题:如何在此过程结束时以编程方式检测?  
起初,我认为资源管理器没有正确加载,所以我使用了WaitForInputIdle,但事实并非如此.
后来我认为忙碌的光标表示CPU正忙,所以我创建了我的进程,IDLE_PRIORITY_CLASS但是在光标忙的时候收到了空闲时间.