当应用程序是服务时,SetWinEventHook 回调不起作用

2023-12-02

我有一个在 .NET 4.0 中制作的应用程序,它挂钩 win 事件并使用回调来捕获窗口事件,如下所示:

    //import the methos from the dll
    [DllImport("user32.dll", SetLastError = true)]
    private static extern IntPtr SetWinEventHook(int eventMin, int eventMax, IntPtr hmodWinEventProc, WinEventProc lpfnWinEventProc, int idProcess, int idThread, int dwflags);
    //declare a callback
    public static WinEventProc _winEventProc = new WinEventProc(WindowEventCallback);
    //pass this callback to SetWinEventHook
    SetWinEventHook(
            EVENT_SYSTEM_FOREGROUND, // eventMin
            EVENT_SYSTEM_FOREGROUND, // eventMax
            IntPtr.Zero,             // hmodWinEventProc
            _winEventProc,
            0,                       // idProcess
            0,                       // idThread
            WINEVENT_OUTOFCONTEXT | WINEVENT_SKIPOWNPROCESS);
   //define somthing in callback
   private static void WindowEventCallback(IntPtr hWinEventHook, uint eventType, IntPtr      hwnd, int idObject, int idChild, uint dwEventThread, uint dwmsEventTime)
    {
        Logger.Instance.Write("WindowEventCallback");
    }
    //the loop that reads the messages
     while (true)
        {
            if (PeekMessage(out msg, IntPtr.Zero, 0, 0, PM_REMOVE))
            {
                if (msg.Message == WM_QUIT)
                    break;
                TranslateMessage(ref msg);
                DispatchMessage(ref msg);
            }
        }

当应用程序配置为控制台应用程序时,此代码可以完美运行。 但我希望它作为服务运行,所以我对循环做了一些更改,因为我们不能在服务的 OnStart 方法中进行连续循环。所以我制作了一个计时器,以 50 毫秒的间隔读取消息,如下所示:

MSG msg;
        if (PeekMessage(out msg, IntPtr.Zero, 0, 0, PM_REMOVE))
        {
            TranslateMessage(ref msg);
            DispatchMessage(ref msg);
        }
//

我还更改了整个应用程序,我创建了一个新项目作为窗口服务,为该服务创建了一个安装程序并使其运行。它作为服务运行正常,但我没有收到事件通知。 我的假设是,将应用程序作为服务运行时,Windows 权限存在一些问题。
该应用程序是在 Win7 64 上使用 Visual Studio 2010 .NET 4.0 制作的
您知道为什么我收不到事件通知吗?
谢谢


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当应用程序是服务时,SetWinEventHook 回调不起作用 的相关文章

随机推荐

  • FORTRAN 指针包含多个数组

    我正在开发一个项目 其中在第一 第二和第三维度上有许多相同大小的数组 尽管第四维度的大小可能有所不同 我想通过构造一个连接这些数组的指针来对这些数组进行分组 为了让这个不那么抽象 假设我有 2 个数组 A size N1 x N2 x N3
  • jQuery 复选框事件处理

    我有以下内容
  • 如何更改 WPF 中的视图?

    有一些空闲时间 想尝试用 WPF 制作游戏 我想知道 改变窗口视图的最佳方法是什么 我制作了一个 主菜单 窗口 带有三个按钮 新游戏 继续游戏和退出游戏 当按 新游戏 时 我希望窗口转到下一个 视图状态 以创建玩家等 不希望弹出新窗口 实现
  • 如何强制java服务器仅接受tls 1.2并拒绝tls 1.0和tls 1.1连接

    我有一个在 Java 7 上运行的 HTTPS Web 服务 我需要进行更改 以便该服务仅接受 TLS1 2 连接并拒绝 SSL3 TLS1 0 和 TLS1 1 我添加了以下 Java 参数 以便 TLS1 2 具有最高优先级 Dhttp
  • Spring Boot 无法在端口 80 上启动

    Spring Boot 在默认的 8080 端口上正常启动 每当我尝试在 application properties 中将端口设置为 80 或使用命令行参数时 都会收到以下错误 将端口设置为 9000 效果很好 有任何想法吗
  • Android 5.0 (API 21) 无法渲染自定义字体/字体

    Android 5 0 似乎无法渲染自定义字体 此问题不会出现在 Android 5 0 之前 也不会出现在 Android 5 1 API 22 中 以下是使用名为 coaster 的字体的示例 可在此处获取 http www dafon
  • 嵌入 Google 电子表格中范围和工作表的超链接

    我需要向 Google 表格中制作的报告添加一些导航 它有很多工作表 我添加了一些超链接 以便用户可以单击它们并快速移动到相关工作表或范围 它在编辑器中工作正常 如果我在仅查看模式下共享 但我需要将其发布并嵌入到网页中 当我将其嵌入 Ifr
  • 为什么我在按下“AltGr”时收到两条消息?

    Why do I get two messages on AltGr being pressed 我有以下钩子 LRESULT CALLBACK MyClass KeyboardShotcutsHook int code WPARAM wP
  • 查询字符串参数长度问题。 HTTP 错误 400

    谁能告诉我我的网址问题 http www advantarealty net Search 公寓 单户住宅 Townhome PropertyType True ForMap 8 Zoom 81 3043212890625T29 09937
  • CSS - 弯曲路径中的动画对象

    我只想通过弯曲的路径为我的图像制作动画 像这样 我使用绝对位置进行定位 做了一些研究 发现 css 转换可以完成这项工作 可以通过直线轻松完成 但弯曲的路径 我尝试与 csstransform origin transform rotate
  • Glassfish 上的单线程 MDB

    我有许多 MDB 在 Glassfish 3 1 2 2 上运行 由于其中一个 MDB 的工作性质 我需要将其设为单线程 我看了看调音指南 虽然将最大池大小设置为 1 确实解决了问题 但这也意味着所有其他 MDB 都是单线程的 我真正想要实
  • 您是否必须使用比较函数对数字数组进行排序?

    我的印象是 为了对数字数组进行排序 您必须执行以下操作 var numbers 4 1 2 3 function compare a b return a b numbers sort compare 但是 我发现以下方法似乎有效 var
  • ggplot2position='dodge' 生成的条形太宽

    我有兴趣生成一个位置为 dodge 且填充为某个因素的直方图 即每个条形 组内不同子组的并排条形 但是 ggplot2 给了我类似的东西第一个情节在这里 它的最右边的栏太宽 没有为空组保留空间 这是我想要的 这是一个简单的案例 df dat
  • 负边距和背景

    在下面的标记中 我只想设置负边距 textdiv 使其出现在顶部 image div div class wrap div class image img src imgage jpg div div class text text wit
  • 如何传递指向构造函数的函数指针?

    我正在致力于在 C 中实现反射机制 我的代码中的所有对象都是 Object 我自己的通用类型 的子类 其中包含 Class 类型的静态成员数据 class Class public Class const std string n Obje
  • Bootstrap 日期选择器禁用没有当前日期的过去日期

    我想禁用当前日期之前的所有过去日期 而不是当前日期 我正在尝试通过引导日期选择器库 引导日期选择器 并使用以下代码 date datepicker startDate new Date 效果很好 但直到今天它才被禁用 例如 如果今天是 20
  • Python ctypes 指向结构的指针作为标识符,无需成员访问

    我有两个不同的 C 函数 我想将它们与 Python 中的 ctypes 一起使用 一个函数正在建立连接并返回指向结构的指针 该指针应用作第二个函数中的参数以重用已建立的连接 C Code customStruct connect cust
  • pandas.qcut 和 pandas.cut 有什么区别?

    文档说 http pandas pydata org pandas docs dev basics html 可以使用 cut 基于值的 bin 和 qcut 基于样本分位数的 bin 函数对连续值进行离散化 对我来说听起来很抽象 我可以看
  • 被 FileNotFound 异常难住了

    我想做的就是从文本文件导入数据 该文件位于 C temp text txt 但是 我不断收到文件未找到错误 我到底做错了什么 public static void main String args throws IOException St
  • 当应用程序是服务时,SetWinEventHook 回调不起作用

    我有一个在 NET 4 0 中制作的应用程序 它挂钩 win 事件并使用回调来捕获窗口事件 如下所示 import the methos from the dll DllImport user32 dll SetLastError true