Processing

Launch a program/command (in Windows) from Processing

Hầu như ngôn ngữ lập trình nào cũng hỗ trợ giao tiếp với hệ thống (system interface), hôm nay chúng ta sẽ thực hiện chạy một chương trình từ sketch của Processing.

Khi chúng ta áp dụng cho các ngôn ngữ khác, cấu trúc câu lệnh không thay đổi, chỉ thay đổi function, chẳng hạn: function launch() của Processing, function system() của C và function os.system() của Python,…

  • start – starts a separate Command Prompt window to run a specified program or command. This command opens a new command window and also runs the specified command. If the command is of a GUI application, the application will be launched with out any new command window.

Các tham số của start:

  1. “title” – Specifies the title to display in the Command Prompt window title bar.
  2. {command|program} – Specifies the command or program to start.
  • cmd – starts a new instance of the command interpreter, Cmd.exe (không tạo cửa sổ command mới). If used without parameters, cmd displays the version and copyright information of the operating system.

Các tham số của cmd:

  1. /c – Run Command and then terminate; /k – Run Command and then return to the CMD prompt. This is useful for testing.
  2. {string} – Specifies the command you want to carry out.

Sử dụng start để chạy một chương trình, cmd để thực hiện một command.

Với Processing, ta sử dụng hàm launch(“string command”) để gửi command đến Windows.

Một số lệnh thông dụng

  • Shutdown

“cmd /c shutdown -s -t 0”

  • Restart

“cmd /c shutdown -r -t 0

  • Sleep

“cmd /c rundll32.exe powrprof.dll,SetSuspendState 0,1,0”

Để có thể sleep Windows với dòng lệnh trên, chúng ta cần tắt Hibernate, vào cmd ở chế độ “Run as Administrator“, và dùng lệnh powercfg -hibernate off.

Dưới đây là một ví dụ của việc gửi command-line vào Windows. Ứng dụng này sẽ tự động  đưa Windows vào chế độ SLEEP sau mỗi 30 phút, nhắc nhở chúng ta giải lao và ngăn chặn làm việc khuya.

int newTime, oldTime, delta, breaktime = 30, countdown = 30;
void setup() {
  size(360,240);
  frameRate(1);
  oldTime = hour()*60 + minute();
  textAlign(CENTER, CENTER);
  launch("cmd /c powercfg -hibernate off");
}
void draw() {
  background(255);
  // sleeping 
  if (hour() >= 23 || hour() <= 5) {
    if (countdown == 0) {
      noLoop();
      textSize(100);
      text("Go!", width/2, height/2);
      launch("cmd /c rundll32.exe powrprof.dll,SetSuspendState 0,1,0");
    }
    else {
      textSize(30);
      fill(0,0,255);
      text("Let's sleep!", width/2, 50);
      fill(255,0,0);
      text("Shutdown in " + countdown + "s", width/2, height/2);
      countdown--;
    }
  }
  
  // working
  else {
    newTime = hour()*60 + minute();
    delta = newTime - oldTime;
    if (delta > breaktime) {
      noLoop();
      textSize(100);
      text("Go!", width/2, height/2);
      launch("cmd /c rundll32.exe powrprof.dll,SetSuspendState 0,1,0");
    }
    else {
      if (delta > breaktime-1) {
        textSize(30);
        fill(0,0,255);
        text("Let's take a break!", width/2, 50); 
      }
      textSize(100);
      fill(255*delta/breaktime, 255-255*delta/breaktime, 0);
      text(newTime - oldTime, width/2, height/2);
    }
  }
}

void mousePressed() {
  if (delta > breaktime || countdown == 0) {
    oldTime = newTime = hour()*60 + minute();
    countdown = 30;
    loop();
  }
}

breaktime

Cảm ơn các bạn đã theo dõi bài viết của mình.

Reference:
[1] Cmd | Command-Line Reference.
[2] Start | Command-Line Reference.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s