[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[问题求助] PowerShell怎样根据程序名设置窗口半透明效果

找了一段代码, 可以设置powershell的透明度, 我改了一句, 想设置计算器的半透明度, 但是不能生效, 求高手指教:
第31行是原代码
第32行是自己加的
  1. function Set-ConsoleOpacity
  2. {
  3. param (
  4. [ValidateRange(10, 100)]
  5. [int]$Opacity
  6. )
  7. # Check if pinvoke type already exists, if not import the relevant functions
  8. try
  9. {
  10. $Win32Type = [Win32.WindowLayer]
  11. }
  12. catch
  13. {
  14. $Win32Type = Add-Type -MemberDefinition @'
  15.             [DllImport("user32.dll")]
  16.             public static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong);
  17.             [DllImport("user32.dll")]
  18.             public static extern int GetWindowLong(IntPtr hWnd, int nIndex);
  19.             [DllImport("user32.dll")]
  20.             public static extern bool SetLayeredWindowAttributes(IntPtr hwnd, uint crKey, byte bAlpha, uint dwFlags);
  21. '@ -Name WindowLayer -Namespace Win32 -PassThru
  22. }
  23. # Calculate opacity value (0-255)
  24. $OpacityValue = [int]($Opacity * 2.56) - 1
  25. # Grab the host windows handle
  26. #$ThisProcess = Get-Process -Id $PID
  27. $ThisProcess = Get-Process -name "calc"
  28. $WindowHandle = $ThisProcess.MainWindowHandle
  29. # "Constants"
  30. $GwlExStyle = -20;
  31. $WsExLayered = 0x80000;
  32. $LwaAlpha = 0x2;
  33. if ($Win32Type::GetWindowLong($WindowHandle, -20) -band $WsExLayered -ne $WsExLayered)
  34. {
  35. # If Window isn't already marked "Layered", make it so
  36. [void]$Win32Type::SetWindowLong($WindowHandle, $GwlExStyle, $Win32Type::GetWindowLong($WindowHandle, $GwlExStyle) -bxor $WsExLayered)
  37. }
  38. # Set transparency
  39. [void]$Win32Type::SetLayeredWindowAttributes($WindowHandle, 0, $OpacityValue, $LwaAlpha)
  40. }
  41. Set-ConsoleOpacity -Opacity 50
复制代码

返回列表