当前位置: 首页 > 知识库问答 >
问题:

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

葛浩阔
2023-11-17

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

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

共有2个答案

武博艺
2023-11-17

试下写个 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;}
戚勇
2023-11-17

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

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

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

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

 类似资料:
  • 问题内容: 在Linux中使用屏幕时,如何确定我是否在屏幕中?如果可以,我可以退出屏幕,但是如果没有,那么我将关闭终端。 在执行操作时,我可以查看是否还连接了其他屏幕,但是如何知道我的当前终端是否是这些已连接屏幕之一? 问题答案: 检查。如果为空,则您位于“真实”终端上。如果包含任何内容,则为您所在屏幕的名称。 如果您不在屏幕上: 如果您在屏幕上:

  • 问题内容: 在终端中工作时,我看到了最后一个Shell命令执行输出的历史记录。如果运行vim,我会看到全屏打开的文件。退出vim时,我可以再次看到最后一个shell命令的历史记录。 但是,当我从屏幕上使用vim时。我在退出vim时看到的是刚刚编辑的文件的足迹,而不是最后一个shell命令的历史记录。 我想看看外壳的历史。 我该如何实现这种行为? 我用了: terminal.app和iterm2.a

  • 函数功能:判断屏幕是否亮屏 函数方法 bool = device.isWake() 返回值 类型 说明 bool string true - 屏幕亮屏,false - 屏幕黑屏 函数用例 bool = device.isWake() if bool then toast("屏幕亮屏",2) mSleep(3000) else toast("屏幕黑屏",2) mSle

  • 前端如何判断用户的 mac 是 arm 还是 x86 https://www.telerik.com/download/fiddler-everywhere 下载 fiddler-everywhere 的时候,它监测到了我的电脑是 arm 怎么实现的?浏览器的 UA 都还是谎称自己是 intel 是通过 js 调用浏览器 API 获得的结果吗?对应的 API 是哪个呢?

  • 问题内容: 我试图弄清楚如何确定一个节点在屏幕上还是屏幕外可见。这仅仅是节点的true / false属性吗?谢谢。(使用swift spritekit) 问题答案: 您可以使用以下命令测试场景中是否有节点: 假设这是一个子类,例如。