请问电脑如何判断HDMI接的屏幕是打开的?

请问电脑如何判断HDMI接的屏幕是打开的?

目前在车间有放电视墙展示生产状况
但有时会有停电或是人为不小心关闭屏幕情况
导致每天都要去现场巡视
请问有办法用程序或是其它方式,能知道电脑连接的HDMI屏幕是否打开状态吗?

阅读 1.2k
avatarAI BotBETA

一般来说,电脑无法直接检测HDMI屏幕是否打开。HDMI是一种用于传输视频和音频信号的接口,它并不包含任何关于设备状态(例如打开或关闭)的信息。

然而,你可以通过一些间接的方式来推断HDMI屏幕是否打开。以下是一些可能的方法:

  1. 通过检测视频信号:你可以尝试通过软件或硬件(如专门的摄像头)来检测HDMI屏幕是否在发送视频信号。如果屏幕打开,那么它应该会发送一个视频信号。如果屏幕关闭,那么视频信号可能会消失或者改变。这种方法可能会有一些限制,因为不是所有的屏幕在关闭时都会立即停止发送视频信号。
  2. 通过检测电源:如果你的HDMI屏幕有电源开关,并且可以通过程序控制,那么你可以通过检查电源开关的状态来判断屏幕是否打开。
  3. 通过远程管理:如果你的HDMI屏幕是可以通过网络远程管理的,那么你可以通过远程桌面或者专门的远程管理软件来查看屏幕的状态。
  4. 使用传感器:如果你能在屏幕附近安装一些传感器(例如温度、亮度传感器),那么你可以根据屏幕打开时周围环境的变化来推断屏幕的状态。

以上只是一些可能的方法,具体的实现方式取决于你的设备和环境。希望这些信息能帮助你解决问题。

2 个回答

试下写个 demo 程序来监控。断电情况(程序挂掉),发送告警到微信、钉钉等;屏幕关闭情况,根据 GetSystemMetrics(SM_CMONITORS) 获取屏幕数量。

现在gpt那么火,润色下:你作为一个资深windows开发,试下写个 exe程序来监控以下两个情况。1. 断电情况(程序挂掉),发送告警到微信、钉钉等;2. 多个屏幕时,有一个屏幕关闭情况,根据 GetSystemMetrics(SM_CMONITORS) 获取屏幕数量,发送告警。大概程序就有了:

ps:但是断电情况,还是你自己在其他机器认真写个脚本,老老实实地 ping 去吧~

#include <Windows.h>
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <urlmon.h>

#pragma comment (lib, "urlmon.lib")

bool IsProgramRunning(const TCHAR* szExeName)
{
    // 创建快照
    HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if (hSnap == INVALID_HANDLE_VALUE)
    {
       return false;
    }

    PROCESSENTRY32 pe32;
    pe32.dwSize = sizeof(PROCESSENTRY32);

    // 检查每个进程
    if (!Process32First(hSnap, &pe32))
    {
        CloseHandle(hSnap);
        return false;
    }

    do
    {
        if (_tcsicmp(pe32.szExeFile, szExeName) == 0)
        {
            CloseHandle(hSnap);
            return true;
        }
    } while (Process32Next(hSnap, &pe32));

    CloseHandle(hSnap);
    return false;
}

void SendAlert(const std::string& message)
{
    // TODO: implement code to send alert message to WeChat or DingTalk
}

void CheckProgramAndMonitors()
{
    // 监控目标程序的状态
    while (true)
    {
        if (!IsProgramRunning(_T("your_program.exe")))
        {
            // 目标程序已退出,发送报警信息
            SendAlert("Your program has terminated unexpectedly");
        }

        // 检查屏幕数量
        int monitorCount = GetSystemMetrics(SM_CMONITORS);

        // 如果屏幕数量小于预期值,发送报警
        if (monitorCount < 2)
        {
            SendAlert("One of the monitors has been disconnected");
        }

        Sleep(5000);  // 每隔5秒检查一次
    }
}

int main()
{
    CheckProgramAndMonitors();
    return 0;
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏