php-x11/src/Window.php

98 lines
2.3 KiB
PHP

<?php
namespace NoccyLabs\X11;
class Window
{
protected $windowId;
protected $windowTitle;
protected $isVisible;
public function __construct($id=null)
{
if (!$id) { $id = (int)exec("xdotool getactivewindow"); }
$this->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'
);
}
}