5

我目前正在编写一个使用低级鼠标钩子的应用程序。因为我必须使用具有管理员权限的系统启动应用程序,所以我想创建一个服务(请参阅此处:这是服务的实际用途吗?)。现在我刚刚发现服务不能使用钩子鼠标钩子。所以我需要一个新概念,但我真的不知道从哪里开始。我已经尝试过一个简单的过程,但我无法使用任务调度程序在系统启动时以管理员身份运行它。

那么推荐使用什么?我还应该使用 Windows 服务来启动进程吗?是不是有点矫枉过正?

编辑:我刚刚尝试启动执行挂钩服务的进程。该过程开始了,但看起来它的行为与简单服务的行为相同。我可以安装钩子,但不会调用回调。我用这段代码开始这个过程:

STARTUPINFO info={sizeof(info)};
PROCESS_INFORMATION processInfo;
if (!CreateProcess(path, NULL, NULL, NULL, TRUE, 0, NULL, NULL, &info, &processInfo))
{
    std::wstring msg(L"Could not start \"");
    msg.append(path);
    msg.append(L"\". CreateProcess");
    WriteErrorLogEntry((PWSTR)msg.c_str());
    return;
}

我该如何解决我的问题?该过程必须以管理员权限运行,但需要另一个上下文?

4

2 回答 2

0

我的猜测是鼠标输入是每个会话的,所以我猜你没有得到你想要的行为,因为你的进程没有在你想要的WindowsStation中运行。

于 2016-04-23T16:01:39.540 回答
-1

我认为您也许可以使用任务计划程序以管理员权限启动程序。

这是一个网站,展示了如何创建一个以管理权限运行而没有 UAC 提示的快捷方式,它使用任务计划程序作为启动程序的方式。

http://www.howtogeek.com/howto/windows-vista/create-administrator-mode-shortcuts-without-uac-prompts-in-windows-vista/

如果您不想手动调用它,您仍然可以使用任务计划程序的常用功能来自动启动程序。

于 2013-08-06T05:18:54.837 回答