windowId = $id; $this->readWindowInfo(); } private function readWindowInfo() { exec("xwininfo -id {$this->windowId} -all -children", $output, $status); foreach ($output as $line) { if (preg_match('/^(.+?): (.+?)$/', trim($line), $match)) { switch ($match[1]) { case 'xwininfo': if (preg_match('/Window id: .+? "(.+?)"/', $match[2], $m)) { $this->windowTitle = $m[1]; } break; case 'Map State': $this->isVisible = ($match[2]=='IsViewable'); break; default: //printf("[%s]->'%s'\n", $match[1], $match[2]); } } } //printf("---\n"); } public function getId() { return hexdec($this->windowId); } public function isVisible() { return $this->isVisible; } public function getWindowTitle() { return $this->windowTitle; } public function sendKeys($keys, $forceFocus=false) { if ($forceFocus) { $this->focus(); $cmdl = sprintf("xdotool key %s", $keys); } else { $cmdl = sprintf("xdotool key --delay 100 --window %d %s", $this->windowId, $keys); } echo "$ {$cmdl}\n"; exec($cmdl); return $this; } public function focus() { $cmdl = sprintf("xdotool windowfocus %d", $this->windowId); echo "$ {$cmdl}\n"; exec($cmdl); return $this; } public function activate() { $cmdl = sprintf("xdotool windowactivate %d", $this->windowId); echo "$ {$cmdl}\n"; exec($cmdl); return $this; } public function dump() { printf("Window: (id=0x%08x)\n Title: %s\n Visible: %s\n", $this->windowId, $this->windowTitle, $this->isVisible?'true':'false' ); } }