home *** CD-ROM | disk | FTP | other *** search
/ PC World 2004 April / PCWorld_2004-04_cd.bin / software / temacd / remotany / RemotelyAnywhere.msi / Processes.sma < prev    next >
Text File  |  2003-08-19  |  5KB  |  183 lines

  1. ////////////////////////////////////////////////////////////////////////////////
  2. //                                                                            //
  3. // RemotelyAnywhere Sample 'SMALL' Scripts                                    //
  4. //                                                                            //
  5. // RemotelyAnywhere provides a mechanism for scripting via a built-in         //
  6. // language. The language is called Small, and more information about         //
  7. // it can be found at http://compuphase.com/small.htm.                        //
  8. //                                                                            //
  9. // Before you use these sample scripts, you should tailor their               //
  10. // behavior to better suit your configuration and your needs.                 //
  11. //                                                                            //
  12. // THIS SOFTWARE IS PROVIDED BY 3AM LABS LTD ``AS IS'' AND                    //
  13. // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE      //
  14. // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE //
  15. // ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE    //
  16. // FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL //
  17. // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS    //
  18. // OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)      //
  19. // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT //
  20. // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY  //
  21. // OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF     //
  22. // SUCH DAMAGE.                                                               //
  23. //                                                                            //
  24. ////////////////////////////////////////////////////////////////////////////////
  25.  
  26. #include <ra>
  27.  
  28. public main()
  29. {
  30.     new pid, name[64], cpu, mem;
  31.  
  32.     htmlBeginOutput("Processes");
  33.  
  34.     //
  35.     // Check whether process enumeration was successful
  36.     //
  37.  
  38.     if (raEnumProcs()) {
  39.         htmlBeginTable("PID", "Name", "CPU", "Memory");
  40.  
  41.         //
  42.         // Loop through each process
  43.         //
  44.  
  45.         new num=raGetProcessNum();
  46.         for (new i=0; i<num; i++) {
  47.             new tmp[20];
  48.  
  49.             raGetProcess(i, pid, name, cpu, mem);
  50.  
  51.             //
  52.             // Format process information
  53.             //
  54.  
  55.             htmlBeginTableRow();
  56.  
  57.             sprintf(tmp, "%d", pid);
  58.             htmlTableCell(tmp);
  59.  
  60.             //
  61.             // Show process name as a link to a callback "callb"
  62.             // and pass the "tokill" parameter with the PID
  63.             //
  64.  
  65.             htmlBeginTableCell();
  66.             htmlCBLink(name, "callb", "tokill", tmp);
  67.             htmlEndTableCell();
  68.  
  69.             sprintf(tmp, "%d", cpu);
  70.             htmlTableCell(tmp);
  71.  
  72.             sprintf(tmp, "%d", mem);
  73.             htmlTableCell(tmp);
  74.  
  75.             htmlEndTableRow();
  76.         }
  77.  
  78.         htmlEndTable();
  79.         raEnumProcsClose();
  80.     } else {
  81.         htmlWrite("Failed to show process list<BR>");
  82.     }
  83.  
  84.     //
  85.     // Show the input form to execute a process
  86.     //
  87.  
  88.     htmlBeginForm();
  89.  
  90.     // Show an edit field named "cmd"
  91.     htmlEdit("cmd", "dir c:\\");
  92.  
  93.     // Show a button to call the "exec" function
  94.     htmlButton("Execute", "exec");
  95.  
  96.     // Show a button to go back to the Scripts page
  97.     htmlButtonBack("Back", false);
  98.  
  99.     htmlEndForm();
  100.  
  101.     htmlEndOutput();
  102. }
  103.  
  104. //
  105. // Callback function to kill a process
  106. //
  107.  
  108. public callb()
  109. {
  110.     htmlBeginOutput("Kill process");
  111.  
  112.     new buf[256]="", buf2[256];
  113.  
  114.     //
  115.     // Get the "tokill" parameter: the PID of the process to be killed
  116.     //
  117.  
  118.     htmlGetParam("tokill", buf);
  119.  
  120.     if (raKillProcess(atoi(buf)))
  121.         sprintf(buf2, "Process with pid %s has been killed<BR><BR>", buf);
  122.     else
  123.         sprintf(buf2, "Can't kill process with pid %s<BR><BR>", buf);
  124.  
  125.     htmlBeginForm();
  126.     htmlBeginDialog("Result");
  127.     htmlWrite(buf2);
  128.     htmlButton("Back", "main");
  129.     htmlWrite("<BR><BR>");
  130.     htmlEndDialog();
  131.     htmlEndForm();
  132.  
  133.     htmlEndOutput();
  134. }
  135.  
  136. //
  137. // Callback function to execute a command
  138. //
  139.  
  140. public exec()
  141. {
  142.     new cmd[256], out[1024];
  143.  
  144.     htmlBeginOutput("Execute command");
  145.  
  146.     //
  147.     // Get the "cmd" parameter: the command to be executed
  148.     //
  149.  
  150.     if (htmlGetParam("cmd", cmd)) {
  151.  
  152.         //
  153.         // Execute "cmd", load its output to "out"
  154.         //
  155.  
  156.         if (raExecuteCmd(cmd, out, 1024, 10000)) {
  157.             new msg[128];
  158.  
  159.             sprintf(msg, "\"%s\" returned:<BR><PRE></CENTER>", cmd);
  160.             htmlWrite(msg);
  161.  
  162.             // The output need to be converted to html format
  163.             // so we pass "true" in the htmlize parameter
  164.             htmlWrite(out, true);
  165.  
  166.             htmlWrite("</PRE><CENTER><BR><BR>");
  167.         } else {
  168.             sprintf(out, "Failed to execute \"%s\"<BR><BR>", cmd);
  169.             htmlWrite(out);
  170.         }
  171.     }
  172.  
  173.     //
  174.     // Show back button
  175.     //
  176.  
  177.     htmlBeginForm();
  178.     htmlButton("Back", "main");
  179.     htmlEndForm();
  180.  
  181.     htmlEndOutput();
  182. }
  183.