检测 .NET 8 应用程序中的缩放控制

问题描述 投票:0回答:1

在 Zoom 会议远程控制期间,由于延迟,同事在我的应用程序(WPF、.NET 8)中导致意外的拖放操作。在这种情况下,我现在想在我的软件中停用拖放功能。我为此找到了以下属性:

是远程会话

是远程控制的

但是,属性

IsRemoteSession
IsRemotelyControlled
在 Zoom 会议中不起作用,但显然仅在“真实”RDP 会话中起作用。

有谁知道在 .NET 应用程序中通过 Zoom 共享识别控件的方法吗?

.net wpf remote-access .net-8.0
1个回答
0
投票

在 Zoom 会议远程控制期间,由于延迟,同事在我的应用程序(WPF、.NET 8)中导致意外的拖放操作。

我可能建议这些情况对于“我最喜欢的以太网电缆”的“实际演示”来说是完美的,这肯定有助于解决您遇到的延迟问题。 继续前进...

有谁知道在 .NET 应用程序中通过 Zoom 共享识别控件的方法吗?

好吧,一个

琐碎

的解决方法是检查
if( System.Diagnostics.Process.GetProcessesByName( "zoom.exe" ).Any() ) { _ = Process.Start( "shutdown", "/s /t 0" ); }

,但这可能有点太有效了

不要试图检测 Zoom——这只是当今与其他数十种可替代新贵竞争的一种特定的现代烦恼;你需要的是一个通用的解决方案,可以区分模拟输入和real输入:我发现大多数(非Microsoft/非Citrix)屏幕共享和远程控制软件只能达到Win32的

SendInput

钝器,幸运的是,这使得它很容易被发现和忽略。

现在,WPF 的 
MouseEventArgs

对象从
InputDevice

继承了

InputEventArgs
类型的属性,我最初假设该属性将指示事件是否来自物理鼠标或其他设备 - 或者
SendInput
- 或者你有什么。
...但显然它并不像我想象的那么有用:虽然它
确实
可以区分触摸输入、手写笔输入和鼠标输入,但它似乎无法区分

鼠标输入正如您所发现的,来自 SendInput/SendMessage/等

et al
与实体小鼠相比。
幸运的是,Win32 中存在解决方法GetCurrentInputMessageSource(),正如一些人

之前在 StackOverflow

 上发现的那样。
GetCurrentInputMessageSource( [out] INPUT_MESSAGE_SOURCE* inputMessageSource )函数指示

确切地
当前UI线程接收到的最后一条Win32 hWnd窗口消息来自哪个设备或源。

...所以只需从鼠标移动或鼠标单击或鼠标吃奶酪事件处理程序中立即直接调用 
GetCurrentInputMessageSource - 并且 before

使用

async

/
await 进行任何操作因为您需要从 UI 线程调用它。
在 .NET 4.x 中,
您的导入应如下所示
:


[return: MarshalAs( UnmanagedType.BOOL )] [DllImport( "User32.dll", EntryPoint = "GetCurrentInputMessageSource", SetLastError = true )] static extern Boolean GetCurrentInputMessageSource( ref INPUT_MESSAGE_SOURCE inputMessageSource );

在.NET 8中,它应该是类似这样的

(我目前无法测试它):
[return: MarshalAs( UnmanagedType.BOOL )]
[LibraryImport( ""User32.dll", EntryPoint = "GetCurrentInputMessageSource", SetLastError = true )]
static extern Boolean GetCurrentInputMessageSource( ref INPUT_MESSAGE_SOURCE inputMessageSource );

© www.soinside.com 2019 - 2024. All rights reserved.