Se puede cambiar el tamaño del Escritorio (Overscanning) con API de Windows

Iniciado por FJDA, 10 Febrero 2020, 11:35 AM

0 Miembros y 3 Visitantes están viendo este tema.

FJDA

quiero hacer esto:



Pero todo lo que encuentro es sobre cambiar la resolución. Lo que quiero es cambiar el tamaño del escritorio respecto al monitor.

gracias

Serapis

Las API de windows, a lo sumo podrán cambiar a la resoluciones que admite de forma nativa la tarjeta de vídeo, después que el monitor se 'sincere' con esta.

Si pretendes atacarlo, entonces tendrás que disparar al driver de la gráfica.

Por otro lado, ten en cuenta que no se admite cualquier resolución por defierentes razones...
- En los antiguos monitores analógicos, los píxeles reales no existían como tal, siempre eran virtuales y dependían de la frecuencia, aunque sobrepasado ciertos límites, los colimadores no podían sacar nítidamente los píxeles (cosa de la distancia focal (la distancia de ellos sobre la parte posterior de la pantalla, vamos el mismo problema que enfocar una lupa).... a causa de ello, se consideran como píxeles reales, las capacidades de los colimadores. Aunque pueden obtenerse resolucuones que el fabricante 'no da como tales', yo he utilizado un viejo monitor de 14 pulgadas de comienzos de los 90, cuando las resoluciones típicas era 640x480 y menores (320x200 por ejemplo), etc...  con resoluciones de hasta 1600x1200 en equipos calzando un XP, que solía usar cuando algún familiar o amigo, me llegaba con el típico problema 'la pantalla no se enciende' y tenías que averiguar si el problema era el monitor o el propio ordenador, pero exigía poner básicamente la misma resolución que el tipo decía tener en su monitor (usar el tuyo, no era conveniente, podría quedar dañado o no admitir dichas resoluciones, con ese monitor el problema de daños era prácticamente nulo, pués se configuraba por sendas ruedecitas en la parte posterior del monitor, para cambiar el barrido vertical y horizontal, amén de arrancar con un live-CD donde especificaba diferentes resoluciones (las frecuencias, como digo, las podía ajustar manualmente si la que indicaba la resolución no funcionaba).

- En el caso de monitores digitales, porque los puntos reales (píxeles), son los que son, ocupan físicamente un espacio y cada uno es iluminado realmente. Entonces en los digitales, puede proveerse dos soluciones:
---- O la resolución pretendida es múltiplo de los píxeles reales (lo que hace la resolución más pequeña que la 'nativa')... La nativa sería entonces 1:1 y todas las demás serían hacer más pequeña la resolución, aunque luego se postule como 'normal' una más pequeña y las que estén por encima como si fueran un extra... es solo la forma preferida de ver las cosas de los vendedores (de humo).
---- O hay un supersize. Donde dicha resolución ocupa mayor espacio del que físicamente cabe en la pantalla completa, mostrando entonces parcialmente el contenido y por tanto para ver el resto de la pantalla supone 'desplazarla' para tener acceso a ella. El monitor desde el que escribo, admite por ejemplo este caso... Aunque como puede verse al hacer una captura de pantalla, toma todo el contenido y no solo lo que se ve (tendría que hacer una foto con el móvil para ello)...

Un par de imágenes,  la 1ª con la resolución nativa (una es un demúltiplo de 800x600 a la izquierda)...


Las resoluciones mayores son 'supersize'... como se ve en la segunda imagen (1600x1200):



Esta limitación del supersize, entonces solo es aplicable si el hardware de la gráfica ha sido diseñado para poder hacerlo así.  En general, aunque podría se rsuplido por software a través del S.O. no sule ser el caso, ya que supondría en la práctica totalidad de los casos un cuello de botella, que en cambio el hardware d ela tarjeta gráfica puede proveerlo sin latencias...
Otro punto que limita (sigue siendo el hardware), es que, la memoria precisa para un tamaño 2x por ejemplo es que requiere 4 veces más memoria que 1x, (2x2 = 4) entonces también dependerá de la implementación tanto del hardware como del driver de la gráfica. Pero esto es cierto, solo si la resolución no excede el tamaño físico del monitor, si lo excede, al monitor le basta con tener memoria para lo que cabe en él, y es problema del software proporcionar el contenido cuando se 'desplace el contenido  del monitor'...
...O dicho de otro modo, pudiera suceder que el fabricante límite la resolución real del monitor, o bien lo deje disponible solo si la tarjeta dispone de la suficiente memoria para operar con dicha resolución. Por tanto invocar una resolución mayor que la que la tarjeta gráfica dispone, puede simplemente no funcionar, colgar el equipo o incluso dañar el hardware. Hay por tanto que asegurarse que no se superan los límites que el fabricante da como tolerancias...

Así que en general estarás limitado a lo que casualmente permita tu monitor y tarjeta gráfica, después de pelearte con el driver.

Piensa que cualquier programa puede en teoría tener una ventana mucho más grande que lo que es el monitor físicamente, simplemente se guarda en memoria el contenido gráfico y se pega la porción a mostrar en cada momento, mediante la operación llamada 'clipping'... la diferencia al caso con la resolución del monitor, es que dicha resolución es la misma para todas las aplicaciones, lo que supone que variará para cada aplicación el clipping que precisarían finalmente (un supersize, cuando la imagen excede los límites físicos del monitor, al exigir desplazar el contenido del monitor sucederán contínuos eventos 'paint' para todas las aplicaciones que aparecen en).

Por último, no descarto que los propios fabricantes provean alguna API, en tales previsiones, ya que lo que hace 10 o 20 años era un impedimento (muchas veces por pereza en el diseño, como lo de usar múltiples monitores físicos o múltiples escritorios virtuales), luego se vuelve una necesidad, así que mira cual es el fabricante de tu tarjeta y busca a ver si disponen de alguna aplicación al efecto, por ejemplo yo empezaría buscando en nVidia...

[MOD] Imagenes redimensionadas según Reglas del Foro.
perdón.. se me escapó me extendí más de lo esperado y tenía prisas por irme, y se me pasó al final.

FJDA

Cita de: NEBIRE en 12 Febrero 2020, 17:20 PM
Las API de windows, a lo sumo podrán cambiar a la resoluciones que admite de forma nativa la tarjeta de vídeo, después que el monitor se 'sincere' con esta.

Si pretendes atacarlo, entonces tendrás que disparar al driver de la gráfica.

...

[MOD] Imagenes redimensionadas según Reglas del Foro.

sí lo del driver de la gráfica lo he pensado pero si cambiara la gráfica ya no serviría.

hace poco publiqué un tema aquí en el foro sobre comprar un TV/Monitor:

https://foro.elhacker.net/hardware/me_recomiendan_usar_un_televisor_de_24_en_lugar_de_un_monitor-t502721.0.html

Como dije en ese tema al final me decanté por un monitor de toda la vida, en lugar de un televisor. Pero para uso normal lo compré grande para mi gusto (27'') y lo que hago es usar la configuración de la gráfica reduciendo el cuadro de imagen. Según tengo entendido el concepto se llama overscanning.



Cuando es para ver películas o jugar, uso toda la pantalla, pero cada vez que quiero hacer el cambio se me hace tedioso tener que abrir la ventana de configuración de la gráfica y realizar los cambios. Se me ocurrió que podía hacerme un programa que haga el cambio de forma automática simplemente clicando un botón (estableciendo una configuración única sin más)

Sin overscannnig, es decir usando toda el  cuadro del monitor la resolución es de 1920x1080 y reduciendo el cuadro queda a 1440x810 con una parte del monitor sin utilizar, como se aprecia en la imagen que he subido. Cambiando la resolución NO cambia el tamaño del cuadro o dicho como lo especifica la gráfica "el tamaño del escritorio".

La dificultad en esto es encontrar información al respecto porque si buscas en Google por "Cambiar tamaño del escritorio", o "Overscanning C#" o "Overcanning C++", "Overcanning API  de Windows", o cualquier configuración de palabras que se te ocurra una y otra vez aparecen enlaces relacionados con el cambio de resolución, algo que ya tengo cubierto o el tamaño de las ventanas y su localización.

¿y con librerías de Framework?

Al final si quiero hacerlo supongo tendré que atacar al driver de la gráfica a ver como maneja estos cambios.



Edito:
Por fín  :huh:

Creo que esta función podría servir:
ChangeDisplaySettings

DEVMODEA structure

(la misma función que se puede usar para cambiar la resolución. Quizás valga también para reducir el cuadro.)

@XSStringManolo

Te diré 3 palabras que cambiarán tu vida.

usa la lupa

o en dos

windows + (atajo de teclado)


Podrías ir sacando imágenes y cuando se pinche en una pixel de la imagen haces la conversión a la pantalla original.

Igual puedes fakear monitores y unirlos. Virtualbox te deja emular monitores. Podrías formas un super desktop usando 4 monitores fake. Igual hay algo hecho por ahí.

Antes había un bug en SDL que te permitía cambiar la res pero lo fixearon al poco.



Serapis

Cita de: FJDA en 12 Febrero 2020, 22:22 PM
Cuando es para ver películas o jugar, uso toda la pantalla, pero cada vez que quiero hacer el cambio se me hace tedioso tener que abrir la ventana de configuración de la gráfica y realizar los cambios. Se me ocurrió que podía hacerme un programa que haga el cambio de forma automática simplemente clicando un botón (estableciendo una configuración única sin más)

Sin overscannnig, es decir usando toda el  cuadro del monitor la resolución es de 1920x1080 y reduciendo el cuadro queda a 1440x810 con una parte del monitor sin utilizar, como se aprecia en la imagen que he subido. Cambiando la resolución NO cambia el tamaño del cuadro o dicho como lo especifica la gráfica "el tamaño del escritorio".
Vale, lo que buscas es algo ligeramente distinto a lo que yo creía que querías...

Tu me cuentas que te queda alguna 'zona negra' sobre el monitor sin usar, y la ventana que se muestra, queda centrada (más o menos) en el monitor.
Como te decía, ésto en los monitores analógicos tenía solución independiente del software, en los monitores digitales, dependerá mucho del fabricante.

En tu caso, contemplo dos posibles soluciones (ya comentadas en mi mensaje previo, aunque d epasada):
A - Simular usar múltiples monitores, definiendo ese como el primario (arriba a la izquierda), deberás jugar con el número de monitores y sus dimensiones.
No estoy seguro que todos los progamas exijan que estén presente y verifiquen la existencia de cada monitor antes de aceptar y guardar la configuración.
También es probable que determinados programas tengan ciertas preconfiguraciones y no dejen elegir configuraciones personalizadas.
Nota que digo simular, porque teóricamente no debería hacer falta tenerlos físicamente, incluso el mismo debería poder hacerse pasar por cualquiera de ellos, peor claro esto dependerá de cada programa en cuestión.

B - Usar múltples escritorios: Recuerdo que nVidia permite tener múltiples escritorios  (otros fabricantes tiene programas similares). El caso es que permitía (y supongo que actualmente seguirá igual) tener una resolución distinta con cada escritorio.
Y en las ventanas, junto a los botones de minimizar, maximizar y cerrar era posible añadir otros, también permitía atajos de teclado para saltar entre escritorios (y por tanto de resolución si se indicó una para distinta para cada escritorio).
E incluso activando cierta opción (no recuerdo su nombre), permitía introducir valores de resolución no nativas, con su respectivo botón de aceptar o regreso al término de la cuenta atrás, muy útl cuando la pantalla se malograba y no veías nada ni donde pulsar 'abortar'...

FJDA

Cita de: NEBIRE en 13 Febrero 2020, 01:22 AM
Vale, lo que buscas es algo ligeramente distinto a lo que yo creía que querías...

Tu me cuentas que te queda alguna 'zona negra' sobre el monitor sin usar, y la ventana que se muestra, queda centrada (más o menos) en el monitor.
Como te decía, ésto en los monitores analógicos tenía solución independiente del software, en los monitores digitales, dependerá mucho del fabricante.

En tu caso, contemplo dos posibles soluciones (ya comentadas en mi mensaje previo, aunque d epasada):
A - Simular usar múltiples monitores, definiendo ese como el primario (arriba a la izquierda), deberás jugar con el número de monitores y sus dimensiones.
No estoy seguro que todos los progamas exijan que estén presente y verifiquen la existencia de cada monitor antes de aceptar y guardar la configuración.
También es probable que determinados programas tengan ciertas preconfiguraciones y no dejen elegir configuraciones personalizadas.
Nota que digo simular, porque teóricamente no debería hacer falta tenerlos físicamente, incluso el mismo debería poder hacerse pasar por cualquiera de ellos, peor claro esto dependerá de cada programa en cuestión.

B - Usar múltples escritorios: Recuerdo que nVidia permite tener múltiples escritorios  (otros fabricantes tiene programas similares). El caso es que permitía (y supongo que actualmente seguirá igual) tener una resolución distinta con cada escritorio.
Y en las ventanas, junto a los botones de minimizar, maximizar y cerrar era posible añadir otros, también permitía atajos de teclado para saltar entre escritorios (y por tanto de resolución si se indicó una para distinta para cada escritorio).
E incluso activando cierta opción (no recuerdo su nombre), permitía introducir valores de resolución no nativas, con su respectivo botón de aceptar o regreso al término de la cuenta atrás, muy útl cuando la pantalla se malograba y no veías nada ni donde pulsar 'abortar'...


que buena idea lo de usar monitores virtuales. Engañar a Windows simulando que tengo dos monitores en lugar de uno, cada uno con su configuración y poder realizar el cambio según me interese. Y luego configurar Nvidia en modo pantalla múltiple.

Por ahora he usado esto
https://docs.microsoft.com/es-es/sysinternals/downloads/




Pero no deja realizar una configuración independiente para cada escritorio. Cualquier cambio que hagas en uno de ellos cambia para todos.

Esto sería crear  un monitor virtual, creando las modificaciones en el registro necesarias, así hacer un duplicado del device de mi monitor. Entonces Nvidia lo detectaría como otro y poder cambiar de uno a otro, el como no se XD

Encontré gogleando esta apliación de terceros
Actual Virtual Desktops 8.14.3

Creo que hace eso mismo, ahora lo probaré



Edito: No sirve es igual que el de arriba

Cita de: @XSStringManolo en 13 Febrero 2020, 00:20 AM
Te diré 3 palabras que cambiarán tu vida.

usa la lupa

o en dos

windows + (atajo de teclado)


Podrías ir sacando imágenes y cuando se pinche en una pixel de la imagen haces la conversión a la pantalla original.

Igual puedes fakear monitores y unirlos. Virtualbox te deja emular monitores. Podrías formas un super desktop usando 4 monitores fake. Igual hay algo hecho por ahí.

Antes había un bug en SDL que te permitía cambiar la res pero lo fixearon al poco.




No entendí  :(



El problema es que ahora me estáis viendo mucho participando en el foro pero de aquí a dos semanas ya no tendré tiempo y seguramente no me veais el pelo. Muy de vez en cuando. No puedo meterme en cosas complicadas en las que me tenga que sumergir durante horas a investigar y leer y leer, así que buscaba algo rápido, código clic y ya. XD