home *** CD-ROM | disk | FTP | other *** search
/ Freelog 117 / FreelogNo117-OctobreNovembre2013.iso / Theme / 8GadgetPack / 8GadgetPackSetup.msi / Gadgets.7z / Gadgets / TopProcessMonitor.gadget / js / TopProcessMonitor.js < prev   
Text File  |  2013-08-20  |  49KB  |  1,232 lines

  1. try{var xmlHttp = new XMLHttpRequest()}
  2. catch (e){var xmlHttp = new ActiveXObject('Microsoft.XMLHTTP')}
  3.  
  4. var wshShell = new ActiveXObject("WScript.Shell");
  5.  
  6. var locator = new ActiveXObject("WbemScripting.SWbemLocator");
  7. var objWMIService = locator.ConnectServer(null, "root\\cimv2");
  8.  
  9. var lngID;
  10.  
  11. System.Gadget.settingsUI = "settings.html";
  12. System.Gadget.onSettingsClosed = settingsclosed;
  13.  
  14. document.onselectstart = function() {return false};
  15.  
  16. var factheight;
  17. var numProcesses;
  18. var refreshRate;
  19. var timervar;
  20. var updateTimerId;
  21. var firstupdatetimer;
  22. var size;
  23. var warninguse;
  24. var criticaluse;
  25. var memorypersent;
  26. var cycleflag;
  27. var cyclepos;
  28. var numcyclepos = 9;// important
  29. var beginoffset;
  30. var endoffset;
  31. var hidetitleflag;
  32. var hidecopyrightflag;
  33. var hidetotalflag;
  34. var dblclcaction;
  35. var autoscaleDPIflag;
  36. var autoupdateflag;
  37.  
  38. var proc    = new Array();
  39. var caction = new Array();
  40.  
  41. var oldProcesses;
  42. var processes;
  43. var twoDimRead  = new Array();
  44. var twoDimWrite = new Array();
  45. var PercentProcessorTime = new Array();
  46. var PercentProcessorTimeold = new Array();
  47. var Timestamp_Sys100NS = new Array();
  48. var Timestamp_Sys100NSold = new Array();
  49.  
  50. //color settings
  51. var cBgColor;
  52. var cTitle;
  53. var cServStr;
  54. var cUsedEasy;
  55. var cUsedMedium;
  56. var cUsedHard;
  57. var cErrMsg;
  58. var cCopyright;
  59. var cVersion;
  60.  
  61. var CPUusage;
  62. var coreUsage;
  63. var coreCount;
  64. var TotalMemUsage;
  65. var MEM = objWMIService.ExecQuery("SELECT TotalVirtualMemorySize, TotalVisibleMemorySize FROM Win32_OperatingSystem");
  66. var RAMall = (new Enumerator(MEM)).item().TotalVisibleMemorySize * 1024;
  67. var VIRall = (new Enumerator(MEM)).item().TotalVirtualMemorySize * 1024;
  68.  
  69. var updateavailable;
  70. var showupdate;
  71.  
  72. function CheckUpdates(){
  73.  if (!updateavailable) autoupdate();
  74.  if (updateavailable && !showupdate) showupdate = true;
  75.  updateTimerId = setTimeout("CheckUpdates()", 86400000);// Update once a day
  76. }
  77.  
  78. function autoupdate(){
  79.  var url = "http://www.myfavoritegadgets.info/monitors/TopProcessMonitor/TopProcessMonitorversioninfo.xml";
  80.  xmlHttp.open("GET", url, false); //false mean call is synchronous
  81.  xmlHttp.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"); //for non cached
  82.  xmlHttp.send(null);
  83.  if (xmlHttp.readyState == 4 && xmlHttp.status == 200){
  84.   var newVersion = xmlHttp.responseXML.getElementsByTagName("version")[0].firstChild.nodeValue;
  85.   var updateUrl = xmlHttp.responseXML.getElementsByTagName("url")[0].firstChild.nodeValue;
  86.   // Compare and show message if a newer version is available.
  87.    if (parseFloat(newVersion) > parseFloat(System.Gadget.version)){
  88.    autoapdater.innerHTML = "<a id='ulink' href='" + updateUrl + "' style='text-decoration:none;color:" + cServStr +
  89.    "' onclick='System.Gadget.close()' onmouseout='ulink.style.textDecoration=" + '"none"' + "' onmouseover='ulink.style.textDecoration=" +
  90.    + '"underline"' + "'>" + mainlng[lngID][26] + "<strong>" + newVersion + "</strong>" + mainlng[lngID][27] + "</a>";
  91.    updateavailable = true;
  92.   }// if
  93.  }// if
  94. }
  95.  
  96. function settingsclosed(){
  97.  clearTimeout(timervar);
  98.  setlanguage(); //Important!!! before loadSettings()
  99.  loadsettings();
  100.  if (autoscaleDPIflag) getDPIsize(); //Important!!! After loadsettings()
  101.  setupgadget();
  102.  oldProcesses = getProcesses();
  103.  try {oldProcesses.sort(SortProcessByID)}
  104.  catch (e){}
  105.  timervar = setTimeout("update()", 500);
  106.  
  107.  if (autoupdateflag){
  108.   if (autoapdater.innerHTML == "") firstupdatetimer = setTimeout("CheckUpdates()", 5000);
  109.  }
  110.  else{
  111.   clearTimeout(firstupdatetimer);
  112.   clearTimeout(updateTimerId);
  113.  }
  114. }
  115.  
  116. function getDPIsize() {
  117.     try {
  118.         var getdefaultDPI = 0;
  119.         try {
  120.             getdefaultDPI = wshShell.RegRead("HKCU\\Software\\8GadgetPack\\ForceDPI");
  121.         }
  122.         catch (e) { }
  123.         if (getdefaultDPI == 0)
  124.             getdefaultDPI = wshShell.RegRead("HKCU\\Control Panel\\Desktop\\LogPixels");
  125.         size = parseInt((getdefaultDPI / 96) * 100) / 100;
  126.         System.Gadget.Settings.write("SetSize", size);
  127.     }
  128.     catch (e) { }
  129. }
  130.  
  131. function setlanguage(){
  132.  lngID = System.Gadget.Settings.read("LanguageId");
  133.  if(lngID == ''){
  134.   lngID = "0";
  135.   System.Gadget.Settings.write("LanguageId", lngID);
  136.  }
  137.  gtitle.innerText = mainlng[lngID][0];
  138.  hrline.style.width = tech[lngID][0];
  139.  cycleproc.title = mainlng[lngID][1];
  140. }
  141.  
  142. function loadsettings(){
  143.  processmode = System.Gadget.Settings.read("ProcessMode");
  144.  if(processmode == ''){
  145.   processmode = "CPU";
  146.   System.Gadget.Settings.write("ProcessMode", processmode);
  147.  }
  148.  
  149.  numProcesses = System.Gadget.Settings.read("NumProcesses");
  150.  if(numProcesses == ''){
  151.   numProcesses = 5;
  152.   System.Gadget.Settings.write("NumProcesses", numProcesses);
  153.  }
  154.  
  155.  size = System.Gadget.Settings.read("SetSize");
  156.  if (size == ''){
  157.   size = "1";
  158.   System.Gadget.Settings.write("SetSize", size);
  159.  }
  160.  
  161.  autoscaleDPIflag = System.Gadget.Settings.read ("DPIautoscale");
  162.  if (autoscaleDPIflag != "false"){
  163.   autoscaleDPIflag = true;
  164.   System.Gadget.Settings.write ("DPIautoscale", "true");
  165.  }
  166.  else{
  167.   autoscaleDPIflag = false;
  168.   System.Gadget.Settings.write ("DPIautoscale", "false");
  169.  }
  170.  
  171.  refreshRate = System.Gadget.Settings.read("refreshtime");
  172.  if(refreshRate == ''){
  173.   refreshRate = 5000;
  174.   System.Gadget.Settings.write("refreshtime", refreshRate);
  175.  }
  176.  
  177.  dblclcaction = System.Gadget.Settings.read("dblclick");
  178.  if (dblclcaction == ''){
  179.   dblclcaction = "0";
  180.   System.Gadget.Settings.write("dblclick", dblclcaction);
  181.  }
  182.  
  183.  memorypersent = System.Gadget.Settings.read ("PersentInMemory");
  184.  if (memorypersent != "true"){
  185.   memorypersent = false;
  186.   System.Gadget.Settings.write ("PersentInMemory", "false");
  187.  }
  188.  else{
  189.   memorypersent = true;
  190.   System.Gadget.Settings.write ("PersentInMemory", "true");
  191.  }
  192.  
  193.  warninguse = System.Gadget.Settings.read("WarningUse");
  194.  if(warninguse == ''){
  195.   warninguse = "65";
  196.   System.Gadget.Settings.write("WarningUse", warninguse);
  197.  }
  198.  
  199.  criticaluse = System.Gadget.Settings.read("CriticalUse");
  200.  if(criticaluse == ''){
  201.   criticaluse = "90";
  202.   System.Gadget.Settings.write("CriticalUse", criticaluse);
  203.  }
  204.  
  205.  hidetitleflag = System.Gadget.Settings.read ("TitleHide");
  206.  if (hidetitleflag != "true"){
  207.   hidetitleflag = false;
  208.   System.Gadget.Settings.write ("TitleHide", "false");
  209.  }
  210.  else{
  211.   hidetitleflag = true;
  212.   System.Gadget.Settings.write ("TitleHide", "true");
  213.  }
  214.  hidecopyrightflag = System.Gadget.Settings.read ("CopyrightHide");
  215.  if (hidecopyrightflag != "true"){
  216.   hidecopyrightflag = false;
  217.   System.Gadget.Settings.write ("CopyrightHide", "false");
  218.  }
  219.  else{
  220.   hidecopyrightflag = true;
  221.   System.Gadget.Settings.write ("CopyrightHide", "true");
  222.  }
  223.  
  224.  hidetotalflag = System.Gadget.Settings.read ("TotalHide");
  225.  if (hidetotalflag != "true"){
  226.   hidetotalflag = false;
  227.   System.Gadget.Settings.write ("TotalHide", "false");
  228.  }
  229.  else{
  230.   hidetotalflag = true;
  231.   System.Gadget.Settings.write ("TotalHide", "true");
  232.  }
  233.  
  234.  for (var i=1; i<=numcyclepos; i++){
  235.   proc[i] = System.Gadget.Settings.read ("ProcCycle" + i);
  236.   if (proc[i] != "true"){
  237.    proc[i] = false;
  238.    System.Gadget.Settings.write ("ProcCycle" + i, "false");
  239.   }
  240.   else{
  241.    proc[i] = true;
  242.    System.Gadget.Settings.write ("ProcCycle" + i, "true");
  243.   }
  244.  }
  245.  
  246.  for (var i=1; i<=numcyclepos; i++){
  247.   switch(i){
  248.    case 1:
  249.    if (proc[1] == true) caction[1]="CPU";
  250.    else caction[1]=null;
  251.    break;
  252.  
  253.    case 2:
  254.    if (proc[2] == true) caction[2]="Memory";
  255.    else caction[2]=null;
  256.    break;
  257.  
  258.    case 3:
  259.    if (proc[3] == true) caction[3]="Page";
  260.    else caction[3]=null;
  261.    break;
  262.  
  263.    case 4:
  264.    if (proc[4] == true) caction[4]="Virtual";
  265.    else caction[4]=null;
  266.    break;
  267.  
  268.    case 5:
  269.    if (proc[5] == true) caction[5]="IOBytes";
  270.    else caction[5]=null;
  271.    break;
  272.  
  273.    case 6:
  274.    if (proc[6] == true) caction[6]="Read";
  275.    else caction[6]=null;
  276.    break;
  277.  
  278.    case 7:
  279.    if (proc[7] == true) caction[7]="Write";
  280.    else caction[7]=null;
  281.    break;
  282.  
  283.    case 8:
  284.    if (proc[8] == true) caction[8]="TRead";
  285.    else caction[8]=null;
  286.    break;
  287.  
  288.    case 9:
  289.    if (proc[9] == true) caction[9]="TWrite";
  290.    else caction[9]=null;
  291.    break;
  292.   } // end switch
  293.  }// end for
  294.  
  295.  cycleflag = false;
  296.  cyclepos  = 1;
  297.  for (var i=1; i<=numcyclepos; i++){
  298.   if (caction[i] != null) cycleflag = true;
  299.  }
  300.  
  301.  if (cycleflag){
  302.   for (var i=1; i<=numcyclepos; i++){
  303.    if (caction[cyclepos] != null){
  304.     processmode = caction[cyclepos];
  305.     cyclepos++;
  306.     if (cyclepos>numcyclepos) cyclepos = 1;
  307.     break;
  308.    }
  309.    cyclepos++;
  310.    if (cyclepos>numcyclepos) cyclepos = 1;
  311.   }
  312.  }
  313.  
  314.  autoupdateflag = System.Gadget.Settings.read ("AutoUpdate");
  315.  if (autoupdateflag != "true"){
  316.   autoupdateflag = false;
  317.   System.Gadget.Settings.write ("AutoUpdate", "false");
  318.  }
  319.  else{
  320.   autoupdateflag = true;
  321.   System.Gadget.Settings.write ("AutoUpdate", "true");
  322.  }
  323.  
  324.  //color settings
  325.  cBgColor = System.Gadget.Settings.read("colBgColor");
  326.  if (cBgColor == ''){
  327.   cBgColor = "#262526";
  328.   System.Gadget.Settings.write("colBgColor", cBgColor);
  329.  }
  330.  cTitle = System.Gadget.Settings.read("colTitle");
  331.  if (cTitle == ''){
  332.   cTitle = "#FFFFFF";
  333.   System.Gadget.Settings.write("colTitle", cTitle);
  334.  }
  335.  
  336.  cServStr = System.Gadget.Settings.read("colServStr");
  337.  if (cServStr == ''){
  338.   cServStr = "#FFCC00";
  339.   System.Gadget.Settings.write("colServStr", cServStr);
  340.  }
  341.  
  342.  cUsedEasy = System.Gadget.Settings.read("colUsedEasy");
  343.  if (cUsedEasy == ''){
  344.   cUsedEasy = "#7EE444";
  345.   System.Gadget.Settings.write("colUsedEasy", cUsedEasy);
  346.  }
  347.  cUsedMedium = System.Gadget.Settings.read("colUsedMedium");
  348.  if (cUsedMedium == ''){
  349.   cUsedMedium = "#FFF62A";
  350.   System.Gadget.Settings.write("colUsedMedium", cUsedMedium);
  351.  }
  352.  cUsedHard = System.Gadget.Settings.read("colUsedHard");
  353.  if (cUsedHard == ''){
  354.   cUsedHard = "#FF0000";
  355.   System.Gadget.Settings.write("colUsedHard", cUsedHard);
  356.  }
  357.  
  358.  cErrMsg = System.Gadget.Settings.read("colErrMsg");
  359.  if (cErrMsg == ''){
  360.   cErrMsg = "#FF0000";
  361.   System.Gadget.Settings.write("colErrMsg", cErrMsg);
  362.  }
  363.  
  364.  cCopyright = System.Gadget.Settings.read("colCopyright");
  365.  if (cCopyright == ''){
  366.   cCopyright = "#00CCFF";
  367.   System.Gadget.Settings.write("colCopyright", cCopyright);
  368.  }
  369.  cVersion = System.Gadget.Settings.read("colVersion");
  370.  if (cVersion == ''){
  371.   cVersion = "#C0C0C0";
  372.   System.Gadget.Settings.write("colVersion", cVersion);
  373.  }
  374. //color settings end
  375. }
  376.  
  377. function loadsettingsfromfile(){
  378.  var fs = new ActiveXObject("Scripting.FileSystemObject");
  379.  var inifilename = System.Environment.getEnvironmentVariable("APPDATA") + "\\" + System.Gadget.name + "_Settings.ini";
  380.  try {
  381.   var inifile = fs.OpenTextFile(inifilename, 1); //1 read
  382.    try {
  383.     var tmp = inifile.ReadLine();
  384.     tmp = inifile.ReadLine();
  385.     if (tmp != ";purr purr meow") throw "old";
  386.  
  387.     lngID = inifile.ReadLine();
  388.     System.Gadget.Settings.write("LanguageId", lngID);
  389.     //color settings
  390.     tmp = inifile.ReadLine();
  391.     System.Gadget.Settings.write("sBgColorSelect", tmp);
  392.     cBgColor = inifile.ReadLine();
  393.     System.Gadget.Settings.write("colBgColor", cBgColor);
  394.     tmp = inifile.ReadLine();
  395.     System.Gadget.Settings.write("sTitColorSelect", tmp);
  396.     cTitle = inifile.ReadLine();
  397.     System.Gadget.Settings.write("colTitle", cTitle);
  398.     tmp = inifile.ReadLine();
  399.     System.Gadget.Settings.write("sServStrColorSelect", tmp);
  400.     cServStr = inifile.ReadLine();
  401.     System.Gadget.Settings.write("colServStr", cServStr);
  402.     tmp = inifile.ReadLine();
  403.     System.Gadget.Settings.write("sProcessEasyColorSelect", tmp);
  404.     cUsedEasy = inifile.ReadLine();
  405.     System.Gadget.Settings.write("colUsedEasy", cUsedEasy);
  406.     tmp = inifile.ReadLine();
  407.     System.Gadget.Settings.write("sProcessMediumColorSelect", tmp);
  408.     cUsedMedium = inifile.ReadLine();
  409.     System.Gadget.Settings.write("colUsedMedium", cUsedMedium);
  410.     tmp = inifile.ReadLine();
  411.     System.Gadget.Settings.write("sProcessHardColorSelect", tmp);
  412.     cUsedHard = inifile.ReadLine();
  413.     System.Gadget.Settings.write("colUsedHard", cUsedHard);
  414.     tmp = inifile.ReadLine();
  415.     System.Gadget.Settings.write("sErrMsgColorSelect", tmp);
  416.     cErrMsg = inifile.ReadLine();
  417.     System.Gadget.Settings.write("colErrMsg", cErrMsg);
  418.     tmp = inifile.ReadLine();
  419.     System.Gadget.Settings.write("sVersnColorSelect", tmp);
  420.     cVersion = inifile.ReadLine();
  421.     System.Gadget.Settings.write("colVersion", cVersion);
  422.     tmp = inifile.ReadLine();
  423.     System.Gadget.Settings.write("sCopyColorSelect", tmp);
  424.     cCopyright = inifile.ReadLine();
  425.     System.Gadget.Settings.write("colCopyright", cCopyright);
  426.     //color settings end
  427.  
  428.     size = inifile.ReadLine();
  429.     System.Gadget.Settings.write("SetSize", size);
  430.     numProcesses = inifile.ReadLine();
  431.     System.Gadget.Settings.write("NumProcesses", numProcesses);
  432.     warninguse = inifile.ReadLine();
  433.     System.Gadget.Settings.write("WarningUse", warninguse);
  434.     criticaluse = inifile.ReadLine();
  435.     System.Gadget.Settings.write("CriticalUse", criticaluse);
  436.     memorypersent = inifile.ReadLine();
  437.     System.Gadget.Settings.write ("PersentInMemory", memorypersent);
  438.     hidetitleflag = inifile.ReadLine();
  439.     System.Gadget.Settings.write ("TitleHide", hidetitleflag);
  440.     hidecopyrightflag = inifile.ReadLine();
  441.     System.Gadget.Settings.write ("CopyrightHide", hidecopyrightflag);
  442.     hidetotalflag = inifile.ReadLine();
  443.     System.Gadget.Settings.write ("TotalHide", hidetotalflag);
  444.     autoupdateflag = inifile.ReadLine();
  445.     System.Gadget.Settings.write ("AutoUpdate", autoupdateflag);
  446.     dblclcaction = inifile.ReadLine();
  447.     System.Gadget.Settings.write("dblclick", dblclcaction);
  448.     autoscaleDPIflag = inifile.ReadLine();
  449.     System.Gadget.Settings.write ("DPIautoscale", autoscaleDPIflag);
  450.    }//end try 2
  451.   
  452.    finally {inifile.Close()}
  453.  }//end try 1   
  454.  
  455.  catch (e) {}
  456.  
  457.  finally {fs = null}
  458. }
  459.  
  460. function init(){
  461.  try{counterstatus = wshShell.RegRead("HKLM\\SYSTEM\\CurrentControlSet\\Services\\PerfOS\\Performance\\Disable Performance Counters")}
  462.  catch (e){counterstatus = 0}
  463.  if (counterstatus){
  464.   var errhtml = '<g:background id="background" src="images/background.png">';
  465.   errhtml += '<div id="mainsquare" style="position:absolute"></div>';
  466.   errhtml += '<div style="position:absolute;top:6px;width:100%;text-align:center;font-size:12px;color:#FFFFFF;font-weight:bold">' + mainlng[0][0] + '</div>';
  467.   errhtml += '<div style="position:absolute;top:16px;width:100%"><hr align="center" width="' + tech[0] +'" color="#808080"></div>';
  468.   errhtml += '<div style="position:absolute;top:26px;width:100%;text-align:center"><img src="images/alert.png" style="width:16;height:16" /></div>';
  469.   errhtml += '<div style="position:absolute;top:42px;width:100%;font-size:12px;text-align:center;color:#FF0000;font-weight:bold">' + 'PerfOS is disabled!!!<br>' +
  470.   '<a style="color:#FF0000" href="http://www.myfavoritegadgets.info/counters/NoPerfcounters.html" onclick="System.Gadget.close()" target="_blank">Click HERE</a></div>';
  471.   errhtml += '<div id="advertis" style="position:absolute;width:100%;top:78px;left:10px;font-size:10px">' +
  472.   '<a class="ads" style="color:#00CCFF" href="http://www.myfavoritegadgets.info/" target="_blank">© 2012 by Igogo</a></div>';
  473.   errhtml += '<div id="versionnumber" style="position:absolute;font-size:9px;top:78px;left:0px;width:120px;text-align:right;' +
  474.   'color:#C0C0C0">v' + System.Gadget.version + '</div>';
  475.   document.body.innerHTML = errhtml + "</g:background>";
  476.   document.body.style.width = 130;
  477.   background.style.width = 130;
  478.   document.body.style.height = 98;
  479.   background.style.height = 98;
  480.   mainsquare.style.top = 5;
  481.   mainsquare.style.left = 5;
  482.   mainsquare.style.width = 120;
  483.   mainsquare.style.height = 88;
  484.   mainsquare.style.background = "#262526";
  485.   System.Gadget.settingsUI = "";
  486.   return;
  487.  }
  488.  loadsettingsfromfile(); //don't move this line!!!
  489.  setlanguage(); //Important!!! before loadSettings()
  490.  loadsettings();
  491.  if (autoscaleDPIflag) getDPIsize(); //Important!!! After loadsettings()
  492.  setupgadget();
  493.  finalsetup(1);
  494.  proctitle.innerText = mainlng[lngID][2];
  495.  oldProcesses = getProcesses();
  496.  try {oldProcesses.sort(SortProcessByID)}
  497.  catch (e){}
  498.  
  499.  //for initialize usage percentage
  500.  try{
  501.   coreCount = 0;
  502.   var CPUcounters = objWMIService.ExecQuery("SELECT Name,PercentProcessorTime,Timestamp_Sys100NS from Win32_PerfRawData_PerfOS_Processor");
  503.   for (var i=0; i<CPUcounters.Count; i++){
  504.    if (CPUcounters.ItemIndex(i).Name.indexOf("_Total") != -1) continue;
  505.    PercentProcessorTimeold[i] = CPUcounters.ItemIndex(i).PercentProcessorTime;
  506.    Timestamp_Sys100NSold[i] = CPUcounters.ItemIndex(i).Timestamp_Sys100NS;
  507.    coreCount++;
  508.   }
  509.  }
  510.  catch (e){
  511.   var errhtml = '<g:background id="background" src="images/background.png">';
  512.   errhtml += '<div id="mainsquare" style="position:absolute"></div>';
  513.   errhtml += '<div style="position:absolute;top:6px;width:100%;text-align:center;font-size:12px;color:#FFFFFF;font-weight:bold">' + mainlng[0][0] + '</div>';
  514.   errhtml += '<div style="position:absolute;top:16px;width:100%"><hr align="center" width="' + tech[0] +'" color="#808080"></div>';
  515.   errhtml += '<div style="position:absolute;top:26px;width:100%;text-align:center"><img src="images/alert.png" style="width:16;height:16" /></div>';
  516.   errhtml += '<div style="position:absolute;top:42px;width:100%;font-size:12px;text-align:center;color:#FF0000;font-weight:bold">' + 'Broken WMI<br>' +
  517.   '<a style="color:#FF0000" href="http://www.myfavoritegadgets.info/counters/BrokenWMI.html" onclick="System.Gadget.close()" target="_blank">Click HERE</a></div>';
  518.   errhtml += '<div id="advertis" style="position:absolute;width:100%;top:78px;left:10px;font-size:10px">' +
  519.   '<a class="ads" style="color:#00CCFF" href="http://www.myfavoritegadgets.info/" target="_blank">© 2012 by Igogo</a></div>';
  520.   errhtml += '<div id="versionnumber" style="position:absolute;font-size:9px;top:78px;left:0px;width:120px;text-align:right;' +
  521.   'color:#C0C0C0">v' + System.Gadget.version + '</div>';
  522.   document.body.innerHTML = errhtml + "</g:background>";
  523.   document.body.style.width = 130;
  524.   background.style.width = 130;
  525.   document.body.style.height = 98;
  526.   background.style.height = 98;
  527.   mainsquare.style.top = 5;
  528.   mainsquare.style.left = 5;
  529.   mainsquare.style.width = 120;
  530.   mainsquare.style.height = 88;
  531.   mainsquare.style.background = "#262526";
  532.   System.Gadget.settingsUI = "";
  533.   return;
  534.  }
  535.  
  536.  timervar = setTimeout("update()", 300);
  537.  autoapdater.innerHTML = ""; //Important;
  538.  updateavailable = false;
  539.  showupdate = false;
  540.  if (autoupdateflag) firstupdatetimer = setTimeout("CheckUpdates()", 5000);
  541. }
  542.  
  543. function setupgadget(){
  544.  //background section
  545.  //fixed bug with 100% width BEFORE set real width in background section
  546.  document.body.style.width = parseInt(130 * size);
  547.  background.style.width = parseInt(130 * size);
  548.  
  549.  gtitle.style.top = parseInt(6 * size);
  550.  gline.style.top = parseInt(16 * size);
  551.  proctitle.style.top = parseInt(26 * size);
  552.  cycleproc.style.top = parseInt(25 * size);
  553.  gadgetbody.style.top = parseInt(36 * size)
  554.  
  555.  //color settings
  556.  gtitle.style.color = cTitle;
  557.  proctitle.style.color = cServStr;
  558.  copyright.style.color = cCopyright;
  559.  versionnumber.style.color = cVersion;
  560.  
  561.  //left section
  562.  proctitle.style.left = parseInt(7 * size); 
  563.  gadgetbody.style.left = parseInt(7 * size);
  564.  advertis.style.left = parseInt(10 * size);
  565.  
  566.  //font-size section
  567.  gtitle.style.fontSize = parseInt(12 * size);
  568.  proctitle.style.fontSize = parseInt(9 * size);
  569.  gadgetbody.style.fontSize = parseInt(9 * size);
  570.  advertis.style.fontSize = parseInt(10 * size);
  571.  versionnumber.style.fontSize = parseInt(9 * size);
  572.  autoapdater.style.fontSize = parseInt(9 * size);
  573.  
  574.  //width section
  575.  versionnumber.style.width = parseInt(120 * size);
  576.  cycleproc.style.width = parseInt(123 * size);
  577.  
  578.  //picture section
  579.  cycleimg.style.width = parseInt(10 * size);
  580.  cycleimg.style.height = parseInt(13 * size);
  581. }
  582.  
  583. function finalsetup(num){
  584.  beginoffset = 26;
  585.  endoffset = 20;
  586.  gtitle.style.visibility = "visible";
  587.  gline.style.visibility = "visible";
  588.  advertis.style.visibility = "visible";
  589.  versionnumber.style.visibility = "visible";
  590.  num++;
  591.  
  592.  var k;
  593.  if (hidetitleflag){
  594.   //title
  595.   gtitle.style.visibility = "hidden";
  596.   gline.style.visibility = "hidden";
  597.   beginoffset = 6;
  598.   proctitle.style.top = parseInt(6 * size);
  599.   cycleproc.style.top = parseInt(5 * size);
  600.   gadgetbody.style.top = parseInt(16 * size)
  601.  }
  602.  
  603.  if (hidecopyrightflag){
  604.   //copyright
  605.   advertis.style.visibility = "hidden";
  606.   versionnumber.style.visibility = "hidden";
  607.   endoffset = 8;
  608.  }
  609.  else{
  610.   advertis.style.top = parseInt((beginoffset + num * 10 + 2) * size);
  611.   versionnumber.style.top = parseInt((beginoffset + num * 10 + 2) * size);
  612.  } 
  613.  
  614.  factheight = beginoffset + num * 10 + endoffset;
  615.  if (autoupdateflag && showupdate){
  616.   autoapdater.style.top = parseInt((factheight - 6) * size);
  617.   factheight += 12;
  618.   autoapdater.style.visibility = "visible";
  619.  }
  620.  else autoapdater.style.visibility = "hidden";
  621.  
  622.  //background section
  623.  document.body.style.height = parseInt(factheight * size);
  624.  background.style.height = parseInt(factheight * size);
  625.  document.body.style.width = parseInt(130 * size);
  626.  background.style.width = parseInt(130 * size);
  627.  if (num <= 20) background.src = "images/background" + num + ".png";
  628.  else if (num < 40) background.src = "images/background23.png";
  629.  else if (num < 76) background.src = "images/background24.png";
  630.  else background.src = "images/background25.png";
  631.  mainsquare.style.top = parseInt(5 * size); 
  632.  mainsquare.style.left = parseInt(5 * size);  
  633.  mainsquare.style.width =  parseInt((130 - 10) * size);
  634.  mainsquare.style.height = parseInt((factheight - 10) * size);
  635.  mainsquare.style.background = cBgColor;
  636. }
  637.  
  638. function update(){
  639.  var result = "";
  640.  var resulttocopy = "";
  641.  var lengthadd = 0;
  642.  try{
  643.   var processes = getProcesses();
  644.   if(!processes) throw "no";
  645.   if (processmode === "CPU"){
  646.    var TopProcessInfo = getTopProcessesByCPU(processes, oldProcesses, numProcesses);
  647.    try{
  648.     var TopProcesses = TopProcessInfo.TopProcesses || [];
  649.     var TotalTime = TopProcessInfo.TotalTime;
  650.     for (var i=0; i<TopProcesses.length; i++){
  651.      var process = TopProcesses[i];
  652.      if (!process || process.ProcessId == null) continue;
  653.      var PercentUsage = Math.round((process.TotalTime / TotalTime) * 10000) / 100;
  654.      var ProcName = process.Name;
  655.      if (ProcName.length > 18) ProcName = ProcName.substr(0,18) + "...";
  656.      var pcolor;
  657.      if (PercentUsage < warninguse) pcolor = cUsedEasy; //easy
  658.      else if (PercentUsage > criticaluse) pcolor = cUsedHard; //hard
  659.      else pcolor = cUsedMedium; //moderate
  660.      resulttocopy += process.Name + " " + PercentUsage + "%\\n";
  661.      result += "<tr style='color:" + pcolor + ";height:" + parseInt(10 * size) + "'><td style='width:" + parseInt(88 * size) + "px'>" +
  662.      "<span style='cursor:help' title='" + process.Name + "\n" + "ID:" + process.ProcessId + mainlng[lngID][3] + process.Priority + mainlng[lngID][4] + process.ThreadCount + "'>" +
  663.      ProcName + "</span></td><td style='text-align:right'>" + PercentUsage.toFixed(1) + "%</td></tr>";
  664.     }//for
  665.    }
  666.    catch (e) {}
  667.    CPUusage = 0;
  668.    var CPUcounters = objWMIService.ExecQuery("SELECT PercentProcessorTime,Timestamp_Sys100NS from Win32_PerfRawData_PerfOS_Processor");
  669.    for (var i=0; i<coreCount; i++){
  670.     PercentProcessorTime[i] = CPUcounters.ItemIndex(i).PercentProcessorTime;
  671.     Timestamp_Sys100NS[i] = CPUcounters.ItemIndex(i).Timestamp_Sys100NS;
  672.     coreUsage = parseInt((1 - (PercentProcessorTime[i] - PercentProcessorTimeold[i])/(Timestamp_Sys100NS[i] - Timestamp_Sys100NSold[i])) * 100);
  673.     if (coreUsage < 0) coreUsage = 0; //Warning! Don't remove this. Percentage can be negative value 
  674.     CPUusage += coreUsage;
  675.     PercentProcessorTimeold[i] = PercentProcessorTime[i];
  676.     Timestamp_Sys100NSold[i] = Timestamp_Sys100NS[i];
  677.    }
  678.    CPUusage = Math.round(CPUusage / coreCount);
  679.    resulttocopy = mainlng[lngID][5] + " " + CPUusage + "%" + "\\n" + resulttocopy;
  680.    proctitle.innerHTML =  "<span onclick='copyText(" + '"' + resulttocopy + '"' + ")' style='cursor:pointer'>" + mainlng[lngID][5] + " " + CPUusage + "%" + "</span>"
  681.    if (!hidetotalflag){
  682.     lengthadd = 1;
  683.     result += "<tr style='height:" + parseInt(10 * size) + "'><td colspan=2>" + GetTotal() + "</td></tr>";
  684.    }
  685.    gadgetbody.innerHTML = "<table style='width:" + parseInt(116 * size) + "px;font-size:" + parseInt(9 * size) + "px'>" + result + "</table>";
  686.    finalsetup(TopProcesses.length + lengthadd);
  687.   }//end if
  688.  else
  689.   if (processmode === "Memory"){
  690.    try {processes.sort(SortProcessesByMemory)}
  691.    catch (e){}
  692.    var TopProcesses = processes.slice(0, numProcesses);
  693.    try{
  694.     for (var i=0; i<TopProcesses.length; i++){
  695.      var process = TopProcesses[i];
  696.      if (!process || process.ProcessId == null) continue;
  697.      var memusage = process.WorkingSetSize;
  698.      var ProcName = process.Name;
  699.      if (ProcName.length > 15) ProcName = ProcName.substr(0,15) + "...";
  700.      var pcolor;
  701.      var memprct = memusage / RAMall * 100;
  702.      if (memprct < warninguse) pcolor = cUsedEasy; //easy
  703.      else if (memprct > criticaluse) pcolor = cUsedHard; //hard
  704.      else pcolor = cUsedMedium; //moderate
  705.      if (!memorypersent){
  706.       result += "<tr style='color:" + cUsedEasy + ";height:" + parseInt(10 * size) + "'><td style='width:" + parseInt(80 * size) + "px'>" +
  707.       "<span style='cursor:help' title='" + process.Name + "\n" + "ID:" + process.ProcessId + mainlng[lngID][3] + process.Priority + mainlng[lngID][4] + process.ThreadCount + "'>" +
  708.       ProcName + "</span></td><td style='text-align:right'>" + formatBytes(memusage) + mainlng[lngID][24] + "</td></tr>";
  709.      }
  710.      else{
  711.       result += "<tr style='color:" + pcolor + ";height:" + parseInt(10 * size) + "'><td style='width:" + parseInt(80 * size) + "px'>" +
  712.       "<span style='cursor:help' title='ID:" + process.ProcessId + mainlng[lngID][3] + process.Priority + mainlng[lngID][4] + process.ThreadCount + "'>" +
  713.       ProcName + "</span></td><td style='text-align:right'>" + memprct.toFixed(1) + "%</td></tr>";
  714.      }  
  715.     }//for
  716.    }
  717.    catch (e) {}
  718.    var getmemory = objWMIService.ExecQuery("SELECT FreePhysicalMemory,TotalVisibleMemorySize FROM Win32_OperatingSystem");
  719.    var RAMalltotal  = getmemory.ItemIndex(0).TotalVisibleMemorySize;
  720.    var RAMfreetotal = getmemory.ItemIndex(0).FreePhysicalMemory;
  721.    var RAMusedtotal = RAMalltotal - RAMfreetotal;
  722.    TotalMemUsage = Math.round(RAMusedtotal / RAMalltotal * 100);
  723.  
  724.    proctitle.innerText = mainlng[lngID][6] + " " + TotalMemUsage + "%";
  725.    if (!hidetotalflag){
  726.     lengthadd = 1;
  727.     result += "<tr style='height:" + parseInt(10 * size) + "'><td colspan=2>" + GetTotal() + "</td></tr>";
  728.    }
  729.    gadgetbody.innerHTML = "<table style='width:" + parseInt(116 * size) + "px;font-size:" + parseInt(9 * size) + "px'>" + result + "</table>";
  730.    finalsetup(TopProcesses.length + lengthadd);
  731.   }//end if
  732.  else
  733.   if (processmode === "IOBytes"){
  734.    var TopProcessInfo = getTopProcessesByIOBytes(processes, oldProcesses, numProcesses);
  735.    try{
  736.     var TopProcesses = TopProcessInfo.TopProcesses || [];
  737.     for(var i=0; i<TopProcesses.length; i++){
  738.      var process = TopProcesses[i];    
  739.      var TotalBytesPerSec = process.TotalBytes / (refreshRate / 1000);
  740.      var ProcName = process.Name;
  741.      if (ProcName.length > 15) ProcName = ProcName.substr(0,15) + "...";
  742.      result += "<tr style='color:" + cUsedEasy + ";height:" + parseInt(10 * size) + "'><td style='width:" + parseInt(70 * size) + "px'>" +
  743.      "<span style='cursor:help' title='" + process.Name + "\n" + "ID:" + process.ProcessId + mainlng[lngID][3] + process.Priority + mainlng[lngID][4] + process.ThreadCount + "'>" +
  744.      ProcName + "</span></td><td style='text-align:right'>" + formatBytes(TotalBytesPerSec) + mainlng[lngID][25] + "</td></tr>";
  745.     }
  746.    }
  747.    catch (e) {}
  748.    proctitle.innerText = mainlng[lngID][7];
  749.    if (!hidetotalflag){
  750.     lengthadd = 1;
  751.     result += "<tr style='height:" + parseInt(10 * size) + "'><td colspan=2>" + GetTotal() + "</td></tr>";
  752.    }
  753.    gadgetbody.innerHTML = "<table style='width:" + parseInt(116*size) + "px;font-size:" + parseInt(9*size) + "px'>" + result + "</table>";
  754.    finalsetup(TopProcesses.length + lengthadd);
  755.   }//end if
  756.  else
  757.   if (processmode === "Read"){
  758.    var TopProcessInfo = getTopProcessesByReadBytes(processes, oldProcesses, numProcesses);
  759.    try{
  760.     var TopProcesses = TopProcessInfo.TopProcesses || [];
  761.     for(var i=0; i<TopProcesses.length; i++){
  762.      var process = TopProcesses[i];    
  763.      var ReadBytesPerSec = process.ReadBytes1 / (refreshRate / 1000);
  764.      var ProcName = process.Name;
  765.      if (ProcName.length > 15) ProcName = ProcName.substr(0,15) + "...";
  766.      result += "<tr style='color:" + cUsedEasy + ";height:" + parseInt(10 * size) + "'><td style='width:" + parseInt(70 * size) + "px'>" +
  767.      "<span style='cursor:help' title='" + process.Name + "\n" + "ID:" + process.ProcessId + mainlng[lngID][3] + process.Priority + mainlng[lngID][4] + process.ThreadCount + "'>" +
  768.      ProcName + "</span></td><td style='text-align:right'>" + formatBytes(ReadBytesPerSec) + mainlng[lngID][25] + "</td></tr>";
  769.     }
  770.    }
  771.    catch (e) {}
  772.    proctitle.innerText = mainlng[lngID][8];
  773.    if (!hidetotalflag){
  774.     lengthadd = 1;
  775.     result += "<tr style='height:" + parseInt(10 * size) + "'><td colspan=2>" + GetTotal() + "</td></tr>";
  776.    }
  777.    gadgetbody.innerHTML = "<table style='width:" + parseInt(116 * size) + "px;font-size:" + parseInt(9 * size) + "px'>" + result + "</table>";
  778.    finalsetup(TopProcesses.length + lengthadd);
  779.   }//end if
  780.  else
  781.   if (processmode === "Write"){
  782.    var TopProcessInfo = getTopProcessesByWriteBytes(processes, oldProcesses, numProcesses);
  783.    try{
  784.     var TopProcesses = TopProcessInfo.TopProcesses || [];
  785.     for(var i=0; i<TopProcesses.length; i++){
  786.      var process = TopProcesses[i];    
  787.      var WriteBytesPerSec = process.WriteBytes1 / (refreshRate / 1000);
  788.      var ProcName = process.Name;
  789.      if (ProcName.length > 15) ProcName = ProcName.substr(0,15) + "...";
  790.      result += "<tr style='color:" + cUsedEasy + ";height:" + parseInt(10 * size) + "'><td style='width:" + parseInt(70 * size) + "px'>" +
  791.      "<span style='cursor:help' title='" + process.Name + "\n" + "ID:" + process.ProcessId + mainlng[lngID][3] + process.Priority + mainlng[lngID][4] + process.ThreadCount + "'>" +
  792.      ProcName + "</span></td><td style='text-align:right'>" + formatBytes(WriteBytesPerSec) + mainlng[lngID][25] + "</td></tr>";
  793.     }
  794.    }
  795.    catch (e) {}
  796.    proctitle.innerText = mainlng[lngID][9];
  797.    if (!hidetotalflag){
  798.     lengthadd = 1;
  799.     result += "<tr style='height:" + parseInt(10 * size) + "'><td colspan=2>" + GetTotal() + "</td></tr>";
  800.    }
  801.    gadgetbody.innerHTML = "<table style='width:" + parseInt(116 * size) + "px;font-size:" + parseInt(9*size) + "px'>" + result + "</table>";
  802.    finalsetup(TopProcesses.length + lengthadd);
  803.   }//end if
  804.  else
  805.   if (processmode === "Page"){
  806.    proctitle.innerText = mainlng[lngID][10];
  807.    var Pageall = parseInt('0', 10);
  808.    var nopagefile;
  809.    var allPage = objWMIService.ExecQuery("SELECT AllocatedBaseSize FROM Win32_PageFileUsage");
  810.    try{
  811.     for(var eItems = new Enumerator(allPage); eItems.atEnd() == false; eItems.moveNext()) 
  812.      Pageall += parseInt(eItems.item().AllocatedBaseSize, 10);
  813.     Pageall *= 1024;
  814.     if (Pageall != 0) nopagefile = false;
  815.     else nopagefile = true;
  816.    }
  817.    catch (err) {nopagefile = true}
  818.  
  819.    if  (!nopagefile){
  820.     try {processes.sort(SortProcessesByPageFileUsage)}
  821.     catch (e){}
  822.     var TopProcesses = processes.slice(0, numProcesses);
  823.     try{
  824.      for (var i=0; i<TopProcesses.length; i++){
  825.       var process = TopProcesses[i];
  826.       if (!process || process.ProcessId == null) continue;
  827.       var pageusage = process.PageFileUsage;
  828.       var ProcName = process.Name;
  829.       if (ProcName.length > 15) ProcName = ProcName.substr(0,15) + "...";
  830.       var pcolor;
  831.       var pageusageprct = pageusage / Pageall * 100;
  832.       if (pageusageprct < warninguse) pcolor = cUsedEasy; //easy
  833.       else if (pageusageprct > criticaluse) pcolor = cUsedHard; //hard
  834.       else pcolor = cUsedMedium; //moderate
  835.      if (!memorypersent){
  836.       result += "<tr style='color:" + cUsedEasy + ";height:" + parseInt(10 * size) + "'><td style='width:" + parseInt(80 * size) + "px'>" +
  837.       "<span style='cursor:help' title='" + process.Name + "\n" + "ID:" + process.ProcessId + mainlng[lngID][3] + process.Priority + mainlng[lngID][4] + process.ThreadCount + "'>" +
  838.       ProcName + "</span></td><td style='text-align:right'>" + formatBytes(pageusage) + mainlng[lngID][24] + "</td></tr>";
  839.      }
  840.      else{
  841.       result += "<tr style='color:" + pcolor + ";height:" + parseInt(10 * size) + "'><td style='width:" + parseInt(80 * size) + "px'>" +
  842.       "<span style='cursor:help' title='" + process.Name + "\n" + "ID:" + process.ProcessId + mainlng[lngID][3] + process.Priority + mainlng[lngID][4] + process.ThreadCount + "'>" +
  843.       ProcName + "</span></td><td style='text-align:right'>" + pageusageprct.toFixed(1) + "%</td></tr>";
  844.      }
  845.      }//for
  846.     }
  847.     catch (e) {}
  848.     if (!hidetotalflag){
  849.      lengthadd = 1;
  850.      result += "<tr style='height:" + parseInt(10 * size) + "'><td colspan=2>" + GetTotal() + "</td></tr>";
  851.     }
  852.     gadgetbody.innerHTML = "<table style='width:" + parseInt(116 * size) + "px;font-size:" + parseInt(9 * size) + "px'>" + result + "</table>";
  853.    finalsetup(TopProcesses.length + lengthadd);
  854.    }//end if !nopagefile
  855.    else{
  856.     gadgetbody.innerHTML = "<span style='color:" + cErrMsg + "'>   PageFile not found</span>";
  857.     finalsetup(1);
  858.    }
  859.   }//end if
  860.  else 
  861.   if (processmode === "Virtual"){
  862.    try {processes.sort(SortProcessesByVirtualSize)}
  863.    catch (e){}
  864.    var TopProcesses = processes.slice(0, numProcesses);
  865.    try{
  866.     for (var i=0; i<TopProcesses.length; i++){
  867.      var process = TopProcesses[i];
  868.      if (!process || process.ProcessId == null) continue;
  869.      var virtusage = process.VirtualSize;
  870.      var ProcName = process.Name;
  871.      if (ProcName.length > 15) ProcName = ProcName.substr(0,15) + "...";
  872.      var pcolor;
  873.      var virtprct = virtusage / VIRall * 100;
  874.      if (virtprct < warninguse) pcolor = cUsedEasy; //easy
  875.      else if (virtprct > criticaluse) pcolor = cUsedHard; //hard
  876.      else pcolor = cUsedMedium; //moderate
  877.      if (!memorypersent){
  878.       result += "<tr style='color:" + cUsedEasy + ";height:" + parseInt(10 * size) + "'><td style='width:" + parseInt(80 * size) + "px'>" +
  879.       "<span style='cursor:help' title='" + process.Name + "\n" + "ID:" + process.ProcessId + mainlng[lngID][3] + process.Priority + mainlng[lngID][4] + process.ThreadCount + "'>" +
  880.       ProcName + "</span></td><td style='text-align:right'>" + formatBytes(virtusage) + mainlng[lngID][24] + "</td></tr>";
  881.      }
  882.      else{
  883.       result += "<tr style='color:" + pcolor + ";height:" + parseInt(10 * size) + "'><td style='width:" + parseInt(80 * size) + "px'>" +
  884.       "<span style='cursor:help' title='" + process.Name + "\n" + "ID:" + process.ProcessId + mainlng[lngID][3] + process.Priority + mainlng[lngID][4] + process.ThreadCount + "'>" +
  885.       ProcName + "</span></td><td style='text-align:right'>" + virtprct.toFixed(1) + "%</td></tr>";
  886.      }
  887.     }//for
  888.    }
  889.    catch (e) {}
  890.    proctitle.innerText = mainlng[lngID][11];
  891.    if (!hidetotalflag){
  892.     lengthadd = 1;
  893.     result += "<tr style='height:" + parseInt(10 * size) + "'><td colspan=2>" + GetTotal() + "</td></tr>";
  894.    }
  895.    gadgetbody.innerHTML = "<table style='width:" + parseInt(116 * size) + "px;font-size:" + parseInt(9 * size) + "px'>" + result + "</table>";
  896.    finalsetup(TopProcesses.length + lengthadd);
  897.   }//end if
  898.  else
  899.   if (processmode === "TRead"){
  900.    getProcessesTotalReadBytes(processes, oldProcesses);
  901.    try{
  902.     var len = twoDimRead.length < numProcesses ? twoDimRead.length : numProcesses;
  903.     for(var i=0; i<len; i++){
  904.      insertionSort(twoDimRead);
  905.      twoDimRead.reverse();
  906.      var ReadTotalBytes = twoDimRead[i][1];
  907.      var ProcName = twoDimRead[i][0];
  908.      if (ProcName.length > 15) ProcName = ProcName.substr(0,15) + "...";
  909.      result += "<tr style='color:" + cUsedEasy + ";height:" + parseInt(10 * size) + "'><td style='width:" + parseInt(80 * size) + "px'>" +
  910.      "<span style='cursor:help' title='" + ProcName + "\n" + "ID:" + twoDimRead[i][2] + mainlng[lngID][3] + twoDimRead[i][3] + mainlng[lngID][4] + twoDimRead[i][4] + "'>" +
  911.      ProcName + "</span></td><td style='text-align:right'>" + formatBytes(ReadTotalBytes) + mainlng[lngID][24] + "</td></tr>";
  912.     }
  913.    }
  914.    catch (e) {}
  915.    proctitle.innerText = mainlng[lngID][12];
  916.    if (!hidetotalflag){
  917.     lengthadd = 1;
  918.     result += "<tr style='height:" + parseInt(10 * size) + "'><td colspan=2>" + GetTotal() + "</td></tr>";
  919.    }
  920.    gadgetbody.innerHTML = "<table style='width:" + parseInt(116 * size) + "px;font-size:" + parseInt(9 * size) + "px'>" + result + "</table>";
  921.    finalsetup(len + lengthadd);
  922.   }//end if
  923.  else
  924.   if (processmode === "TWrite"){
  925.    getProcessesTotalWriteBytes(processes, oldProcesses);
  926.    try{
  927.     var len = twoDimWrite.length < numProcesses ? twoDimWrite.length : numProcesses;
  928.     for(var i=0; i<len; i++){
  929.      insertionSort(twoDimWrite);
  930.      twoDimWrite.reverse();
  931.      var WriteTotalBytes = twoDimWrite[i][1];
  932.      var ProcName = twoDimWrite[i][0];
  933.      if (ProcName.length > 15) ProcName = ProcName.substr(0,15) + "...";
  934.      result += "<tr style='color:" + cUsedEasy + ";height:" + parseInt(10 * size) + "'><td style='width:" + parseInt(80 * size) + "px'>" +
  935.      "<span style='cursor:help' title='" + ProcName + "\n" + "ID:" + twoDimWrite[i][2] + mainlng[lngID][3] + twoDimWrite[i][3] + mainlng[lngID][4] + twoDimWrite[i][4] + "'>" +
  936.      ProcName + "</span></td><td style='text-align:right'>" + formatBytes(WriteTotalBytes) + mainlng[lngID][24] + "</td></tr>";
  937.     }
  938.    }
  939.    catch (e) {}
  940.    proctitle.innerText = mainlng[lngID][13];
  941.    if (!hidetotalflag){
  942.     lengthadd = 1;
  943.     result += "<tr style='height:" + parseInt(10 * size) + "'><td colspan=2>" + GetTotal() + "</td></tr>";
  944.    }
  945.    gadgetbody.innerHTML = "<table style='width:" + parseInt(116 * size) + "px;font-size:" + parseInt(9 * size) + "px'>" + result + "</table>";
  946.    finalsetup(len + lengthadd);
  947.   }//end if
  948.   oldProcesses = processes;
  949.  }
  950.  catch (e){
  951.   proctitle.innerText = mainlng[lngID][14];
  952.   gadgetbody.innerHTML = "<span style='color:" + cErrMsg + "'>" + mainlng[lngID][15] + "</span>";
  953.   finalsetup(1);
  954.  }
  955.  timervar = setTimeout("update()", refreshRate);
  956. }
  957.  
  958. function copyText(texttocopy){
  959.  window.clipboardData.setData('Text',texttocopy);
  960. }
  961.  
  962. function GetTotal(){
  963.  var s;
  964.  try{
  965.   var TProc = objWMIService.ExecQuery("SELECT Processes, Threads FROM Win32_PerfFormattedData_PerfOS_System");
  966.   var TProcesses = (new Enumerator(TProc)).item().Processes;
  967.   var TThreads = (new Enumerator(TProc)).item().Threads;
  968.   s = "<span style='letter-spacing:-0.02em;color:" + cServStr + "'>" + mainlng[lngID][16] + "<span style='color:" + cUsedEasy + "'><strong>" + TThreads +
  969.       "</strong></span>" + mainlng[lngID][17] + "<span style='color:" + cUsedEasy + "'><strong>" + TProcesses + "</strong></span>" + mainlng[lngID][18] + "</span>";
  970.  }
  971.  catch (e){
  972.   s = "";
  973.   hidetotalflag = true;
  974.   System.Gadget.Settings.write ("TotalHide", "true");
  975.  }
  976.  return s;
  977. }
  978.  
  979. function ProcessInfo(ProcessId,Name,KernelModeTime,UserModeTime,WorkingSetSize,ReadBytes,WriteBytes,PageFileUsage,VirtualSize,Priority,ThreadCount){
  980.  this.ProcessId = ProcessId;
  981.  this.Name = Name;
  982.  this.KernelModeTime = parseInt(KernelModeTime);
  983.  this.UserModeTime = parseInt(UserModeTime);
  984.  this.TotalTime = this.KernelModeTime + this.UserModeTime;
  985.  this.WorkingSetSize = parseInt(WorkingSetSize);
  986.  this.ReadBytes = parseInt(ReadBytes);
  987.  this.ReadBytes1 = parseInt(ReadBytes);
  988.  this.WriteBytes = parseInt(WriteBytes);
  989.  this.WriteBytes1 = parseInt(WriteBytes);
  990.  this.TotalBytes = this.ReadBytes + this.WriteBytes;
  991.  this.PageFileUsage = parseInt(PageFileUsage);
  992.  this.VirtualSize = parseInt(VirtualSize);
  993.  this.Priority = Priority;
  994.  this.ThreadCount = ThreadCount;
  995. }
  996.  
  997. function getProcesses(){
  998.  var processes = new Array();
  999.  var ProcessItems = objWMIService.ExecQuery("SELECT ProcessId,Name,KernelModeTime,UserModeTime,WorkingSetSize,ReadTransferCount,WriteTransferCount,PageFileUsage,VirtualSize,Priority,ThreadCount FROM Win32_Process");
  1000.  var ProcessItem  = new Enumerator(ProcessItems);
  1001.  for (; !ProcessItem.atEnd(); ProcessItem.moveNext()){
  1002.   var item = ProcessItem.item();
  1003.   var ProcessId = item.ProcessId;
  1004.   if (!ProcessId && ProcessId !== 0) ProcessId = -1;
  1005.   var Name = item.Name;
  1006.   var KernelModeTime = item.KernelModeTime;
  1007.   var UserModeTime = item.UserModeTime;
  1008.   var WorkingSetSize = item.WorkingSetSize;
  1009.   var ReadBytes = item.ReadTransferCount;
  1010.   var WriteBytes = item.WriteTransferCount;
  1011.   var PageFileUsage = item.PageFileUsage;
  1012.   var VirtualSize = item.VirtualSize;
  1013.   var Priority = item.Priority;
  1014.   var ThreadCount = item.ThreadCount;
  1015.   processes.push(new ProcessInfo(ProcessId,Name,KernelModeTime,UserModeTime,WorkingSetSize,ReadBytes,WriteBytes,PageFileUsage,VirtualSize,Priority,ThreadCount));
  1016.  }
  1017.  return processes;
  1018. }
  1019.  
  1020. function SortProcessByID(a,b) {return a.ProcessId-b.ProcessId}
  1021. function SortProcessesByTotalTime(a,b) {return b.TotalTime-a.TotalTime}
  1022. function SortProcessesByMemory(a,b) {return b.WorkingSetSize-a.WorkingSetSize}
  1023. function SortProcessesByIOBytes(a,b) {return b.TotalBytes-a.TotalBytes}
  1024. function SortProcessesByReadBytes(a,b) {return b.ReadBytes1-a.ReadBytes1}
  1025. function SortProcessesByWriteBytes(a,b) {return b.WriteBytes1-a.WriteBytes1}
  1026. function SortProcessesByPageFileUsage(a,b) {return b.PageFileUsage-a.PageFileUsage}
  1027. function SortProcessesByVirtualSize(a,b) {return b.VirtualSize-a.VirtualSize}
  1028.  
  1029. function getTopProcessesByCPU(processes, oldProcesses, numTop){
  1030.  try{
  1031.   var SystemTotalTime = new Number(0);
  1032.   var TopProcesses = new Array();
  1033.   var oldProcessIndex = 0;
  1034.   for(var i=0; i<processes.length; i++){
  1035.    var process = processes[i];
  1036.    if (!process || process.ProcessId == null || process.TotalTime == null) continue;
  1037.    var oldInfo = FindCorrespondingProcess(process, oldProcesses, oldProcessIndex);
  1038.    oldProcessIndex = oldInfo.newIndex;
  1039.    var oldProcess = oldInfo.oldProcess;
  1040.    if(oldProcess && oldProcess.KernelModeTime != null && oldProcess.UserModeTime != null) process.TotalTime -= (oldProcess.KernelModeTime + oldProcess.UserModeTime);
  1041.    SystemTotalTime += process.TotalTime;
  1042.    // ignore system processes
  1043.    if (process.ProcessId) TopProcesses.push(process);
  1044.   }//for
  1045.   try {TopProcesses.sort(SortProcessesByTotalTime)}
  1046.   catch (e){}
  1047.  return {TopProcesses: TopProcesses.slice(0,numTop), TotalTime: SystemTotalTime};
  1048.  }
  1049.  catch (e){}
  1050. }
  1051.  
  1052. function getTopProcessesByIOBytes(processes, oldProcesses, numTop){
  1053.  try{
  1054.   var TopProcesses = new Array();
  1055.   var oldProcessIndex = 0;
  1056.   for(var i=0; i<processes.length; i++){
  1057.    var process = processes[i];
  1058.    var oldInfo = FindCorrespondingProcess(process, oldProcesses, oldProcessIndex);
  1059.    oldProcessIndex = oldInfo.newIndex;
  1060.    var oldProcess = oldInfo.oldProcess;
  1061.    if(oldProcess != null) process.TotalBytes -= (oldProcess.ReadBytes + oldProcess.WriteBytes);
  1062.    else process.TotalBytes = 0;
  1063.    // ignore system processes
  1064.    if (process.ProcessId) TopProcesses.push(process);
  1065.   }//for
  1066.   try {TopProcesses.sort(SortProcessesByIOBytes)}
  1067.   catch (e){}
  1068.  return {TopProcesses: TopProcesses.slice(0,numTop)};
  1069.  }
  1070.  catch (e){}
  1071. }
  1072.  
  1073. function getTopProcessesByReadBytes(processes, oldProcesses, numTop){
  1074.  try{
  1075.   var TopProcesses = new Array();
  1076.   var oldProcessIndex = 0;
  1077.   for(var i=0; i<processes.length; i++){
  1078.    var process = processes[i];
  1079.    var oldInfo = FindCorrespondingProcess(process, oldProcesses, oldProcessIndex);
  1080.    oldProcessIndex = oldInfo.newIndex;
  1081.    var oldProcess = oldInfo.oldProcess;
  1082.    if(oldProcess != null) process.ReadBytes1 -= oldProcess.ReadBytes;
  1083.    else process.ReadBytes1 = 0;
  1084.    // ignore system processes
  1085.    if (process.ProcessId) TopProcesses.push(process);
  1086.   }//for
  1087.   try {TopProcesses.sort(SortProcessesByReadBytes)}
  1088.   catch (e){}
  1089.  return {TopProcesses: TopProcesses.slice(0,numTop)};
  1090.  }
  1091.  catch (e){}
  1092. }
  1093.  
  1094. function getTopProcessesByWriteBytes(processes, oldProcesses, numTop){
  1095.  try{
  1096.   var TopProcesses = new Array();
  1097.   var oldProcessIndex = 0;
  1098.   for(var i=0; i<processes.length; i++){
  1099.    var process = processes[i];
  1100.    var oldInfo = FindCorrespondingProcess(process, oldProcesses, oldProcessIndex);
  1101.    oldProcessIndex = oldInfo.newIndex;
  1102.    var oldProcess = oldInfo.oldProcess;
  1103.    if(oldProcess != null) process.WriteBytes1 -= oldProcess.WriteBytes;
  1104.    else process.WriteBytes1 = 0;
  1105.    // ignore system processes
  1106.    if (process.ProcessId) TopProcesses.push(process);
  1107.   }//for
  1108.   try {TopProcesses.sort(SortProcessesByWriteBytes)}
  1109.   catch (e){}
  1110.  return {TopProcesses: TopProcesses.slice(0,numTop)};
  1111.  }
  1112.  catch (e){}
  1113. }
  1114.  
  1115. function getProcessesTotalReadBytes(processes, oldProcesses){
  1116.  twoDimRead.length = 0;
  1117.  try{
  1118.   for(var i=0; i<processes.length; i++){
  1119.    var process = processes[i];
  1120.    twoDimRead[i] = new Array()
  1121.    twoDimRead[i][0] = process.Name;
  1122.    twoDimRead[i][1] = process.ReadBytes1;
  1123.    twoDimRead[i][2] = process.ProcessId;
  1124.    twoDimRead[i][3] = process.Priority;
  1125.    twoDimRead[i][4] = process.ThreadCount;
  1126.   }//for
  1127.  }
  1128.  catch (e){}
  1129. }
  1130.  
  1131. function getProcessesTotalWriteBytes(processes, oldProcesses){
  1132.  twoDimWrite.length = 0;
  1133.  try{
  1134.   for(var i=0; i<processes.length; i++){
  1135.    var process = processes[i];
  1136.    twoDimWrite[i] = new Array()
  1137.    twoDimWrite[i][0] = process.Name;
  1138.    twoDimWrite[i][1] = process.WriteBytes1;
  1139.    twoDimWrite[i][2] = process.ProcessId;
  1140.    twoDimWrite[i][3] = process.Priority;
  1141.    twoDimWrite[i][4] = process.ThreadCount;
  1142.   }//for
  1143.  }
  1144.  catch (e){}
  1145. }
  1146.  
  1147. function FindCorrespondingProcess(process, oldProcesses, startIndex){
  1148.  try{
  1149.   var index = startIndex;
  1150.   while (index < oldProcesses.length && oldProcesses[index] && process.ProcessId != oldProcesses[index].ProcessId) {index++}
  1151.   if(index > oldProcesses.length){
  1152.    //we didn't find a new process
  1153.    return {oldProcess: null, newIndex: startIndex};
  1154.   }
  1155.   else{
  1156.    return {oldProcess: oldProcesses[index], newIndex: index+1};
  1157.   }
  1158.  }
  1159.  catch (e) {}
  1160. }
  1161.  
  1162. function fixedDigits(value){
  1163.  if (value >= 10) return value.toFixed(0);
  1164.  else return value.toFixed(1);
  1165. }
  1166.  
  1167. function formatBytes(bytes){
  1168.  if (bytes > 1125899906842624) return fixedDigits(((((bytes / 1024) / 1024) / 1024) / 1024) / 1024) + mainlng[lngID][19];
  1169.  if (bytes > 1099511627776) return fixedDigits(bytes / 1024 / 1024 / 1024 / 1024) + mainlng[lngID][20];
  1170.  if (bytes > 1073741824) return fixedDigits(bytes / 1024 / 1024 / 1024) + mainlng[lngID][21];
  1171.  if (bytes > 1048576) return fixedDigits(bytes / 1024 / 1024) + mainlng[lngID][22];
  1172.  if (bytes > 1024) return fixedDigits(bytes / 1024) + mainlng[lngID][23];
  1173.  return fixedDigits(bytes) + " ";
  1174. }
  1175.  
  1176. function insert(arr,i){
  1177.  var j;
  1178.  var v = arr[i][1];
  1179.  var tmp = arr[i];
  1180.  for (j=i-1; j>=0; j--){
  1181.   if (arr[j][1] <= v) break;
  1182.   arr[j+1] = arr[j];
  1183.  }
  1184.  arr[j+1] = tmp;
  1185. }
  1186.  
  1187. function insertionSort(arr){
  1188.  var i = 1;
  1189.  while (i<arr.length){
  1190.   insert(arr, i);
  1191.   i++;
  1192.  }
  1193. }
  1194.  
  1195. function cycle(){
  1196.  if (!cycleflag) return;
  1197.  clearTimeout(timervar);
  1198.  for (var i=1; i<=numcyclepos; i++){
  1199.   if (caction[cyclepos] != null){
  1200.    processmode = caction[cyclepos];
  1201.    cyclepos++;
  1202.    if (cyclepos>numcyclepos) cyclepos = 1;
  1203.    break;
  1204.   }
  1205.   cyclepos++;
  1206.   if (cyclepos>numcyclepos) cyclepos = 1;
  1207.  }
  1208.  
  1209.  oldProcesses = getProcesses();
  1210.  try {oldProcesses.sort(SortProcessByID)}
  1211.  catch (e){}
  1212.  timervar = setTimeout("update()", 500);
  1213. }
  1214.  
  1215. function runTaskManager(){
  1216.  switch (parseInt(dblclcaction)){
  1217.   case 0:
  1218.    System.Shell.execute("taskmgr.exe");
  1219.    break;
  1220.  
  1221.   case 1:
  1222.    System.Shell.execute("resmon", "/res");
  1223.    break;
  1224.  
  1225.   case 2:
  1226.    System.Shell.execute("perfmon.exe");
  1227.    break;
  1228.  
  1229.   default:
  1230.    return;
  1231.  }
  1232. }