Advertisement
Linda-chan

SetWindowSize.VBS

Sep 5th, 2016
214
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. '====================================================================
  2. ' Default size: 820×575
  3. '
  4. ' For autostart, in AkelPad.ini or registry CmdLineBegin/CmdLineEnd
  5. ' key, need to add:
  6. '   /Call("Scripts::Main", 1, "SetWindowSize.VBS")
  7. '====================================================================
  8. Option Explicit
  9.  
  10. Const AppTitle = "SetWindowSize.VBS"
  11.  
  12. Const DEF_WIDTH = 820
  13. Const DEF_HEIGHT = 575
  14.  
  15. Call Main
  16.  
  17. '====================================================================
  18. Private Sub Main()
  19.   Dim ComputerName
  20.   Dim Left
  21.   Dim Top
  22.   Dim Width
  23.   Dim Height
  24.   Dim hWnd
  25.   Dim Sys
  26.  
  27.   ' Юзаем одну переменную для разрешения и имени машины.
  28.  ' Если разрешение получить не удаётся, руководствуемся именем
  29.  ' машины. Первое универсальнее, но возможны ошибки...
  30.  ComputerName = GetScreenResolution()
  31.   If ComputerName = "" Then _
  32.     ComputerName = UCase(GetComputerName())
  33.   If ComputerName = "" Then _
  34.     Exit Sub
  35.  
  36.   ' Теперь смотрим, где мы и соответственно выбираем размеры...
  37.  Select Case ComputerName
  38.     Case "KURUMU", "1024×600"
  39.       Width = DEF_WIDTH
  40.       Left = (1024 - Width) \ 2
  41.      
  42.       Height = DEF_HEIGHT
  43.       Top = (600 - Height) \ 2
  44.      
  45.     Case "NANAMI", "1440×900"
  46.       Width = DEF_WIDTH
  47.       Left = (1440 - Width) \ 2
  48.      
  49.       Top = 21
  50.       Height = 900 - Top * 2
  51.      
  52.     Case "MIZORE", "1280×1024"
  53.       Width = DEF_WIDTH
  54.       Left = (1280 - Width) \ 2
  55.      
  56.       Top = 26
  57.       Height = 1024 - Top * 2
  58.      
  59.     Case Else ' ХЗ что - выходим...
  60.      Exit Sub
  61.   End Select
  62.  
  63.   ' Получаем манипулятор окна AkelPad...
  64.  hWnd = AkelPad.GetMainWnd()
  65.  
  66.   ' Вызываем Win32 функцию MoveWindow()...
  67.  Set Sys = AkelPad.SystemFunction()
  68.  
  69.   Sys.AddParameter(hWnd)
  70.   Sys.AddParameter(Left)
  71.   Sys.AddParameter(Top)
  72.   Sys.AddParameter(Width)
  73.   Sys.AddParameter(Height)
  74.   Sys.AddParameter(1)
  75.  
  76.   Sys.Call "User32::MoveWindow"
  77. End Sub
  78.  
  79. '====================================================================
  80. Private Function GetComputerName()
  81.   Dim WN
  82.  
  83.   Set WN = CreateObject("WScript.Network")
  84.   GetComputerName = WN.ComputerName
  85. End Function
  86.  
  87. '====================================================================
  88. Private Function GetScreenResolution()
  89.   Dim ScreenWidth
  90.   Dim ScreenHeight
  91.  
  92.   ScreenWidth = 0
  93.   ScreenHeight = 0
  94.  
  95.   If Not DetectScreenResolution(ScreenWidth, ScreenHeight) Then
  96.     GetScreenResolution = ""
  97.   Else
  98.     GetScreenResolution = CStr(ScreenWidth) & "×" & CStr(ScreenHeight)
  99.   End If
  100. End Function
  101.  
  102. '====================================================================
  103. Private Function DetectScreenResolution(ByRef ScreenWidth, _
  104.                                         ByRef ScreenHeight)
  105.   Dim WMIService
  106.   Dim ComputerName
  107.   Dim Items
  108.   Dim Item
  109.  
  110.   ScreenWidth = 0
  111.   ScreenHeight = 0
  112.   DetectScreenResolution = False
  113.  
  114.   On Error Resume Next
  115.  
  116.   ComputerName = "."
  117.   Set WMIService = GetObject("winmgmts:" & _
  118.       "{impersonationLevel=impersonate}!\\" & _
  119.       ComputerName & "\root\cimv2")
  120.  
  121.   Set Items = WMIService.ExecQuery _
  122.       ("Select * from Win32_DisplayControllerConfiguration")
  123.  
  124.   ' У Items.Item() очень странный синтаксис, там аргумент строковый
  125.  ' и называется что-то-там-path, и мне не удалось вызвать его
  126.  ' не получив ошибку "Общая ошибка". Поэтому решено было сделать
  127.  ' через перечисление.
  128.  For Each Item in Items
  129.     ScreenWidth = Item.HorizontalResolution
  130.     ScreenHeight = Item.VerticalResolution
  131.     Exit For
  132.   Next
  133.  
  134.   If Err.Number = 0 Then _
  135.     If ScreenWidth > 0 Then _
  136.       If ScreenHeight > 0 Then _
  137.         DetectScreenResolution = True
  138. End Function
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement