2012-01-17 42 views
2

我可以使用$ host.UI.RawUI.MaxPhysicalWindowSize.Width獲取PowerShell命令窗口的最大寬度(即列數),並且設置PowerShell命令窗口的大小有詳細記錄,但最小緩衝區寬度似乎不同機器之間。在一個機器是13,但是在另一它是14。我可以最小窗口的高度和寬度設置爲1,最小緩衝器高度也可以是1。如何在PowerShell中查找最小屏幕緩衝區寬度?

有誰知道如何得到這個最小緩衝寬度值編程(不只是努力的價值觀和捕獲異常!)

回答

4

由於設置$host.UI.RawUI.BufferSize影響其控制檯屏幕的緩衝,(命令提示符 - >屬性 - >佈局 - >屏幕緩衝區大小當你改變$host.UI.RawUI.BufferSize被修改),它具有與控制檯上的緩衝區大小相同的限制屏幕。

由於我們可以讀取here,buffersize的指定尺寸不能小於系統允許的最小尺寸。此最小值取決於控制檯的當前字體大小(由用戶選擇)以及由GetSystemMetrics函數返回的SM_CXMIN和SM_CYMIN值。這

一個含義,是更大的控制檯屏幕字體,較小可以使緩衝區大小。

舉個例子:這裏是如何得到一個控制檯屏幕的最小寬度。我是P /使用this advanced function(Joel Bennett的New-PInvoke)從User32.dll調用GetSystemMetrics函數。

$SM_CXMIN =28 # "The minimum width of a window, in pixels." enum value 
New-PInvoke -Library User32.dll -Signature "int GetSystemMetrics(uint Metric)" 
GetSystemMetrics $SM_CXMIN # returns 132 on my system 

要檢索由控制檯屏幕緩衝區使用的字體大小,請嘗試從KERNEL32.DLL GetConsoleFontSize

注:

通過GetSystemMetrics的$ SM_CXMIN返回的值是控制檯屏幕的總寬度(包括邊界)。

+0

謝謝。我本來希望不必像素和字體大小,但我想這是唯一的方法。如果我嘗試並實現這一點,我會報告回來,但同時我會以任意的最小寬度爲20 – FrinkTheBrave 2012-01-18 13:09:48

0

也許我在錯誤的,但與

[system.console]::BufferWidth 

你得到的實際緩衝區寬度尺寸。

該值不能小於當前[System.Console]::WindowWidth大小(將拋出異常)。

+0

呀,緩衝器寬度是不一樣的物理屏幕寬度。 WindowWidth不能大於BufferWidth,但是如果WindowWidth爲1,最小的BufferWidth是多少? – FrinkTheBrave 2012-01-18 13:05:41

相關問題