Display number

Sracok. Egyszeruen nem talalok olyan freeware CLIs (vagy legroszabb esetben akar GUIs) progit, amely ki tudja irni a Windows "Display Settings/Identity" alatt levo szamozast. Azaz ha van tobb monitorom, a szamokat monitorokhoz rendeli, a legjobb az lenne, ha a \.\DISPLAYx  megfelelesekhez.

A szokasos toolok (multimonitortool, nircmd, stb.) sajna nem csinaljak ezt, a szamozas ugyanis random lehet (fugg a bekaopcsolas sorrendtol, stb.), foleg akkor, ha USBs vagy virtualis kijelzok vannak a rendszerben. 

Allitolag C# ban lehet forditani egy cuccost, ami a megfelelo fuggvenyt kezeli, de ebben nem vagyok jo.

Hozzászólások

ez is tipikusan olyan feladat, amiben az AI segitsegedre lehetne

gondolod, hogy nem kerdeztem meg...? amit olvasol, azt irta  (bar ez az "ez is" ma mar mindenre ramondhato, igy nem mondtal semmit)

tool elvileg nem letezik, ami freeware, foleg nem CLIs...(alitolag a kommerszial Displayfusion csinal valamit, de az nekem nem opcio, meg eleve nem CLI)

Szerintem azért nem találsz ilyet mert ezt leprogramozni pár sor.

 

#include <iostream>
#include <windows.h>
#include <WinUser.h>
#include <Windowsx.h>

int main()
{
    MONITORINFOEX target;
    ZeroMemory(&target, sizeof(MONITORINFOEX));
    target.cbSize = sizeof(MONITORINFOEX);

    HMONITOR hMon = MonitorFromWindow(GetDesktopWindow(), MONITOR_DEFAULTTONEAREST);
    GetMonitorInfo(hMon, &target);

    std::wcout << target.szDevice << "\n";
}

Ha elolvasod a commentemet, inkabb a compile resszel van gondom, nem vagyok felkeszulve C forditasra W alatt, emiatt lustasagbol gondoltam, van mar ra tool :D

Illetve a \.\DISPLAYx cuccos hozzarendeles lenne itt a fo kerdes, nemcsak a kiiratas...

Ez teszteltem, sajna ezzel sokat nem erek. Nekem az a szam kell, amit a Windows ir ki az Identity alatt a monitorra, sajna ez nem az.

 

C:\Users\pista\Downloads>monitor.exe
\\.\DISPLAY2

C:\Users\laci\Downloads>

Ebben az esetben (monitoron) a 3-as szam van.

Nekem ppxty ezekt ajanlotta:

powershell:

> get-wmiobject -class win32_desktopmonitor

> Get-CimInstance -classname win32_pnpentity | where-object { $_.service -eq "monitor"} | select-object deviceid, name, pnpdeviceid

ez nem müködött:

>Get-CimInstance -Namespace rootwmi -ClassName WmiMonitorID | ForEach-Object {     $name = [System.Text.Encoding]::ASCII.GetString($_.UserFriendlyName).Trim([char]0)     $serial = [System.Text.Encoding]::ASCII.GetString($_.SerialNumberID).Trim([char]0)     Write-Host "Name: $name, Serial: $serial" }

A masodik ad valami ertekesebb dolgot:

deviceid                               name                pnpdeviceid
--------                               ----                -----------
DISPLAY\SAM0C4E\4&19637DBD&5&UID200195 Generic PnP Monitor DISPLAY\SAM0C4E\4&19637DBD&5&UID200195
DISPLAY\SDC3853\4&19637DBD&5&UID265988 Surface Display     DISPLAY\SDC3853\4&19637DBD&5&UID265988
DISPLAY\BNQ8018\4&19637DBD&5&UID208387 Generic PnP Monitor DISPLAY\BNQ8018\4&19637DBD&5&UID208387
 

De ebbol sem latom a Windows szamozasat.

Meg tudod ezt oldani AutoHotKey-vel, ami tud magától .exe-re is fordítani:

#Requires AutoHotkey v2
Primary := MonitorGetPrimary()
StdOut := FileOpen("*", "w", "UTF-8")
StdOut.Write("%Primary%")
StdOut.Close()

Egy trükkre még szükség lehet, ez nem írja ki a kimenetet Parancssorban, hanem bele kell pipe-olni egy másik parancsba, pl. echo, leforditott.exe | echo

Meg annyi, hogy ez Powershellből indítva nem biztos, hogy működik.

Linuxon sokkal elegánsabb: xrandr --listmonitors

Windows 95/98: 32 bit extension and a graphical shell for a 16 bit patch to an 8 bit operating system originally coded for a 4 bit microprocessor, written by a 2 bit company that can't stand 1 bit of competition.”

Próbáld meg a második sorként hozzáadni ezt a sort:
;@Ahk2Exe-ConsoleApp

Majd ezután fordítsd le .exe-vé. Ezzel egy terminálos appot kapsz, nem GUI-sat, így értelemszerűen nem a GUI-ból indítod, hanem a parancssorból.

Windows 95/98: 32 bit extension and a graphical shell for a 16 bit patch to an 8 bit operating system originally coded for a 4 bit microprocessor, written by a 2 bit company that can't stand 1 bit of competition.”

meg valaki?  Eddig netto nulla az eredmeny.

Mármint hogy nulla? Nem fordulnak le a megadott kódok, vagy lefordulnak, de nem a jó számokat jelzik?

Windows 95/98: 32 bit extension and a graphical shell for a 16 bit patch to an 8 bit operating system originally coded for a 4 bit microprocessor, written by a 2 bit company that can't stand 1 bit of competition.”

Klafa:
 

"There is no public API to get the monitor numbers shown in the Windows display settings UI."

Ez elég rosszul hangzik. Próbáld a problémát átfogalmazni. Mihez kell neked ez a számozás. Ha meglenne a szám, akkor mit csinálnál vele?

Windows 95/98: 32 bit extension and a graphical shell for a 16 bit patch to an 8 bit operating system originally coded for a 4 bit microprocessor, written by a 2 bit company that can't stand 1 bit of competition.”

Innentol fogva igazabol mind1 is,  nincs ra megoldas.

De azert elmondom: sokxor olyan rendszereken dolgozom, ahol akar 12 monitor is van a kepben egy hoszton, ez bizonyos pozicionalasi segitseg erdekeben jo lenne a mapping a hatterben a DISPLAY.x es a valos vizualizalt szamozas ugyeben. nekem segitene, mert igy egyesevel kell kitalalnom, ki kicsoda - ez neha eltart fel oraig.

Nincs most nálam Windowsos gép hirtelen, de máshol azt írják, hogy ez az infó nem kérdezhető le API-ból, de a registryben benne van:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\GraphicsDrivers\Configuration
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\GraphicsDrivers\Connectivity

Ez az infó innen jött: https://superuser.com/questions/1455322/windows-10-change-display-numbe…

Meg tudod ezeket nézni?

De milyen mappingra gondolsz. Konkrét XY alkalmazást csak a Z. monitoron akarsz futtatni?

Windows 95/98: 32 bit extension and a graphical shell for a 16 bit patch to an 8 bit operating system originally coded for a 4 bit microprocessor, written by a 2 bit company that can't stand 1 bit of competition.”

Szerintem XY problémával állunk szemben. Miért fontos neked az, hogy tudd, hogy a Windows belsőleg hogyan számozza a monitorokat?