gpt4 book ai didi

c++ - Teamviewers Quickconnect 按钮是如何实现的?

转载 作者:可可西里 更新时间:2023-11-01 15:22:35 31 4
gpt4 key购买 nike

对于那些不知道我在说什么的人: http://www.teamviewer.com/images/presse/quickconnect_en.jpg

Teamviewer 将该按钮覆盖在所有窗口上,让您可以快速与其他人共享一个窗口。我想要关于实现类似内容的任何想法——如果你有示例代码,那就更好了(具体来说,按钮——而不是共享)。我对 C++ 和 QT 很感兴趣……但如果有的话,我会对其他语言/库的好的解决方案感兴趣。

谢谢。

最佳答案

要在外部窗口中绘制按钮或其他内容,您需要将代码注入(inject)外部进程。检查SetWindowsHookEx方法:

您很可能想为 WH_CALLWNDPROCRET 安装一个钩子(Hook)并注意 WM_NCPAINT信息。这是绘制按钮的正确位置。但是,我不太确定,如果你可以在非客户区内放置一个窗口,那么在最坏的情况下,你必须“手动”绘制按钮。

只需从您的主应用程序(或从 DLL 中)调用它

SetWindowsHookEx(WH_CALLWNDPROCRET, myCallWndRetProc, hModule, 0);

请注意,myCallWndRetProc 必须驻留在 DLL 中,而 hModule 是此 DLL 的模块句柄。

您的 myCallWndRetProc 可能如下所示:

LRESULT CALLBACK myCallWndRetProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode == HT_ACTION) {
CWPRETSTRUCT* cwpret = (CWPRETSTRUCT*)lParam;
if (cwpret->message == WM_NCPAINT) {
// The non-client area has just been painted.
// Now it's your turn to draw your buttons or whatever you like
}
}
return CallNextHookEx(0, nCode, wParam, lParam);
}

在开始实现时,我建议您只创建一个简单的对话框应用程序并仅 Hook 您自己的进程:

SetWindowsHookEx(WH_CALLWNDPROCRET, myCallWndRetProc, NULL, GetCurrentThreadId());

安装全局 Hook 会将 DLL 注入(inject)所有进程,这使得调试非常困难,并且您的 DLL 在使用时可能会被写保护。

关于c++ - Teamviewers Quickconnect 按钮是如何实现的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11996801/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com