11
votes

Changer "Taille de la police Windows (DPI)" dans PowerShell?

J'utilise un ordinateur portable au bureau (Windows 7) avec une station et un double écran et à la maison sans la station.

Le point est que je dois changer la taille du texte chaque fois que je passe à partir de la station sur ordinateur portable Standlone, car la taille du texte est trop grande sur mon écran double, mais trop petit sur mon écran portable.

Procéder: J'ai cliquez avec le bouton droit de la souris sur l'écran du bureau, choisissez Modifier la résolution, puis "Obtenir du texte et d'autres éléments plus gros ou plus petits" pour choisir 100%, 125%, etc ... J'ai besoin de redémarrer ma session pour obtenir les paramètres appliqués. (Remarque: J'utilise un système français et les textes ne sont pas exactement les mêmes sur la version américaine que je suppose).

Ce n'est pas très pratique, je voudrais donc automatiser cela, peut-être avec un script PowerShell.

Idéalement, le script peut détecter si j'utilise un ordinateur portable seul ou une station avec ses deux écrans). Plus, sans redémarrage de session (je doute que ce dernier point soit réalisable).

Comment puis-je commencer? Si cela est possible.


1 commentaires

Même avec PowerShell, vous devrez redémarrer la session. Je soupçonnerais que ce soit juste un paramètre de registre; et si cela pourrait être remplacé régulièrement dans votre environnement. (Dans ce cas, cela ressemble à un profil distant faisant juste la chose.)


9 Réponses :


2
votes

Désolé, j'ai mal interprété la question. Je pensais que vous vouliez contrôler les fenêtres PowerShell.

Comme déjà mentionné, vous pouvez définir le paramètre Logpixels dans le registre, pour voir ce que le paramètre actuel est, essayez ceci: p>

Set-Item -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontDPI\LogPixels'


1 commentaires

Ce n'est que l'application hôte PowerShell. Cela n'a rien à voir avec les paramètres Windows.



3
votes

Apparemment, vous pouvez définir la propriété logpixels de xxx

qui est réitéré dans beaucoup d'endroits autour du filet. Cependant, j'ai eu l'impression que DPI était un paramètre utilisateur qui n'a aucun sens d'avoir sous HKLM.


0 commentaires

9
votes

Comme supposé dans les autres réponses, le réglage sous HKLM n'est pas le bon endroit car la mise à l'échelle DPI est un paramètre défini par l'utilisateur. La clé de registre correcte est HKCU: \ Control Panel \ Desktop code> avec la valeur logpixels code>.

Plus d'informations sur tous les paramètres de registre associés à DPI peuvent être trouvés dans API et paramètres de registre associés à DPI em>. P>

J'ai écrit un petit script PowerShell qui change la mise à l'échelle DPI en fonction de la mise à l'échelle actuelle et effectue la déconnexion de l'utilisateur, il suffit donc d'exécuter le script lorsque je mets mon appareil à un autre moniteur. P >

cd 'HKCU:\Control Panel\Desktop'
$val = Get-ItemProperty -Path . -Name "LogPixels"
if($val.LogPixels -ne 96)
{
    Write-Host 'Change to 100% / 96 dpi'
    Set-ItemProperty -Path . -Name LogPixels -Value 96
} else {
    Write-Host 'Change to 150% / 144 dpi'
    Set-ItemProperty -Path . -Name LogPixels -Value 144
}

logoff;exit


2 commentaires

C'est bien! Sous Windows 8, Logoff n'a pas fonctionné, je n'ai donc pas changé en Shutdown / l


Sous Windows 10 20h2 avec une carte graphique GPU ne fonctionne pas.



1
votes

@Torben Schramme J'ai constaté que je devais ajouter une autre itemProperty Win8Dpiscaling pour ce travail. Mais, je ne trouve pas la fonction "déconnexion; sortie" fonctionne - je dois toujours le faire manuellement.

cd 'HKCU:\Control Panel\Desktop'
$val = Get-ItemProperty -Path . -Name "LogPixels"
if($val.LogPixels -ne 96)
{
     Write-Host 'Change to 100% / 96 dpi'
     Set-ItemProperty -Path . -Name LogPixels -Value 96
     Set-ItemProperty -Path . -Name Win8DpiScaling 0
} else {
     Write-Host 'Change to 150% / 144 dpi'
     Set-ItemProperty -Path . -Name LogPixels -Value 144
     Set-ItemProperty -Path . -Name Win8DpiScaling 1
}
logoff;exit


3 commentaires

On dirait que vous suffisez simplement la réponse déjà présentée.


J'ai amélioré la réponse. Vous devez ajouter Win8dpiscaling.


Peut-être que cette ligne supplémentaire est nécessaire si vous allez à 100%. Mais dans mon cas, je change entre 150% et 250%, donc je quitte Win8Dpiscaling tout le temps. Je ne suis pas vraiment sûr de quelle différence cela fait.



-7
votes

Ces étapes simples ont fonctionné pour moi:

  1. télécharger win7andw2k8r2-kb3191566-x64.zip de https://docs.microsoft.com/en-us/powershell/wmf/5.1/install-configure

  2. Décompressez le fichier dans le dossier TMP

  3. Ouvrez une fenêtre de commande PowerShell en tant qu'administrateur, allez dans le dossier TMP dans lequel le fichier a été décompressé et exécutez les commandes suivantes:

    set-exécutantpolicy reconsigné . \ Install-wmf5.1.ps1


2 commentaires

Expliquez ce que cela a à voir avec la question posée.


L'installation de Windows Management Framework n'a rien à voir avec la question initiale. Vous ne savez pas pourquoi cela est ajouté à cette question?



1
votes

Après beaucoup de temps, je ne trouve rien dans Google. Eh bien, j'ai fait mon propre script: xxx


0 commentaires

0
votes

En comparant la sortie de get-itemProperty -Path 'HKCU: \ Control Panel \ Desktop' Avant et après l'utilisation de l'interface graphique Windows pour définir le niveau d'échelle, j'ai trouvé les propriétés suivantes nécessaires; travaillé pour moi: xxx


0 commentaires

0
votes

C'est la méthode la plus simple que j'ai trouvée. J'ai légèrement modifié la fonction fournie afin qu'elle soit une copie / pâte facile. Il ne nécessite aucun appels de registre ni quoi que ce soit. Simple et très efficace.

Vous pouvez l'appeler comme ceci xxx


0 commentaires

0
votes

Aimez cette réponse, tout le monde a une idée sur la manière de définir un seul écran au lieu de tout en même temps? J'ai 3 moniteurs, et c'est un changement universel.

Mettre à l'échelle-classification 0

function Set-Scaling {
    # Posted by IanXue-MSFT on
    # https://docs.microsoft.com/en-us/answers/questions/197944/batch-file-or-tool-like-powertoy-to-change-the-res.html
    # $scaling = 0 : 100% (default)
    # $scaling = 1 : 125% 
    # $scaling = 2 : 150% 
    # $scaling = 3 : 175% 
    param($scaling)
$source = @’
    [DllImport("user32.dll", EntryPoint = "SystemParametersInfo")]
    public static extern bool SystemParametersInfo(
                      uint uiAction,
                      uint uiParam,
                      uint pvParam,
                      uint fWinIni);
‘@
    $apicall = Add-Type -MemberDefinition $source -Name WinAPICall -Namespace SystemParamInfo –PassThru
    $apicall::SystemParametersInfo(0x009F, $scaling, $null, 1) | Out-Null
    }


0 commentaires