标题: [问题求助] PowerShell怎样根据程序名设置窗口半透明效果 [打印本页]
作者: 5i365 时间: 2021-12-13 19:19 标题: PowerShell怎样根据程序名设置窗口半透明效果
找了一段代码, 可以设置powershell的透明度, 我改了一句, 想设置计算器的半透明度, 但是不能生效, 求高手指教:
第31行是原代码
第32行是自己加的- function Set-ConsoleOpacity
- {
- param (
- [ValidateRange(10, 100)]
- [int]$Opacity
- )
-
- # Check if pinvoke type already exists, if not import the relevant functions
- try
- {
- $Win32Type = [Win32.WindowLayer]
- }
- catch
- {
- $Win32Type = Add-Type -MemberDefinition @'
- [DllImport("user32.dll")]
- public static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong);
-
- [DllImport("user32.dll")]
- public static extern int GetWindowLong(IntPtr hWnd, int nIndex);
-
- [DllImport("user32.dll")]
- public static extern bool SetLayeredWindowAttributes(IntPtr hwnd, uint crKey, byte bAlpha, uint dwFlags);
- '@ -Name WindowLayer -Namespace Win32 -PassThru
- }
-
- # Calculate opacity value (0-255)
- $OpacityValue = [int]($Opacity * 2.56) - 1
-
- # Grab the host windows handle
- #$ThisProcess = Get-Process -Id $PID
- $ThisProcess = Get-Process -name "calc"
- $WindowHandle = $ThisProcess.MainWindowHandle
-
- # "Constants"
- $GwlExStyle = -20;
- $WsExLayered = 0x80000;
- $LwaAlpha = 0x2;
-
- if ($Win32Type::GetWindowLong($WindowHandle, -20) -band $WsExLayered -ne $WsExLayered)
- {
- # If Window isn't already marked "Layered", make it so
- [void]$Win32Type::SetWindowLong($WindowHandle, $GwlExStyle, $Win32Type::GetWindowLong($WindowHandle, $GwlExStyle) -bxor $WsExLayered)
- }
-
- # Set transparency
- [void]$Win32Type::SetLayeredWindowAttributes($WindowHandle, 0, $OpacityValue, $LwaAlpha)
- }
-
- Set-ConsoleOpacity -Opacity 50
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |