隐藏非客户端窗口 - 仍然看到它是蓝色框架。 [英] Hiding a Non Client Window - still see it's blue frame.

查看:80
本文介绍了隐藏非客户端窗口 - 仍然看到它是蓝色框架。的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

好的,这是不受欢迎的。



我有一个COM Dll控制界面插件,插入第三方数字音频工作站。

我需要从单击VST插件标题栏的字符串中读取条带编号。控制表面插件没有可用的调用来读取此数据。



我应该说,如果VST插件是点击,那么它的GUI默认不会启动。



所以我做的是强制单击一下VST插件的GUI启动,挂钩非客户端窗口创建尝试抓取标题栏字符串然后隐藏窗口希望用户永远不会按预期看到它的GUI。



VST显然是预先激活的,因为我没有看到WM_NCACTIVATE被发送到我的钩子。 br />
我确实看到了后面的WM_NCPAINT,那时字符串就像我想要的那样存档所以我抓住了文本并发送了一个带有HIDE_WINDOW的SetWindowPos(),这使得VST GUI消失了,我们再也看不到了它是YAY!



除了:GUI蓝框在很短的时间内可以看到让我感到焦虑。



以下是单击VST插件时发生的SPY ++游行。



你认为抑制蓝框也是可能的吗? le?



P.S. NC_ACTIVE在手动关闭VST GUI时被发送到我的钩子但是(显然)没有创建它。



谢谢。



:Ron





< 00001> 000E04F6 S WM_NCACTIVATE fActive:True

< 00002> 000E04F6 R WM_NCACTIVATE

< 00003> 000E04F6 S WM_NCACTIVATE fActive:False

< 00004> 000E04F6 R WM_NCACTIVATE fDeactivateOK:True

< 00005> 000E04F6 S WM_NCACTIVATE fActive:False

< 00006> 000E04F6 R WM_NCACTIVATE fDeactivateOK:True

< 00007> 000E04F6 S WM_NCACTIVATE fActive:False

< 00008> 000E04F6 R WM_NCACTIVATE fDeactivateOK:True

< 00009> 000E04F6 S WM_NCACTIVATE fActive:False

< 00010> 000E04F6 R WM_NCACTIVATE fDeactivateOK:True

< 00011> 000E04F6 S WM_NCPAINT hrgn:01042269

< 00012> 000E04F6 R WM_NCPAINT

< 00013> 000E04F6 S WM_NCACTIVATE fActive:True

< 00014> 000E04F6 R WM_NCACTIVATE

< 00015> 000E04F6 S WM_NCPAINT hrgn:F4041664

< 00016> 000E04F6 R WM_NCPAINT

< 00017> 000E04F6 S WM_NCACTIVATE fActive:True

< 00018> 000E04F6 R WM_NCACTIVATE

< 00019> 000E04F6 S WM_NCACTIVATE fActive:False

< 00020> 000E04F6 R WM_NCACTIVATE fDeactivateOK:True

< 00021> 000E04F6 S WM_NCACTIVATE fActive:False

< 00022> 000E04F6 R WM_NCACTIVATE fDeactivateOK:True

< 00023> 000E04F6 S WM_NCACTIVATE fActive:False

< 00024> 000E04F6 R WM_NCACTIVATE fDeactivateOK:True

< 00025> 000E04F6 S WM_NCPAINT hrgn:DA040B9E

< 00026> 000E04F6 R WM_NCPAINT

< 00027> 000E04F6 S WM_NCHITTEST xPos:680 yPos:407

< 00028> 000E04F6 R WM_NCHITTEST nHittest:HTLEFT

< 00029> 000E04F6 P WM_NCMOUSEMOVE nHittest:HTLEFT xPos:680 yPos:407

< 00030> 000E04F6 P WM_NCMOUSELEAVE

< 00031> 000E04F6 S WM_NCHITTEST xPos:680 yPos:239

< 00032> 000E04F6 R WM_NCHITTEST nHittest:HTLEFT

< 00033> 000E04F6 P WM_NCMOUSEMOVE nHittest:HTLEFT xPos:680 yPos:239

< 00034> 000E04F6 P WM_NCMOUSELEAVE

< 00035> 000E04F6 S WM_NCPAINT hrgn:00000001

< 00036> 000E04F6 R WM_NCPAINT

< 00037> 000E04F6 S WM_NCACTIVATE fActive:True

< 00038> 000E04F6 R WM_NCACTIVATE

< 00039> 000E04F6 S WM_NCACTIVATE fActive:False

< 00040> 000E04F6 R WM_NCACTIVATE fDeactivateOK:True

< 00041> 000E04F6 S WM_NCACTIVATE fActive:False

< 00042> 000E04F6 R WM_NCACTIVATE fDeactivateOK:True

< 00043> 000E04F6 S WM_NCACTIVATE fActive:False

< 00044> 000E04F6 R WM_NCACTIVATE fDeactivateOK:True

< 00045> 000E04F6 S WM_NCACTIVATE fActive:False

< 00046> 000E04F6 R WM_NCACTIVATE fDeactivateOK:True

< 00047> 000E04F6 S WM_NCPAINT hrgn:01042276

< 00048> 000E04F6 R WM_NCPAINT

< 00049> 000E04F6 S WM_NCACTIVATE fActive:True

< 00050> 000E04F6 R WM_NCACTIVATE

< 00051> 000E04F6 S WM_NCACTIVATE fActive:True

< 00052> 000E04F6 R WM_NCACTIVATE

< 00053> 000E04F6 S WM_NCACTIVATE fActive:False

< 00054> 000E04F6 R WM_NCACTIVATE fDeactivateOK:True

< 00055> 000E04F6 S WM_NCACTIVATE fActive:False

< 00056> 000E04F6 R WM_NCACTIVATE fDeactivateOK:True

< 00057> 000E04F6 S WM_NCACTIVATE fActive:False

< 00058> 000E04F6 R WM_NCACTIVATE fDeactivateOK:True

OK, this is off the beaten path.

I have a COM Dll control surface plugin that plugs into a 3rd Party Digital Audio Workstation.
I need to read the strip number from the VST plugin's title bar's string as they are single clicked. There is no calls available to the control surface plugin to read this data otherwise.

I should say that if the VST plugin is single clicked, then it's GUI by default is not launched.

So what I did was force a GUI launch of the VST plugin upon single click, hook the non client window creation to try and grab the title bar string then hide the window in hopes the user would never see it's GUI as expected.

The VST's are apparently pre-activated as I don't see WM_NCACTIVATE sent to my hook.
I do see the WM_NCPAINT that follows and at that time the string is filed in like I want so I grab the text and send a SetWindowPos() with HIDE_WINDOW set which makes the VST GUI disappear and we never see it YAY!

Except: A GUI blue frame is visible for a very brief moment causing me angst.

Below is the SPY++ parade that happens when a VST plugin is single clicked.

Do you think suppressing the blue frame is also possible?

P.S. NC_ACTIVE IS sent to my hook upon manual close of the VST GUI but no (apparently) upon it's creation.

Thanks.

:Ron


<00001> 000E04F6 S WM_NCACTIVATE fActive:True
<00002> 000E04F6 R WM_NCACTIVATE
<00003> 000E04F6 S WM_NCACTIVATE fActive:False
<00004> 000E04F6 R WM_NCACTIVATE fDeactivateOK:True
<00005> 000E04F6 S WM_NCACTIVATE fActive:False
<00006> 000E04F6 R WM_NCACTIVATE fDeactivateOK:True
<00007> 000E04F6 S WM_NCACTIVATE fActive:False
<00008> 000E04F6 R WM_NCACTIVATE fDeactivateOK:True
<00009> 000E04F6 S WM_NCACTIVATE fActive:False
<00010> 000E04F6 R WM_NCACTIVATE fDeactivateOK:True
<00011> 000E04F6 S WM_NCPAINT hrgn:01042269
<00012> 000E04F6 R WM_NCPAINT
<00013> 000E04F6 S WM_NCACTIVATE fActive:True
<00014> 000E04F6 R WM_NCACTIVATE
<00015> 000E04F6 S WM_NCPAINT hrgn:F4041664
<00016> 000E04F6 R WM_NCPAINT
<00017> 000E04F6 S WM_NCACTIVATE fActive:True
<00018> 000E04F6 R WM_NCACTIVATE
<00019> 000E04F6 S WM_NCACTIVATE fActive:False
<00020> 000E04F6 R WM_NCACTIVATE fDeactivateOK:True
<00021> 000E04F6 S WM_NCACTIVATE fActive:False
<00022> 000E04F6 R WM_NCACTIVATE fDeactivateOK:True
<00023> 000E04F6 S WM_NCACTIVATE fActive:False
<00024> 000E04F6 R WM_NCACTIVATE fDeactivateOK:True
<00025> 000E04F6 S WM_NCPAINT hrgn:DA040B9E
<00026> 000E04F6 R WM_NCPAINT
<00027> 000E04F6 S WM_NCHITTEST xPos:680 yPos:407
<00028> 000E04F6 R WM_NCHITTEST nHittest:HTLEFT
<00029> 000E04F6 P WM_NCMOUSEMOVE nHittest:HTLEFT xPos:680 yPos:407
<00030> 000E04F6 P WM_NCMOUSELEAVE
<00031> 000E04F6 S WM_NCHITTEST xPos:680 yPos:239
<00032> 000E04F6 R WM_NCHITTEST nHittest:HTLEFT
<00033> 000E04F6 P WM_NCMOUSEMOVE nHittest:HTLEFT xPos:680 yPos:239
<00034> 000E04F6 P WM_NCMOUSELEAVE
<00035> 000E04F6 S WM_NCPAINT hrgn:00000001
<00036> 000E04F6 R WM_NCPAINT
<00037> 000E04F6 S WM_NCACTIVATE fActive:True
<00038> 000E04F6 R WM_NCACTIVATE
<00039> 000E04F6 S WM_NCACTIVATE fActive:False
<00040> 000E04F6 R WM_NCACTIVATE fDeactivateOK:True
<00041> 000E04F6 S WM_NCACTIVATE fActive:False
<00042> 000E04F6 R WM_NCACTIVATE fDeactivateOK:True
<00043> 000E04F6 S WM_NCACTIVATE fActive:False
<00044> 000E04F6 R WM_NCACTIVATE fDeactivateOK:True
<00045> 000E04F6 S WM_NCACTIVATE fActive:False
<00046> 000E04F6 R WM_NCACTIVATE fDeactivateOK:True
<00047> 000E04F6 S WM_NCPAINT hrgn:01042276
<00048> 000E04F6 R WM_NCPAINT
<00049> 000E04F6 S WM_NCACTIVATE fActive:True
<00050> 000E04F6 R WM_NCACTIVATE
<00051> 000E04F6 S WM_NCACTIVATE fActive:True
<00052> 000E04F6 R WM_NCACTIVATE
<00053> 000E04F6 S WM_NCACTIVATE fActive:False
<00054> 000E04F6 R WM_NCACTIVATE fDeactivateOK:True
<00055> 000E04F6 S WM_NCACTIVATE fActive:False
<00056> 000E04F6 R WM_NCACTIVATE fDeactivateOK:True
<00057> 000E04F6 S WM_NCACTIVATE fActive:False
<00058> 000E04F6 R WM_NCACTIVATE fDeactivateOK:True

推荐答案

我不确定单击时强制启动VST插件的GUI意味着我对VST一无所知把它扔到那里。



1.拦截包含蓝框的重叠窗口的WM_CREATE。不知道是否可能。插件是否在任何GUI之前处于活动状态?您的插件和包含窗口之间的交互对我来说并不清楚。



2.为正在运行的应用程序挂钩CreateWindow / CreateWindowEx和SetWindowText API。检查窗口类名称以确定哪个窗口hanlde是您感兴趣的窗口。毫无疑问,你已经在CP上看过这篇文章。



3.类似的钩子来捕获WM_NOTIFY / NM_CLICK



这些都是大锤技术,但似乎插件API让你陷入困境。
I'm not sure what "force a GUI launch of the VST plugin upon single click" means and I know nothing of VST so just throwing this out there.

1. intercept the WM_CREATE of the overlapping window that includes the "blue frame". Don't know if that is possible. Is the plugin active before any GUI? The interaction between your plugin and the containing window isn't clear to me.

2. Hook the CreateWindow / CreateWindowEx and SetWindowText APIs for your running application. Examine the window class name to determine which window hanlde is the one that interests you. No doubt you've seen articles covering this on CP.

3. similar hook to capture the WM_NOTIFY / NM_CLICK

These are all sledgehammer techniques but it seems the plugin API has you stymied.


这篇关于隐藏非客户端窗口 - 仍然看到它是蓝色框架。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆