有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在JNA中解析DWORD

我正在尝试使用JNA查询Java中Windows服务的状态。我正在使用以下Windows API函数:

QuerySerivceStatusEx( SC_HANDLE hService, SC_STATUS_TYPE InfoLevel, LPBYTE lpBuffer, DWORD cbBufSize, LPDWORD pcbBytesNeeded)

LPBYTE lpBuffer中有一个指向结构的指针。在结构内部,它将当前状态存储为DWORD。根据JNA文档DWORDs映射到Java中的ints,并根据WinSvc。与运行相关联的DWORD0x00000004,因此在我的代码中,我定义了一个值为0x00000004的最终int,如

public static final int SERVICE_RUNNING = 0x00000004

当我运行代码并且查询的服务正在运行时,我将返回一个值16,该值在WinSvc中根本没有定义。h、 有什么我不知道的翻译吗

编辑:这里是服务可以处于的所有状态及其关联值:

   public static final int SERVICE_STOPPED            = 0x00000001;
   public static final int SERVICE_START_PENDING      = 0x00000002;
   public static final int SERVICE_STOP_PENDING       = 0x00000003;
   public static final int SERVICE_RUNNING            = 0x00000004;
   public static final int SERVICE_CONTINUE_PENDING   = 0x00000005;
   public static final int SERVICE_PAUSE_PENDING      = 0x00000006;
   public static final int SERVICE_PAUSED             = 0x00000007;

共 (2) 个答案

  1. # 1 楼答案

    最后我发现了我的问题。无论服务是启动还是停止,都将返回16。事实证明,我没有返回结构SERVICE_STATUS_PROCESS,它的定义顺序与本机库中的定义顺序相同。我不知道这需要完成,但您需要按照本地代码中的顺序定义结构

  2. # 2 楼答案

    这样的值通常是多个标志值或组合在一起。e、 例如,为了同时指示42标志,您将得到4 | 26。然后,您可以通过将结果(6)与每个标志相加,并查看其是否为真(6 & 46 & 2将为真,但6 & 1将不为真,从而确定设置了哪些标志,因此您知道42设置了标志,但没有1

    也就是说,16是一个基本值(它是2的幂),所以我不确定