gpt4 book ai didi

java - 如何像UAC窗口一样控制键盘和鼠标

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:28:04 25 4
gpt4 key购买 nike

谁能帮帮我?我想创建一个应用程序,例如用户访问控制 (UAC) 应用程序。当 UAC 运行时,我们不能点击屏幕上的任何地方,除非我们关闭 UAC 窗口。我们也不能按任何键做任何事情,比如窗口键或任何功能键。所以我想使用 C++ 代码创建一个类似的应用程序来控制键盘和鼠标,只有鼠标和键盘在我的应用程序窗口中启用并在外部禁用,除非我不关闭我的应用程序我不能执行任何其他任务。我的应用程序只是一个带有关闭按钮和上述控件的简单图形窗口。

最佳答案

很久以前,Windows 支持系统模式对话框。这些将阻止用户与包括桌面在内的其他窗口进行交互。由于它引起的问题,Microsoft 很久以前就取消了对此的支持。

现在,当 Windows 需要为 UAC 提供系统模式窗口时,他们会使用一些桌面魔法。为了模拟系统模态窗口,UAC 会执行类似的操作。

  • 创建位图并拍摄当前桌面的快照。
  • 使位图变暗
  • 创建一个新桌面
  • 将新桌面设置为当前 Activity 桌面。
  • 创建一个新桌面大小的窗口并在其中绘制位图。

现在他们有一个桌面,看起来像旧的一样,就像一个系统模型窗口一样。然后您可以自由地创建一个子窗口来获取用户的输入。下面的例子展示了如何创建一个桌面并切换到它,应该是你想做的事情的一个很好的起点

// TODO: Make a copy of the current desktop

// Prepeare a new desktop and activate it
HDESK oldDesktop = GetThreadDesktop(GetCurrentThreadId());
HDESK desktop = CreateDesktop(L"MyDesktop", NULL, NULL, 0, GENERIC_ALL, NULL);
SwitchDesktop(desktop);

// TODO: Create the window that draws the snapshot of the old desktop

// TODO: Create a dialog with buttons and stuff

// Since we don't have a window sit for 5 seconds staring at blank screen
Sleep(5000);

// Switch back to the old desktop and destroy the one we created
// ALERT: If we crash or exit without doing this you will need to
// restart windows
SwitchDesktop(oldDesktop);
CloseDesktop(desktop);

您可以在 desktop related API's 上找到更多信息

关于java - 如何像UAC窗口一样控制键盘和鼠标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16000423/

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