Skip to content

Commit

Permalink
JPPM package
Browse files Browse the repository at this point in the history
  • Loading branch information
TsSaltan committed Jul 23, 2019
1 parent 1c72592 commit 81832d2
Show file tree
Hide file tree
Showing 28 changed files with 3,934 additions and 15 deletions.
28 changes: 13 additions & 15 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,15 +1,13 @@
build/
bundle/
.idea
.gradle/
gradle/
gradlew
gradlew.*


*.phpintel

package.hub.yml
package-lock.php.yml
vendor/*

/build/
/bundle/
/.idea
/.gradle/
/gradle/
/gradlew
/gradlew.*

/*.phpintel

/package.hub.yml
/package-lock.php.yml
/vendor/*
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
15 changes: 15 additions & 0 deletions src-bundle/develnext/bundle/windows/WindowsBundle.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?php
namespace develnext\bundle\windows;

use ide\bundle\AbstractBundle;
use ide\bundle\AbstractJarBundle;
use ide\project\behaviours\GuiFrameworkProjectBehaviour;
use ide\project\Project;

/**
* Class WindowsBundle
*/
class WindowsBundle extends AbstractJarBundle
{

}
10 changes: 10 additions & 0 deletions src-bundle/develnext/bundle/windows/description.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<ul>
<li><code>bundle\windows\COM</code> <i>(работа с COM портами)</i></li>
<li><code>bundle\windows\Registry</code> <i>(работа с реестром)</i></li>
<li><code>bundle\windows\Startup</code> <i>(работа с автозапуском)</i></li>
<li><code>bundle\windows\Task</code> <i>(работа с процессами)</i></li>
<li><code>bundle\windows\Windows</code> <i>(основные функции)</i></li>
<li><code>bundle\windows\WindowsScriptHost</code> <i>(взаимодействие со скриптами Windows)</i></li>
<li><code>bundle\windows\Wlan</code> <i>(работа с беспроводными сетями)</i></li>
</ul>
<b><a href="https://github.com/TsSaltan/DevelNext-Windows/wiki">Документация (Wiki)</a></b>
74 changes: 74 additions & 0 deletions src/bundle/windows/COM.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
<?php
namespace bundle\windows;

use bundle\windows\result\comItem;
use bundle\windows\WindowsScriptHost as WSH;
use php\util\Regex;

/**
* Класс для работы с COM-портами
* @packages windows
*/
class COM
{
/**
* --RU--
* Получить список портов
* @return comItem[]
*/
public static function getList(){
$com = [];
$reg = Registry::of('HKEY_LOCAL_MACHINE\Hardware\DeviceMap\SerialComm')->readFully();
foreach($reg as $r){
foreach($r as $v){
$com[$v->value] = new comItem($v->value, array_merge(self::getParams($v->value), ['path' => $v->key]));
}
}

return $com;
}

/**
* --RU--
* Получить список параметров порта
* @param string $port Имя порта (от COM1 до COM255)
* @return array
*/
public static function getParams($port){
$r = WSH::WMIC('path Win32_PnPEntity WHERE "Caption like \'%' . $port . '%\'" get');
return isset($r[0]) ? $r[0] : [];
}

/**
* --RU--
* Ищет устройство по имени
* @param string $search Строка поиска
* @param array $searchFields=['Caption','Description','Name','Service'] Поля, по ктоторым осуществляется поиск
* @return comItem[]
*/
public static function searchDevice($search, $searchFields = ['Caption', 'Description', 'Name', 'Service']){
$searchCOM = ['Caption', 'Name']; // Поля, в которых фигурирует номер COM порта

// Формирование SQL запроса
$searchQuery = [];
foreach($searchFields as $field){
$searchQuery[] = $field . ' like \'%' . $search . '%\'';
}
$search = implode(' OR ', $searchQuery);
$r = WSH::WMIC('path Win32_PnPEntity WHERE "'.$search.'" get');

$ports = [];
foreach ($r as $v) {
$string = ''; // Делаем конкатенацию полей, где может фигурировать номер COM порта
foreach ($searchCOM as $field){
$string .= $v[$field];
}
$regex = Regex::of('(COM[0-9]+)', Regex::CASE_INSENSITIVE + Regex::UNICODE_CASE)->with($string);
if ($regex->find()){ // Если удалось определить номер com порта
$ports[$regex->group(1)] = new comItem($regex->group(1), $v);
}
}

return $ports;
}
}
93 changes: 93 additions & 0 deletions src/bundle/windows/Lan.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
<?php
namespace bundle\windows;


use bundle\windows\WindowsScriptHost as WSH;
use bundle\windows\Windows;
use php\lib\str;
use php\util\Regex;
use bundle\windows\result\lanAdapter;
use php\util\Scanner;

/**
* Local Area Network
* @packages windows
*/
class Lan
{
/**
* Получить список адаптеров
* @return array
*/
public static function getAdapters() : array {
$adapters = [];
$adaptersObj = [];
$adapterName = false;

// ipconfig возвращает в 866, независимо от указанной кодировки
$cmd = WSH::cmd('ipconfig /all', [], 'utf-8', 'cp866');
$nic = WSH::WMIC('nic get');

$scanner = (new Scanner($cmd))->useDelimiter(Regex::of('\n', Regex::MULTILINE));
while($scanner->hasNextLine()){
$scanner->next();
$line = $scanner->current();

$regAdapter = Regex::of('Ethernet adapter ([^\n\r]+):', Regex::MULTILINE)->with($line);
if($regAdapter->find()){
$adapterName = $regAdapter->group(1);
} elseif($adapterName != false){
$regParam = Regex::of('\s+([^\.]+)[\.\s]+:([^\n]+)', Regex::MULTILINE)->with($line);
if($regParam->find()){
$key = trim($regParam->group(1));
if(isset($adapters[$adapterName][$key])) $adapterName = false;
else $adapters[$adapterName][$key] = trim($regParam->group(2));
}
}
}

foreach($nic as $k => $v){
if(!isset($v['NetConnectionID'])) continue;
if(!isset($adapters[$v['NetConnectionID']])){
$adapters[$v['NetConnectionID']] = [
'Description' => $v['Description'],
'Physical Address' => $v['MACAddress'],
];
}

$adapters[$v['NetConnectionID']]['Speed'] = $v['Speed'] ?? 0;
$adapters[$v['NetConnectionID']]['Manufacturer'] = $v['Manufacturer'] ?? '';
$adapters[$v['NetConnectionID']]['Manufacturer'] = $v['Manufacturer'] ?? '';
$adapters[$v['NetConnectionID']]['NetEnabled'] = isset($v['NetEnabled']) && $v['NetEnabled'] == 'TRUE';
}

foreach ($adapters as $name => $params) {
$adaptersObj[] = new lanAdapter($name, $params);
}
return $adaptersObj;
}

/**
* Получить используемый по умолчанию адаптер
* @return lanAdapter
*/
public static function getActiveAdapter() : lanAdapter {
$adapters = self::getAdapters();
foreach ($adapters as $adapter) {
if($adapter->isActive()){
return $adapter;
}
}

return null;
}

/**
* Есть ли оборудование для работы с проводными сетями
* @return boolean
*/
public static function isSupported() : bool {
return sizeof(self::getAdapters()) > 0;
}

}
Loading

0 comments on commit 81832d2

Please sign in to comment.