代码之家  ›  专栏  ›  技术社区  ›  Vadim Pashaev

另一个线程的SetThreadExecutionState

  •  0
  • Vadim Pashaev  · 技术社区  · 7 年前

    我可以使用 SetThreadExecutionState() 更改调用此函数的线程的执行状态。有没有办法调用这个(类似的)函数来更改另一个线程的执行状态,而不是我调用它的线程。

    实际上,问题是我使用的一个dll文件(来自VLC库)正在调用此函数以防止显示关闭。我想禁止它这样做。我想为进程中的所有线程调用SetThreadExecutionState(),并从其状态中排除DISPLAY\u REQUIRED标志。

    如果无法为另一个线程调用此函数或类似函数,那么有人知道实现此功能的其他方法吗?

    谢谢

    1 回复  |  直到 7 年前
        1
  •  2
  •   Remy Lebeau    7 年前

    有没有办法调用这个(类似的)函数来更改另一个线程的执行状态

    不直接,不。它只在调用它的线程中工作。您必须在每个线程中单独调用它。如果您无权访问给定的线程(例如,DLL在内部创建的线程),则必须以某种方式注入在该线程上下文中运行的代码。有多种注射技术可用。

    我使用的一个dll文件(来自VLC库)正在调用此函数以防止显示关闭。我想禁止它这样做。我想为进程中的所有线程调用SetThreadExecutionState(),并从其状态中排除DISPLAY\u REQUIRED标志。

    只需挂接函数本身(有很多示例甚至库用于挂接API函数),这样就可以在将输入参数转发给原始函数之前更改它。