<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; HTA: Free RAM monitor]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=6176&amp;type=atom" />
	<updated>2011-09-07T17:35:54Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=6176</id>
		<entry>
			<title type="html"><![CDATA[Re: HTA: Free RAM monitor]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=51297#p51297" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>alexii пишет:</cite><blockquote><p>Изнутри — никак. На время обработки события окно не перерисовывается.</p></blockquote></div><p>Попробовал следующим образом. Добавил Public булеву переменную, которая служит флагом того, что приложение занято манипуляциями с окном. Рекурсивная процедура мониторинга начинается с проверки заначения этой переменной и в случае манипуляций с окном процедура завершается. В свою очередь процедуры манипуляций с окном в завершение изменяют значение переменной-флага и запускают процедуру мониторинга.<br />Алгоритм довольно простой и по идее должен работать как часы. <br /></p><div class="codebox"><pre><code>&lt;html&gt;
&lt;head&gt;
  &lt;title&gt;ResMon&lt;/title&gt;
  &lt;HTA:APPLICATION 
    ID = &quot;ResMon&quot;
    APPLICATIONNAME=&quot;ResMon&quot;    
    SINGLEINSTANCE=&quot;yes&quot;
    MAXIMIZEBUTTON = &quot;no&quot;
    SCROLL=&quot;no&quot;
    ShowInTaskbar =&quot;no&quot;
    BORDER=&quot;none&quot;
    SELECTION=&quot;no&quot;
    Version = &quot;1.0&quot;&gt;
    &lt;/HTA:APPLICATION&gt;
&lt;/head&gt;
&lt;style type=&quot;text/css&quot;&gt;
    html, body{
        margin:1px;
        text-align: center;   
        font:bold 12 sans-serif;   
        border-style: outset;
        color: #ffffff;
    }    
    #menu{        
        background-color: #800000;    
    }
    #closebtn{
        position: absolute; /* Абсолютное позиционирование */
        top: 1px; /* Положение от верхнего края */
        right: 1px; /* Положение от правого края */            
    }
    /* Цвета по умолчанию */
    #pRAM,#swap{
        background-color: #0000ff;
    }
    #vRAM,#proc{
        background-color: #00ff00;
    }
    
 &lt;/style&gt;
&lt;script language=&quot;VBScript&quot;&gt;
    Option Explicit
    Const strHash = &quot;#&quot;
    Const strHeader = &quot;Объем свободных ресурсов&quot;    
    Const strDll = &quot;WinPos.dll&quot;
    &#039;--- запросы
    Const strOSQ = &quot;Select FreePhysicalMemory, FreeVirtualMemory, TotalVirtualMemorySize From Win32_OperatingSystem&quot;
    Const strPMQ = &quot;Select Capacity From Win32_PhysicalMemory&quot;
    Const strPFUQ = &quot;Select AllocatedBaseSize, CurrentUsage From Win32_PageFileUsage&quot;
    Const strPQ = &quot;Select LoadPercentage From Win32_Processor&quot;
    Const intPSF = 48 &#039;флаг полусинхронности
    &#039;-------
    Dim objItem    
    Dim intTotal, intFreePart, intFreePartV, intFreePartP, intProcRate, intFreePartProc
    Dim intOSInfoArr(2), intOSInfo
    Dim intPFUInfoArr(1), intPFUInfo
    Dim i, intRet
    
    Dim x0, y0 &#039;координаты
    
    Dim bIsBusy &#039;флаг - приложение занято манипуляциями с окном
    bIsBusy = False &#039;по умолчанию
    
    Dim objWMI, wshShell    
    Set objWMI = GetObject(&quot;winmgmts:\\.\root\cimv2&quot;)
    Set wshShell = CreateObject(&quot;WScript.Shell&quot;)    
    
    Sub Window_OnLoad()
        Dim objSetTop
        window.resizeTo 245,80
        window.moveTo screen.availWidth-255, screen.availHeight-90
        
        &#039;устанавливаем обработку событий
        SetUpEventHandler()    
        
        &#039;пытаемся зарегистрировать библиотеку
        intRet = RegLib(True)
        If intRet Then 
            &#039;создаем экземпляр класса из либы = strDll
            Set objSetTop = CreateObject(&quot;WinPos.WPClass&quot;)        
            &#039;делаем окно поверх всех окон
            objSetTop.SetTop document.title            
            &#039;удаляем ссылку
            Set objSetTop = Nothing
        Else
            wshShell.PopUp &quot;Не удалось зарегистрировать библиотеку &quot; &amp; strDll,1,&quot;Ошибка регистрации&quot;,48
        End If
        &#039;заголовок приложения
        header.Innertext = strHeader
        window.setTimeout &quot;UpdateInfo&quot;, 1, &quot;vbscript&quot;    
    End Sub
    
    &#039;***************** Обработка событий окна приложения *****************
    
    Sub SetUpEventHandler()
        Dim ClosebtnOnclick, MouseOverClose, MouseOutClose, OnKeydownEvent, OnKeyupEvent
        Dim EHMouseDown,EHMouseMove,EHMouseUp
        
        &#039;закрываем окно
        Set ClosebtnOnclick = GetRef(&quot;OnClickCloseSub&quot;)
        closebtn.attachEvent &quot;onclick&quot;, ClosebtnOnclick
        Set MouseOverClose = GetRef(&quot;MouseOverCloseSub&quot;)
        closebtn.attachEvent &quot;onmouseover&quot;, MouseOverClose
        Set MouseOutClose = GetRef(&quot;MouseOutCloseSub&quot;)
        closebtn.attachEvent &quot;onmouseout&quot;, MouseOutClose
        
        &#039;тащим окно кнопками
        Set OnKeydownEvent = GetRef(&quot;MoveWindow&quot;)
        document.attachEvent &quot;onkeydown&quot;, OnKeydownEvent
        Set OnKeyupEvent = GetRef(&quot;ReleaseUpdate&quot;)
        document.attachEvent &quot;onkeyup&quot;, OnKeyupEvent
        
        &#039;тащим окно мышью
        Set EHMouseDown = GetRef(&quot;MouseDownEvent&quot;)
        Set EHMouseMove = GetRef(&quot;MouseMoveEvent&quot;)
        Set EHMouseUp = GetRef(&quot;MouseUpEvent&quot;)
        document.attachEvent &quot;onmousedown&quot;, EHMouseDown
        document.attachEvent &quot;onmousemove&quot;, EHMouseMove
        document.attachEvent &quot;onmouseup&quot;, EHMouseUp            
    End Sub
    
    &#039;----- Мыши -----    
    Function MouseDownEvent()
        &#039;1 - левая кнопка, 4 - средняя, 2 - правая
        If window.event.button = 2 Then
            &#039;ставим флаг - приложение занято манипуляциями с окном
            bIsBusy = True 
            x0=window.event.x
            y0=window.event.y            
        End If
    End Function
    
    Sub MouseUpEvent()
        If window.event.button = 2 Then
            &#039;ставим флаг - приложение завершило манипуляциями с окном
            bIsBusy = False 
            &#039;на случай быстрых кликов запустим мониторинг с задержкой в 1 секунду
            window.SetTimeout &quot;UpdateInfo()&quot;, 1000, &quot;vbscript&quot;            
        End If
    End Sub
                
    Function MouseMoveEvent()
        If window.event.button = 2 Then &#039;если нажата правая кнопка                    
            window.moveBy window.event.x-x0, window.event.y-y0
        End If
    End Function    
    &#039;-----------------    
    
    &#039;----- Закрыть -----
    Sub OnClickCloseSub()        
        Window_OnUnload
    End Sub
    
    Sub MouseOverCloseSub()
        closebtn.Style.Cursor = &quot;hand&quot;
        closebtn.style.backgroundColor = &quot;#ff8c00&quot;        
    End Sub
    
    Sub MouseOutCloseSub()
        closebtn.style.backgroundColor = &quot;#800000&quot;
    End Sub
    &#039;--------------------
    
    &#039;----- Кнопки -----    
    &#039;если нажата стрелка - True
    Function IsArrowBtn(IntCode)
        IsArrowBtn = False
        For i = 37 To 40
            If i = IntCode Then
                IsArrowBtn = True
                Exit For
            End If
        Next
    End Function
    
    &#039;двигаем окно
    Sub MoveWindow()
        Dim z        
        &#039;ловим нажатие на Ctrl
        If window.event.ctrlKey Then
            &#039;если нажата стрелка - выставляем флаг
            If IsArrowBtn(window.event.keyCode) Then bIsBusy = True
            &#039;двигаем окно
            If window.event.keyCode=37 Then                
                z = window.screenTop
                window.moveTo window.screenLeft-10,z
            ElseIf window.event.keyCode=39 Then                
                z = window.screenTop
                window.moveTo window.screenLeft+10,z
            ElseIf window.event.keyCode=38 Then                
                z = window.screenLeft
                window.moveTo z,window.screenTop-10
            ElseIf window.event.keyCode=40 Then                
                z = window.screenLeft
                window.moveTo z,window.screenTop+10
            End If        
        End If        
    End Sub
    
    &#039;продолжаем мониторинг
    Sub ReleaseUpdate()
        If window.event.ctrlKey Then
            &#039;если нажата стрелка
            If IsArrowBtn(window.event.keyCode) Then 
                bIsBusy = False &#039;выставляем флаг
                &#039;на случай возобновления движения 
                &#039;запустим мониторинг с задержкой в 1 секунду
                window.SetTimeout &quot;UpdateInfo()&quot;, 1000, &quot;vbscript&quot;            
            End If                
        End If
    End Sub
    &#039;-------------------
    
    &#039;***********************************************************************
        
    Sub Window_OnUnload()
        intRet = RegLib(False)
        Set wshShell = Nothing
        Set objWMI = Nothing
        window.close
    End Sub
    
    Sub UpdateInfo()
        &#039;если приложение занято манипуляциями с окном - 
        &#039;завершаем процесс мониторинга
        If bIsBusy Then Exit Sub
        &#039;информация из Win32_OperatingSystem: свободная физическая память, 
        &#039;свободная виртуальная память, полный объем виртуальной памяти
        intOSInfo = GetOSInfo()
        intTotal = GetTotalMemorySize() &#039;полный объем физической памяти
        intPFUInfo = GetPFUInfo() &#039;информация о файле подкачки
        intProcRate = GetProcRate() &#039;процент свободного времени процессоров
         
        &#039;процент свободных ресурсов в масштабе изменения RGB
        intFreePart = Int(intOSInfo(0)/intTotal*255) &#039;физической
        intFreePartV = Int(intOSInfo(1)/intOSInfo(2)*255) &#039;виртуальной
        intFreePartP = Int(intPFUInfo(0)/intPFUInfo(1)*255) &#039;подкачки
        intFreePartProc = Int(intProcRate*2.55) &#039;процессоры
        
        &#039;выводим количество ресурсов
        fpRAM.Innertext = intOSInfo(0)     
        tpRAM.Innertext = intTotal
        fvRAM.Innertext = intOSInfo(1)
        tvRAM.Innertext = intOSInfo(2)
        fswap.Innertext = intPFUInfo(0)
        tswap.Innertext = intPFUInfo(1)
        procrate.Innertext = intProcRate
        
        &#039;выставляем цвет окна: &quot;#&quot; + R + G + B, вариант от синего к красному
        pRAM.style.backgroundColor = strHash &amp; _
                GetStrHex(255-intFreePart) &amp; GetStrHex(0) &amp; GetStrHex(intFreePart)
        &#039;вариант от зеленого к красному, прочие варианты - по аналогии
        vRAM.style.backgroundColor = strHash &amp; _
                GetStrHex(255-intFreePartV) &amp; GetStrHex(intFreePartV) &amp; GetStrHex(0)
        &#039;снова от синего - подкачка                
        swap.style.backgroundColor = strHash &amp; _
                GetStrHex(255-intFreePartP) &amp; GetStrHex(0) &amp; GetStrHex(intFreePartP)
        &#039;снова от зеленого - процессор        
        proc.style.backgroundColor = strHash &amp; _
                GetStrHex(255-intFreePartProc) &amp; GetStrHex(intFreePartProc) &amp; GetStrHex(0)
        &#039;курим 1 секунду и вызываем сами себя
        window.SetTimeout &quot;UpdateInfo()&quot;, 1000, &quot;vbscript&quot;
    End Sub
        
    &#039;получаем объем свободной памяти
    Function GetOSInfo()
        Dim colOS
        Set colOS = objWMI.ExecQuery(strOSQ,,intPSF)
        For Each objItem In colOS
            With objItem
                intOSInfoArr(0) = Int(.FreePhysicalMemory/1024)
                intOSInfoArr(1) = Int(.FreeVirtualMemory/1024)
                intOSInfoArr(2) = Int(.TotalVirtualMemorySize/1024)            
            End With
        Next        
        Set colOS = Nothing
        GetOSInfo = intOSInfoArr
    End Function
    
    &#039;получаем объем физической памяти
    Function GetTotalMemorySize()
        Dim colPM
        Set colPM = objWMI.ExecQuery(strPMQ,,intPSF)
        For Each objItem In colPM
            GetTotalMemorySize = GetTotalMemorySize + Int(objItem.Capacity/1024/1024)
        Next
        Set colPM = Nothing
    End Function
    
    &#039;получаем объем файла подкачки
    Function GetPFUInfo()
        Dim colPFL
        Set colPFL = objWMI.ExecQuery(strPFUQ,,intPSF)
        For Each objItem In colPFL
            With objItem
                &#039;свободно = объем - использовано
                intPFUInfoArr(0) = .AllocatedBaseSize - .CurrentUsage 
                intPFUInfoArr(1) = .AllocatedBaseSize &#039;объем                
            End With
        Next
        Set colPFL = Nothing
        GetPFUInfo = intPFUInfoArr
    End Function
    
    &#039;получаем процент загрузки процессоров
    Function GetProcRate()
        Dim colP
        Set colP = objWMI.ExecQuery(strPQ,,intPSF)
        i = 0
        For Each objItem In colP
            i = i + 1
            GetProcRate = GetProcRate + objItem.LoadPercentage            
        Next
        &#039;вычисляем среднее арифметическое на случай, если процессоров несколько
        GetProcRate = 100-(GetProcRate/i)
        Set colP = Nothing
    End Function
    
    &#039;переводим число из RGB в Hex для HTML
    Function GetStrHex(i)
        If i &lt; 16 Then
            GetStrHex = &quot;0&quot; &amp; Hex(i)
        Else
            GetStrHex = Hex(i)
        End If        
    End Function
    
    &#039;регистрация библиотеки, True - регистрируем, False - разрегистрируем
    Function RegLib(bWha)
        Dim strWha
        If bWha Then 
            strWha = &quot;regsvr32.exe /i /s &quot;
        Else
            strWha = &quot;regsvr32.exe u/ /i /s &quot;
        End If        
        intRet = wshShell.Run(strWha &amp; strDll )
        
        If intRet = 0 Then &#039;если удалось зарегистрировать - True
            RegLib = True
        Else
            RegLib = False
        End If    
    End Function
    
&lt;/script&gt; 
&lt;body&gt;    
    &lt;div id=&quot;menu&quot;&gt;
        &lt;span id=&quot;header&quot;&gt;&lt;/span&gt;&lt;span id=&quot;closebtn&quot;&gt;X&lt;/span&gt;
    &lt;/div&gt;
    &lt;div id=&quot;pRAM&quot;&gt;
        Физическая память:&amp;nbsp &lt;span id=&quot;fpRAM&quot;&gt;&lt;/span&gt;&amp;nbsp из&amp;nbsp &lt;span id=&quot;tpRAM&quot;&gt;&lt;/span&gt;&amp;nbsp MB        
    &lt;/div&gt;
    &lt;div id=&quot;vRAM&quot;&gt;
        Виртуальная память:&amp;nbsp &lt;span id=&quot;fvRAM&quot;&gt;&lt;/span&gt;&amp;nbsp из&amp;nbsp &lt;span id=&quot;tvRAM&quot;&gt;&lt;/span&gt;&amp;nbsp MB
    &lt;/div&gt;
    &lt;div id=&quot;swap&quot;&gt;
        Файл подкачки:&amp;nbsp &lt;span id=&quot;fswap&quot;&gt;&lt;/span&gt;&amp;nbsp из&amp;nbsp &lt;span id=&quot;tswap&quot;&gt;&lt;/span&gt;&amp;nbsp MB
    &lt;/div&gt;
    &lt;div id=&quot;proc&quot;&gt;
        Процессоры:&amp;nbsp &lt;span id=&quot;procrate&quot;&gt;&lt;/span&gt;&amp;nbsp из 100%
    &lt;/div&gt;
&lt;/body&gt; 
&lt;/html&gt;</code></pre></div><p>Специально для тестирования алгоритма добавил альтернативный вариант перемещения окна - правой кнопкой мыши - тоже у автора поста подсмотрел, правда в другом посте - про мониторинг траффика, и переделал на VBS.<br />Итог: при желании можно &quot;ушатать&quot; оба варианта. <br />При перемещении окна мышью иногда вылетает курсор и следовательно не срабатывает событие onmouseup, которое должно запускать процесс мониторинга, в результате данные в окне не обновляются, для возобновления приходится еще раз щелкать мышью по окну.<br />При перемещении кнопками... я так и не понял. При забеге окна на небольшие расстояния все работает как надо. Но при желании можно уронить. Пробовал изменять задержку запуска процедуры мониторинга после завершения манипуляций с окном - не помогло.<br />Не могу понять..., должно же работать...<br />Время будет - посмотрите, уважаемые может появятся мысли какие по этому вопросу.</p>]]></content>
			<author>
				<name><![CDATA[dab00]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27085</uri>
			</author>
			<updated>2011-09-07T17:35:54Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=51297#p51297</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: HTA: Free RAM monitor]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=51226#p51226" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>dab00 пишет:</cite><blockquote><p>Не знаю как запустить процесс мониторинга в отдельном потоке, чтобы не подтормаживали манипуляции с окном.</p></blockquote></div><p>Изнутри — никак. На время обработки события окно не перерисовывается.</p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2011-09-05T19:16:26Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=51226#p51226</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: HTA: Free RAM monitor]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=51223#p51223" />
			<content type="html"><![CDATA[<p>Исправил ошибку с округлением значения переменной.<br />Заинтересовала тема обработки событий окна - onmouseover, onkeydown и пр. - на VBS - у автора реализовано на JS. <br />Следующая реинкарнация кода:<br /></p><div class="codebox"><pre><code>&lt;html&gt;
&lt;head&gt;
  &lt;title&gt;ResMon&lt;/title&gt;
  &lt;HTA:APPLICATION 
    ID = &quot;ResMon&quot;
    APPLICATIONNAME=&quot;ResMon&quot;    
    SINGLEINSTANCE=&quot;yes&quot;
    MAXIMIZEBUTTON = &quot;no&quot;
    SCROLL=&quot;no&quot;
    ShowInTaskbar =&quot;no&quot;
    BORDER=&quot;none&quot;
    SELECTION=&quot;no&quot;
    Version = &quot;1.0&quot;&gt;
    &lt;/HTA:APPLICATION&gt;
&lt;/head&gt;
&lt;style type=&quot;text/css&quot;&gt;
    html, body{
        margin:1px;
        text-align: center;   
        font:bold 12 sans-serif;   
        border-style: outset;
        color: #ffffff;
    }    
    #menu{        
        background-color: #800000;    
    }
    #closebtn{
        position: absolute; /* Абсолютное позиционирование */
        top: 1px; /* Положение от верхнего края */
        right: 1px; /* Положение от правого края */            
    }
    /* Цвета по умолчанию */
    #pRAM,#swap{
        background-color: #0000ff;
    }
    #vRAM,#proc{
        background-color: #00ff00;
    }
    
 &lt;/style&gt;
&lt;script language=&quot;VBScript&quot;&gt;
    Option Explicit
    Const strHash = &quot;#&quot;
    Const strHeader = &quot;Объем свободных ресурсов&quot;    
    Const strDll = &quot;WinPos.dll&quot;
    &#039;--- запросы
    Const strOSQ = &quot;Select FreePhysicalMemory, FreeVirtualMemory, TotalVirtualMemorySize From Win32_OperatingSystem&quot;
    Const strPMQ = &quot;Select Capacity From Win32_PhysicalMemory&quot;
    Const strPFUQ = &quot;Select AllocatedBaseSize, CurrentUsage From Win32_PageFileUsage&quot;
    Const strPQ = &quot;Select LoadPercentage From Win32_Processor&quot;
    Const intPSF = 48 &#039;флаг полусинхронности
    &#039;-------
    Dim objItem    
    Dim intTotal, intFreePart, intFreePartV, intFreePartP, intProcRate, intFreePartProc
    Dim intOSInfoArr(2), intOSInfo
    Dim intPFUInfoArr(1), intPFUInfo
    Dim i, intRet
    
    Dim objWMI, wshShell    
    Set objWMI = GetObject(&quot;winmgmts:\\.\root\cimv2&quot;)
    Set wshShell = CreateObject(&quot;WScript.Shell&quot;)    
    
    Sub Window_OnLoad()
        Dim objSetTop
        window.resizeTo 245,80
        window.moveTo screen.availWidth-255, screen.availHeight-90
        
        &#039;устанавливаем обработку событий
        SetUpEventHandler()    
        
        &#039;пытаемся зарегистрировать библиотеку
        intRet = RegLib(True)
        If intRet Then 
            &#039;создаем экземпляр класса из либы = strDll
            Set objSetTop = CreateObject(&quot;WinPos.WPClass&quot;)        
            &#039;делаем окно поверх всех окон
            objSetTop.SetTop document.title            
            &#039;удаляем ссылку
            Set objSetTop = Nothing
        Else
            wshShell.PopUp &quot;Не удалось зарегистрировать библиотеку &quot; &amp; strDll,1,&quot;Ошибка регистрации&quot;,48
        End If
        &#039;заголовок приложения
        header.Innertext = strHeader
        window.setTimeout &quot;UpdateInfo&quot;, 1, &quot;vbscript&quot;    
    End Sub
    
    &#039;***************** Обработка событий окна приложения *****************
    
    Sub SetUpEventHandler()
        Dim ClosebtnOnclick, MouseOverClose, OnKeydownEvent
        Set ClosebtnOnclick = GetRef(&quot;OnClickCloseSub&quot;)
        closebtn.attachEvent &quot;onclick&quot;, ClosebtnOnclick
        Set MouseOverClose = GetRef(&quot;MouseOverCloseSub&quot;)
        closebtn.attachEvent &quot;onmouseover&quot;, MouseOverClose
        Set OnKeydownEvent = GetRef(&quot;MoveWindow&quot;)
        document.attachEvent &quot;onkeydown&quot;, OnKeydownEvent    
    End Sub
    
    Sub OnClickCloseSub
        &#039;window.close
        Window_OnUnload
    End Sub
    
    Sub MouseOverCloseSub
        closebtn.Style.Cursor = &quot;hand&quot;
    End Sub
    
    Sub MoveWindow()
        Dim z
        &#039;ловим нажатие на Ctrl
        If window.event.ctrlKey Then
            &#039;двигаем окно
            If window.event.keyCode=37 Then
                z = window.screenTop
                window.moveTo window.screenLeft-10,z
            ElseIf window.event.keyCode=39 Then
                z = window.screenTop
                window.moveTo window.screenLeft+10,z
            ElseIf window.event.keyCode=38 Then
                z = window.screenLeft
                window.moveTo z,window.screenTop-10
            ElseIf window.event.keyCode=40 Then
                z = window.screenLeft
                window.moveTo z,window.screenTop+10
            End If
        End If
    End Sub
    
    &#039;***********************************************************************
        
    Sub Window_OnUnload()
        intRet = RegLib(False)
        Set wshShell = Nothing
        Set objWMI = Nothing
        window.close
    End Sub
    
    Sub UpdateInfo()
        &#039;информация из Win32_OperatingSystem: свободная физическая память, 
        &#039;свободная виртуальная память, полный объем виртуальной памяти
        intOSInfo = GetOSInfo()
        intTotal = GetTotalMemorySize() &#039;полный объем физической памяти
        intPFUInfo = GetPFUInfo() &#039;информация о файле подкачки
        intProcRate = GetProcRate() &#039;процент свободного времени процессоров
         
        &#039;процент свободной памяти в масштабе изменения RGB
        intFreePart = Round(intOSInfo(0)/intTotal*255) &#039;физической
        intFreePartV = Round(intOSInfo(1)/intOSInfo(2)*255) &#039;виртуальной
        intFreePartP = Int(intPFUInfo(0)/intPFUInfo(1)*255) &#039;подкачки
        intFreePartProc = Int(intProcRate*2.55) &#039;процессоры
        
        &#039;выводим количество памяти
        fpRAM.Innertext = intOSInfo(0)     
        tpRAM.Innertext = intTotal
        fvRAM.Innertext = intOSInfo(1)
        tvRAM.Innertext = intOSInfo(2)
        fswap.Innertext = intPFUInfo(0)
        tswap.Innertext = intPFUInfo(1)
        procrate.Innertext = intProcRate
        
        &#039;выставляем цвет окна: &quot;#&quot; + R + G + B, вариант от синего к красному
        window.document.getElementById(&quot;pRAM&quot;).style.backgroundColor = strHash &amp; _
                GetStrHex(255-intFreePart) &amp; GetStrHex(0) &amp; GetStrHex(intFreePart)
        &#039;вариант от зеленого к красному, прочие варианты - по аналогии
        window.document.getElementById(&quot;vRAM&quot;).style.backgroundColor = strHash &amp; _
                GetStrHex(255-intFreePartV) &amp; GetStrHex(intFreePartV) &amp; GetStrHex(0)
        &#039;снова от синего - подкачка                
        window.document.getElementById(&quot;swap&quot;).style.backgroundColor = strHash &amp; _
                GetStrHex(255-intFreePartP) &amp; GetStrHex(0) &amp; GetStrHex(intFreePartP)
        &#039;снова от зеленого - процессор        
        window.document.getElementById(&quot;proc&quot;).style.backgroundColor = strHash &amp; _
                GetStrHex(255-intFreePartProc) &amp; GetStrHex(intFreePartProc) &amp; GetStrHex(0)
        window.SetTimeout &quot;UpdateInfo()&quot;, 1000, &quot;vbscript&quot;
    End Sub
        
    &#039;получаем объем свободной памяти
    Function GetOSInfo()
        Dim colOS
        Set colOS = objWMI.ExecQuery(strOSQ,,intPSF)
        For Each objItem In colOS
            With objItem
                intOSInfoArr(0) = Int(.FreePhysicalMemory/1024)
                intOSInfoArr(1) = Int(.FreeVirtualMemory/1024)
                intOSInfoArr(2) = Round(.TotalVirtualMemorySize/1024)            
            End With
        Next        
        Set colOS = Nothing
        GetOSInfo = intOSInfoArr
    End Function
    
    &#039;получаем объем физической памяти
    Function GetTotalMemorySize()
        Dim colPM
        Set colPM = objWMI.ExecQuery(strPMQ,,intPSF)
        For Each objItem In colPM
            GetTotalMemorySize = GetTotalMemorySize + Int(objItem.Capacity/1024/1024)
        Next
        Set colPM = Nothing
    End Function
    
    &#039;получаем объем файла подкачки
    Function GetPFUInfo()
        Dim colPFL
        Set colPFL = objWMI.ExecQuery(strPFUQ,,intPSF)
        For Each objItem In colPFL
            With objItem
                &#039;свободно = объем - использовано
                intPFUInfoArr(0) = .AllocatedBaseSize - .CurrentUsage 
                intPFUInfoArr(1) = .AllocatedBaseSize &#039;объем                
            End With
        Next
        Set colPFL = Nothing
        GetPFUInfo = intPFUInfoArr
    End Function
    
    &#039;получаем процент загрузки процессоров
    Function GetProcRate()
        Dim colP
        Set colP = objWMI.ExecQuery(strPQ,,intPSF)
        i = 0
        For Each objItem In colP
            i = i + 1
            GetProcRate = GetProcRate + objItem.LoadPercentage            
        Next
        &#039;вычисляем среднее арифметическое на случай, если процессоров несколько
        GetProcRate = 100-(GetProcRate/i)
        Set colP = Nothing
    End Function
    
    &#039;переводим число из RGB в Hex для HTML
    Function GetStrHex(i)
        If i &lt; 16 Then
            GetStrHex = &quot;0&quot; &amp; Hex(i)
        Else
            GetStrHex = Hex(i)
        End If        
    End Function
    
    &#039;регистрация библиотеки, True - регистрируем, False - разрегистрируем
    Function RegLib(bWha)
        Dim strWha
        If bWha Then 
            strWha = &quot;regsvr32.exe /i /s &quot;
        Else
            strWha = &quot;regsvr32.exe u/ /i /s &quot;
        End If
        &#039;MsgBox &quot;qwe&quot;
        intRet = wshShell.Run(strWha &amp; strDll )
        
        If intRet = 0 Then &#039;если удалось зарегистрировать - True
            RegLib = True
        Else
            RegLib = False
        End If    
    End Function
    
&lt;/script&gt; 
&lt;body&gt;    
    &lt;div id=&quot;menu&quot;&gt;
        &lt;span id=&quot;header&quot;&gt;&lt;/span&gt;&lt;span id=&quot;closebtn&quot;&gt;X&lt;/span&gt;
    &lt;/div&gt;
    &lt;div id=&quot;pRAM&quot;&gt;
        Физическая память:&amp;nbsp &lt;span id=&quot;fpRAM&quot;&gt;&lt;/span&gt;&amp;nbsp из&amp;nbsp &lt;span id=&quot;tpRAM&quot;&gt;&lt;/span&gt;&amp;nbsp MB        
    &lt;/div&gt;
    &lt;div id=&quot;vRAM&quot;&gt;
        Виртуальная память:&amp;nbsp &lt;span id=&quot;fvRAM&quot;&gt;&lt;/span&gt;&amp;nbsp из&amp;nbsp &lt;span id=&quot;tvRAM&quot;&gt;&lt;/span&gt;&amp;nbsp MB
    &lt;/div&gt;
    &lt;div id=&quot;swap&quot;&gt;
        Файл подкачки:&amp;nbsp &lt;span id=&quot;fswap&quot;&gt;&lt;/span&gt;&amp;nbsp из&amp;nbsp &lt;span id=&quot;tswap&quot;&gt;&lt;/span&gt;&amp;nbsp MB
    &lt;/div&gt;
    &lt;div id=&quot;proc&quot;&gt;
        Процессоры:&amp;nbsp &lt;span id=&quot;procrate&quot;&gt;&lt;/span&gt;&amp;nbsp из 100%
    &lt;/div&gt;
&lt;/body&gt; 
&lt;/html&gt;</code></pre></div><p>Добавил крестик для завершения работы приложения. При наведении мыши на крестик изменяется курсор.<br />Кроме того Ctrl+стрелки перемещают окно по экрану. Приятные мелочи <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />.<br />Не знаю как запустить процесс мониторинга в отдельном потоке, чтобы не подтормаживали манипуляции с окном.<br />Если ловить события через __InstanceCreationEvent - бесконечный цикл, тоже все висит.<br />Как-нибудь расставить приоритеты, чтобы код для манипуляций с интерфейсом был &quot;круче&quot;, чем прочий.<br />Может снова через API как-нибудь можно сообразить?<br />Надеюсь кому-нибудь это интересно, а то похоже, что я тут сам с собой <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p>]]></content>
			<author>
				<name><![CDATA[dab00]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27085</uri>
			</author>
			<updated>2011-09-05T16:25:10Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=51223#p51223</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: HTA: Free RAM monitor]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=51220#p51220" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Аскет пишет:</cite><blockquote><p>У меня скрипт не работает: строка 87 рушит весь код.</p></blockquote></div><p>По ходу я поймал косяк - забыл округлить intFreePartP - процент свободного файла подкачки. Да и процент использования процессоров тоже округлить не помешало бы.<br /></p><div class="codebox"><pre><code>intFreePartP = Int(intPFUInfo(0)/intPFUInfo(1)*255) &#039;подкачки
intFreePartProc = Int(intProcRate*2.55) &#039;процессоры</code></pre></div><p>Думаю это поможет. Я тоже поймал такую же ошибку в один прекрасный момент. У меня все решилось округлением.<br />Спасибо за тест <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p>]]></content>
			<author>
				<name><![CDATA[dab00]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27085</uri>
			</author>
			<updated>2011-09-05T13:57:40Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=51220#p51220</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: HTA: Free RAM monitor]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=51217#p51217" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Аскет пишет:</cite><blockquote><p>У меня скрипт не работает: строка 87 рушит весь код.<br /></p><div class="codebox"><pre><code>intFreePartP = intPFUInfo(0)/intPFUInfo(1)*255 &#039;подкачки</code></pre></div></blockquote></div><p>На вскидку могу предположить только деление на ноль - если у Вас AllocatedBaseSize - размер файла подкачки = 0.<br />Наверное нужно проверку добавить. А у Вас машинка какой системы ? <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /><br />Вариант получше, совсем из головы вылетело - On Error Resume Next <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p>]]></content>
			<author>
				<name><![CDATA[dab00]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27085</uri>
			</author>
			<updated>2011-09-05T11:26:01Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=51217#p51217</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: HTA: Free RAM monitor]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=51216#p51216" />
			<content type="html"><![CDATA[<p><strong>dab00</strong>: да действительно, синий является самым &quot;холодным&quot; нежели зелёный.&nbsp; Красивый переход реализован в 6-м посте.</p><p>У меня скрипт не работает: строка 87 рушит весь код.<br /></p><div class="codebox"><pre><code>intFreePartP = intPFUInfo(0)/intPFUInfo(1)*255 &#039;подкачки</code></pre></div><p>Закомментировав оную, начинает работать.</p>]]></content>
			<author>
				<name><![CDATA[Аскет]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=25748</uri>
			</author>
			<updated>2011-09-05T10:38:46Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=51216#p51216</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: HTA: Free RAM monitor]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=51204#p51204" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>alexii пишет:</cite><blockquote><p>Регистрацию лучше вовсе оставлять на откуп пользователю. Моё мнение.</p></blockquote></div><p>Конечно так удобнее. Для разработчика <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />.<br />Поясню про возникавшие проблемы регистрации (надеюсь решил вопрос).<br />Например, сегодня пишем код в каталоге 1, там же компилируем либу. Регистрируем, все работает.<br />Завтра пишем код в каталоге 2, регистрируем либу из каталоге 2 - все работает, т.к. есть либа в каталоге 1, а путь к либе прописан в реестре.<br />Послезавтра удаляем каталог 1 - код из каталога 2 не работает.<br />Так вот, на сколько я понял, чтобы все работало, что называется, portable - чтобы не копировать библиотеку куда-нибудь в системный каталог, откуда она уже никуда не пропадет, необходимо при завершении работы приложения разрегистрировать либу. Пробовал таким образом - полет нормальный <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />.</p>]]></content>
			<author>
				<name><![CDATA[dab00]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27085</uri>
			</author>
			<updated>2011-09-05T04:49:17Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=51204#p51204</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: HTA: Free RAM monitor]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=51169#p51169" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>dab00 пишет:</cite><blockquote><p>Кстати, на счет библиотеки. В этот раз я кажется решил проблему возможных косяков при повторной регистрации. По-моему лучше разрегистрировать библиотеку при выгрузке приложения. Возразите, может ошибаюсь.</p></blockquote></div><p>Регистрацию лучше вовсе оставлять на откуп пользователю. Моё мнение.</p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2011-09-04T15:15:54Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=51169#p51169</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: HTA: Free RAM monitor]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=51165#p51165" />
			<content type="html"><![CDATA[<p>Никому не понравился мой вариант трансформации цвета? Если лениво копипастить - можно <a href="http://narod.ru/disk/23983222001/ColorTrans.ZIP.html">скачать</a>. <br />В архиве 2 варианта: с синего и зеленого на красный. Интересно же получилось <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />.<br />В продолжение темы с подачи и, надеюсь, позволения уважаемого автора нарисовал <a href="http://narod.ru/disk/23991842001/ResMon.zip.html">HTML-приложение</a> для мониторинга ресурсов системы: физической и виртуальной памяти, файла подкачки и загрузки процессора. С &quot;игрой цветом&quot;, &quot;поверх всех окон&quot; и пр.<br /><span class="postimg"><img src="http://da440dil.narod.ru/resmon-images/resmon2.png" alt="http://da440dil.narod.ru/resmon-images/resmon2.png" /></span> <span class="postimg"><img src="http://da440dil.narod.ru/resmon-images/resmon3.png" alt="http://da440dil.narod.ru/resmon-images/resmon3.png" /></span><br />Чисто для себя сделал. Поясню почему процессор добавил (все же с памяти началось). <br />У меня на рабочем ноуте 2 Гига оперативы и проц Селерон 1.8. Когда начал писать в Visual Studio 2010 проекты приложений баз данных на - ADO - Entity Framework - ASP - Silverlight и прочей мелкомягкой технологии, обратил внимание, что в процессе отладки ноуту становится плохо. Сначала думал на оперативу, файл подкачки увеличил, а потом просек, что оперативы используется чуть больше гига, а грузится процессор. Может у кого подобная проблема будет, этой приладой можно просечь <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />.<br />Что касается кода, хочу указать на принципиальные отличия от кода автора:<br />- в большинстве отказался от функции Round, т.к. по-моему Int работает быстрее<br />- полностью отказался от метода Instances_, т.к. в коде ни к чему все свойства вызываемых объектов, кроме того&nbsp; в WQL можно использовать полусинхронные запросы, что также увеличивает производительность<br />Для вывода окна поверх всех написал, как обычно, простенькую библиотеку, содержащую всего две API-функции:<br /></p><div class="codebox"><pre><code>Option Explicit
&#039;API-функция получения дескриптора окна
Private Declare Function FindWindow Lib &quot;user32&quot; Alias &quot;FindWindowA&quot; _
        (ByVal lpszClassName As String, ByVal lpszWindow As String) As Long
&#039;API-функция установки позиции окна
Private Declare Function SetWindowPos Lib &quot;user32&quot; _
        (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, _
        ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long

&#039;получаем дескриптор
Public Function GetHandle(ByVal strCaption As String) As Long
    GetHandle = FindWindow(vbNullString, strCaption)
End Function

&#039;устанавливаем окно поверх всех
Public Sub SetTop(ByVal strCaption As String)
   SetWindowPos FindWindow(vbNullString, strCaption), -1, 0, 0, 0, 0, 3
End Sub</code></pre></div><p>Кстати, на счет библиотеки. В этот раз я кажется решил проблему возможных косяков при повторной регистрации. По-моему лучше разрегистрировать библиотеку при выгрузке приложения. Возразите, может ошибаюсь.<br />А вот исходник HTA:<br /></p><div class="codebox"><pre><code>&lt;html&gt;
&lt;head&gt;
  &lt;title&gt;ResMon&lt;/title&gt;
  &lt;HTA:APPLICATION 
    ID = &quot;ResMon&quot;
    APPLICATIONNAME=&quot;ResMon&quot;    
    SINGLEINSTANCE=&quot;yes&quot;
    MAXIMIZEBUTTON = &quot;no&quot;
    SCROLL=&quot;no&quot;
    ShowInTaskbar =&quot;no&quot;
    BORDER=&quot;none&quot;
    SELECTION=&quot;no&quot;
    Version = &quot;1.0&quot;&gt;
    &lt;/HTA:APPLICATION&gt;
&lt;/head&gt;
&lt;style type=&quot;text/css&quot;&gt;
    html, body{
        margin:1px;
        text-align: center;   
        font:bold 12 sans-serif;   
        border-style: outset;
        color: #ffffff;    
    }
    #header{
        background-color: #800000;
    }
 &lt;/style&gt;
&lt;script language=&quot;VBScript&quot;&gt;
    Option Explicit
    Const strHash = &quot;#&quot;
    Const strHeader = &quot;Объем свободных ресурсов&quot;
    Const strDll = &quot;WinPos.dll&quot;
    &#039;--- запросы
    Const strOSQ = &quot;Select FreePhysicalMemory, FreeVirtualMemory, TotalVirtualMemorySize From Win32_OperatingSystem&quot;
    Const strPMQ = &quot;Select Capacity From Win32_PhysicalMemory&quot;
    Const strPFUQ = &quot;Select AllocatedBaseSize, CurrentUsage From Win32_PageFileUsage&quot;
    Const strPQ = &quot;Select LoadPercentage From Win32_Processor&quot;
    Const intPSF = 48 &#039;флаг полусинхронности
    &#039;-------
    Dim objItem    
    Dim intTotal, intFreePart, intFreePartV, intFreePartP, intProcRate, intFreePartProc
    Dim intOSInfoArr(2), intOSInfo
    Dim intPFUInfoArr(1), intPFUInfo
    Dim i, intRet
    
    Dim objWMI, wshShell    
    Set objWMI = GetObject(&quot;winmgmts:\\.\root\cimv2&quot;)
    Set wshShell = CreateObject(&quot;WScript.Shell&quot;)    
    
    Sub Window_OnLoad()
        Dim objSetTop
        window.resizeTo 245,80
        window.moveTo screen.availWidth-255, screen.availHeight-90
        &#039;пытаемся зарегистрировать библиотеку
        intRet = RegLib(True)
        If intRet Then 
            &#039;создаем экземпляр класса из либы = strDll
            Set objSetTop = CreateObject(&quot;WinPos.WPClass&quot;)        
            &#039;делаем окно поверх всех окон
            objSetTop.SetTop document.title            
            &#039;удаляем ссылку
            Set objSetTop = Nothing
        Else
            wshShell.PopUp &quot;Не удалось зарегистрировать библиотеку &quot; &amp; strDll,1,&quot;Ошибка регистрации&quot;,48
        End If
        header.Innertext = strHeader
        window.setTimeout &quot;UpdateInfo&quot;, 1, &quot;vbscript&quot;    
    End Sub
        
    Sub Window_OnUnload()
        RegLib(False)
        Set wshShell = Nothing
        Set objWMI = Nothing
    End Sub
    
    Sub UpdateInfo()
        &#039;информация из Win32_OperatingSystem: свободная физическая память, 
        &#039;свободная виртуальная память, полный объем виртуальной памяти
        intOSInfo = GetOSInfo()
        intTotal = GetTotalMemorySize() &#039;полный объем физической памяти
        intPFUInfo = GetPFUInfo() &#039;информация о файле подкачки
        intProcRate = GetProcRate() &#039;процент свободного времени процессоров
        
        &#039;процент свободной памяти в масштабе изменения RGB
        intFreePart = Round(intOSInfo(0)/intTotal*255) &#039;физической
        intFreePartV = Round(intOSInfo(1)/intOSInfo(2)*255) &#039;виртуальной
        intFreePartP = intPFUInfo(0)/intPFUInfo(1)*255 &#039;подкачки
        intFreePartProc = intProcRate*2.55 &#039;процессоры
        
        &#039;выводим количество памяти
        fpRAM.Innertext = intOSInfo(0)     
        tpRAM.Innertext = intTotal
        fvRAM.Innertext = intOSInfo(1)
        tvRAM.Innertext = intOSInfo(2)
        fswap.Innertext = intPFUInfo(0)
        tswap.Innertext = intPFUInfo(1)
        procrate.Innertext = intProcRate
        
        &#039;выставляем цвет окна: &quot;#&quot; + R + G + B, вариант от синего к красному
        window.document.getElementById(&quot;pRAM&quot;).style.backgroundColor = strHash &amp; _
                GetStrHex(255-intFreePart) &amp; GetStrHex(0) &amp; GetStrHex(intFreePart)
        &#039;вариант от зеленого к красному, прочие варианты - по аналогии
        window.document.getElementById(&quot;vRAM&quot;).style.backgroundColor = strHash &amp; _
                GetStrHex(255-intFreePartV) &amp; GetStrHex(intFreePartV) &amp; GetStrHex(0)
        &#039;снова от синего - подкачка
        window.document.getElementById(&quot;swap&quot;).style.backgroundColor = strHash &amp; _
                GetStrHex(255-intFreePartP) &amp; GetStrHex(0) &amp; GetStrHex(intFreePartP)
        &#039;снова от зеленого - процессор
        &#039;MsgBox intProcRate &amp; vbCrLf &amp; strHash &amp; _
        &#039;        GetStrHex(255-intFreePartProc) &amp; GetStrHex(intFreePartProc) &amp; GetStrHex(0)
        window.document.getElementById(&quot;proc&quot;).style.backgroundColor = strHash &amp; _
                GetStrHex(255-intFreePartProc) &amp; GetStrHex(intFreePartProc) &amp; GetStrHex(0)
        window.SetTimeout &quot;UpdateInfo()&quot;, 1000, &quot;vbscript&quot;
    End Sub        
    
    Function GetOSInfo()
        Dim colOS
        Set colOS = objWMI.ExecQuery(strOSQ,,intPSF)
        For Each objItem In colOS
            With objItem
                intOSInfoArr(0) = Int(.FreePhysicalMemory/1024)
                intOSInfoArr(1) = Int(.FreeVirtualMemory/1024)
                intOSInfoArr(2) = Round(.TotalVirtualMemorySize/1024)            
            End With
        Next
        Set colOS = Nothing
        GetOSInfo = intOSInfoArr
    End Function
    
    &#039;получаем объем физической памяти
    Function GetTotalMemorySize()
        Dim colPM
        Set colPM = objWMI.ExecQuery(strPMQ,,intPSF)
        For Each objItem In colPM
            GetTotalMemorySize = GetTotalMemorySize + Int(objItem.Capacity/1024/1024)
        Next
        Set colPM = Nothing
    End Function
    
    &#039;получаем объем файла подкачки
    Function GetPFUInfo()
        Dim colPFL
        Set colPFL = objWMI.ExecQuery(strPFUQ,,intPSF)
        For Each objItem In colPFL
            With objItem
                &#039;свободно = объем - использовано
                intPFUInfoArr(0) = .AllocatedBaseSize - .CurrentUsage 
                intPFUInfoArr(1) = .AllocatedBaseSize &#039;объем                
            End With
        Next
        Set colPFL = Nothing
        GetPFUInfo = intPFUInfoArr
    End Function
    
    &#039;получаем процент загрузки процессоров
    Function GetProcRate()
        Dim colP
        Set colP = objWMI.ExecQuery(strPQ,,intPSF)
        i = 0
        For Each objItem In colP
            i = i + 1
            GetProcRate = GetProcRate + objItem.LoadPercentage            
        Next
        &#039;вычисляем среднее арифметическое на случай, если процессоров несколько
        GetProcRate = 100-(GetProcRate/i)
        Set colP = Nothing
    End Function
    
    &#039;переводим число из RGB в Hex для HTML
    Function GetStrHex(i)
        If i &lt; 16 Then
            GetStrHex = &quot;0&quot; &amp; Hex(i)
        Else
            GetStrHex = Hex(i)
        End If        
    End Function
    
    &#039;регистрация библиотеки, True - регистрируем, False - разрегистрируем
    Function RegLib(bWha)
        Dim strWha
        If bWha Then 
            strWha = &quot;regsvr32.exe /i /s &quot;
        Else
            strWha = &quot;regsvr32.exe u/ /i /s &quot;
        End If
        
        intRet = wshShell.Run(strWha &amp; strDll )
        
        If intRet = 0 Then &#039;если удалось зарегистрировать - True
            RegLib = True
        Else
            RegLib = False
        End If    
    End Function
    
&lt;/script&gt; 
&lt;body&gt;
    &lt;div id=&quot;header&quot;&gt;&lt;/div&gt;
    &lt;div id=&quot;pRAM&quot;&gt;
        Физическая память:&amp;nbsp &lt;span id=&quot;fpRAM&quot;&gt;&lt;/span&gt;&amp;nbsp из&amp;nbsp &lt;span id=&quot;tpRAM&quot;&gt;&lt;/span&gt;&amp;nbsp MB
    &lt;/div&gt;
    &lt;div id=&quot;vRAM&quot;&gt;
        Виртуальная память:&amp;nbsp &lt;span id=&quot;fvRAM&quot;&gt;&lt;/span&gt;&amp;nbsp из&amp;nbsp &lt;span id=&quot;tvRAM&quot;&gt;&lt;/span&gt;&amp;nbsp MB
    &lt;/div&gt;
    &lt;div id=&quot;swap&quot;&gt;
        Файл подкачки:&amp;nbsp &lt;span id=&quot;fswap&quot;&gt;&lt;/span&gt;&amp;nbsp из&amp;nbsp &lt;span id=&quot;tswap&quot;&gt;&lt;/span&gt;&amp;nbsp MB
    &lt;/div&gt;
    &lt;div id=&quot;proc&quot;&gt;
        Процессоры:&amp;nbsp &lt;span id=&quot;procrate&quot;&gt;&lt;/span&gt;&amp;nbsp из 100%
    &lt;/div&gt;
&lt;/body&gt; 
&lt;/html&gt;</code></pre></div><p>Ваши комменты <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />.</p>]]></content>
			<author>
				<name><![CDATA[dab00]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27085</uri>
			</author>
			<updated>2011-09-04T14:02:47Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=51165#p51165</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: HTA: Free RAM monitor]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=51139#p51139" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Аскет пишет:</cite><blockquote><p>Было бы неплохо задействовать &quot;игру цветом&quot; при индикации - От спокойного зелёного при &gt;80% свободной памяти до тревожно-красного при её нехватке.</p></blockquote></div><p>Попробуйте, так пойдет?<br /></p><div class="codebox"><pre><code>&lt;head&gt;
  &lt;title&gt;ссс&lt;/title&gt;
  &lt;HTA:APPLICATION 
    ID = &quot;ссс&quot;
    APPLICATIONNAME=&quot;ссс&quot;    
    SINGLEINSTANCE=&quot;yes&quot;
    MAXIMIZEBUTTON = &quot;no&quot;
    SCROLL=&quot;no&quot;
    ShowInTaskbar =&quot;no&quot;
    BORDER=&quot;none&quot;    
    Version = &quot;1.0&quot;&gt;
    &lt;/HTA:APPLICATION&gt;
&lt;/head&gt;
&lt;style type=&quot;text/css&quot;&gt;
html, body{
    margin:1px;
    text-align: center;   
    font:bold 12 sans-serif;   
    border-style: outset;
    
 &lt;/style&gt;
&lt;script language=&quot;VBScript&quot;&gt;
    Sub Window_OnLoad()        
        window.setTimeout &quot;SetColor2 &quot;&amp; 0 &amp; &quot;,&quot; &amp; 0 &amp; &quot;,&quot; &amp; 255,1, &quot;vbscript&quot;
    End Sub
        
    Sub SetColor(x,y,z)        
        window.document.body.style.background = &quot;#&quot; &amp; GetStrHex(x) &amp; GetStrHex(y) &amp; GetStrHex(z)
    End Sub        
    
    Function GetStrHex(i)
        If i &lt; 16 Then
            GetStrHex = &quot;0&quot; &amp; Hex(i)
        Else
            GetStrHex = Hex(i)
        End If        
    End Function
    
    Sub SetColor2(x,y,z)
        SetColor x,y,z
        x = x + 1
        z = z - 1
        If z &lt;&gt; 0 Then window.setTimeout _
                &quot;SetColor2 &quot; &amp; x &amp; &quot;,&quot; &amp; y &amp; &quot;,&quot; &amp; z,5, &quot;vbscript&quot;        
    End Sub
    
&lt;/script&gt; 
&lt;body&gt;
    
&lt;/body&gt; 
&lt;/html&gt;</code></pre></div><p>Можно, конечно, и от зеленого, но на мой взгляд лучше от синего, т.к. черные буквы на красном по-моему не очень, лучше белые, а они лучше на более темных цветах.</p>]]></content>
			<author>
				<name><![CDATA[dab00]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27085</uri>
			</author>
			<updated>2011-09-03T18:04:24Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=51139#p51139</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: HTA: Free RAM monitor]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=51134#p51134" />
			<content type="html"><![CDATA[<p>Угу...&nbsp; &nbsp;я про Вашу либу и вспоминал...</p>]]></content>
			<author>
				<name><![CDATA[Евген]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=25253</uri>
			</author>
			<updated>2011-09-03T15:26:51Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=51134#p51134</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: HTA: Free RAM monitor]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=51121#p51121" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Евген пишет:</cite><blockquote><p>вот эту бы штуку поверх всех окон можно...</p></blockquote></div><p>Так вроде <a href="http://forum.script-coding.com/viewtopic.php?id=5835&amp;p=2">решили уже</a>, что без посредников из скрипта до окошек не достучаться. Используем стороннюю либу, или пишем свою <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />.</p>]]></content>
			<author>
				<name><![CDATA[dab00]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27085</uri>
			</author>
			<updated>2011-09-03T05:13:14Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=51121#p51121</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: HTA: Free RAM monitor]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=51117#p51117" />
			<content type="html"><![CDATA[<p>Нормуль - робит...<br />вот эту бы штуку поверх всех окон можно...</p>]]></content>
			<author>
				<name><![CDATA[Евген]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=25253</uri>
			</author>
			<updated>2011-09-03T02:55:43Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=51117#p51117</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: HTA: Free RAM monitor]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=51111#p51111" />
			<content type="html"><![CDATA[<p>Было бы неплохо задействовать &quot;игру цветом&quot; при индикации - От спокойного зелёного при &gt;80% свободной памяти до тревожно-красного при её нехватке.</p><p>Буду рад если кого-то заинтересует реализация этих дополнений.</p>]]></content>
			<author>
				<name><![CDATA[Аскет]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=25748</uri>
			</author>
			<updated>2011-09-02T22:28:09Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=51111#p51111</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[HTA: Free RAM monitor]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=51110#p51110" />
			<content type="html"><![CDATA[<p>Продолжаю тему мониторинга ОС и ресурсов в частности.</p><p>На этот раз такая щепетильная составляющая как свободная оперативная память. Всегда полезно знать её размер.</p><p><span class="postimg"><img src="http://img194.imageshack.us/img194/2404/freerammon.png" alt="http://img194.imageshack.us/img194/2404/freerammon.png" /></span></p><div class="codebox"><pre><code> &lt;!-- Name:		Free_RAM_monitor.hta
	  Language:	HyperText Application
	  Author:	Аскет,	true-script@ya.ru
	  Description: This util displays 
															
 --&gt;
 
 
 &lt;HTML&gt;
   &lt;HEAD&gt;
   &lt;TITLE&gt;Free RAM monitor v1.0&lt;/TITLE&gt;
   &lt;HTA:APPLICATION        ID=&quot;RamMon&quot;        APPLICATIONNAME=&quot;RamMon&quot;        BORDER=&quot;NONE&quot;        BORDERSTYLE=&quot;&quot;        SCROLL=&quot;NO&quot;        SELECTION=NO        CAPTION=&quot;yes&quot;        ICON=&quot;shell32.dll&quot;       MAXIMIZEBUTTON=&quot;no&quot;        MINIMIZEBUTTON=&quot;no&quot;        SHOWINTASKBAR=&quot;no&quot;        SINGLEINSTANCE=&quot;YES&quot;       SYSMENU=&quot;NO&quot;        VEотображаетRSION=&quot;1.0&quot;        WINDOWSTATE=&quot;&quot; /&gt;
 &lt;/HEAD&gt;
 &lt;meta author=&quot;Gorelov Alexander, July 2011&quot;&gt;
 &lt;script language=VBS&gt;
	        Const WindowWidth = 85
        Const WindowHeight = 20
        window.resizeTo WindowWidth,WindowHeight
        window.moveTo screen.availWidth-122, screen.availHeight-100
&lt;/script&gt;
 &lt;style&gt;
html, body{
   margin:0px;
   padding:0px;
   font:10;
   border-style: OUTset;
}
 &lt;/style&gt;

   &lt;BODY SCROLL=&quot;no&quot; bgcolor=&quot;#88FFC4&quot;&gt;
&lt;!-----------------------------&gt;
&lt;TABLE CELLSPACING=&quot;0&quot; CELLPADDING=&quot;0&quot;BORDER=&quot;0&quot;WIDTH=&quot;100%&quot; HEIGHT=&quot;100%&quot; STYLE=&quot;FONT:11&quot;&gt;
 &lt;TR style=&quot;font-weight:bold&quot;&gt;
      &lt;TD &gt;RAM: &lt;/TD&gt;
      &lt;TD ALIGN=&quot;RIGHT&quot; id=RAMs&gt;[&lt;FONT COLOR=rED ID=RAM&gt;&lt;/FONT&gt;] mb&lt;/TD&gt;
 &lt;/TR&gt;
&lt;/TABLE&gt;
&lt;/style&gt;
    &lt;script type=&quot;text/javascript&quot;&gt;
    
     var x0, y0;

     document.onmousemove=function () {
         //if ((event.button!=0)&amp;&amp;(event.button!=1)){
         if (event.button!=0){
             window.moveBy(event.x-x0, event.y-y0);
             return false;
         }
         document.body.style.cursor=&quot;auto&quot;;
     }

     document.onmousedown=function () {
         if (event.button!=1){
             x0=event.x; y0=event.y;
         }
     }
&lt;/script&gt;

&lt;script language=VBS&gt;
	updateInfo()


	sub updateInfo()
		for each oOS in Getobject (&quot;winmgmts:win32_operatingSystem&quot;).Instances_
			RAM.Innertext =  round(oOS.FreephysicalMemory /1024)
		next
		window.SetTimeout &quot;updateInfo()&quot;,1000
	end sub
	
&lt;/script&gt;

&lt;!-----------------------------&gt;
	&lt;/BODY&gt;
&lt;/HTML&gt;</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Аскет]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=25748</uri>
			</author>
			<updated>2011-09-02T22:14:50Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=51110#p51110</id>
		</entry>
</feed>
