HideRDPxButtoN — запрет закрытия окна терминального подключения




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?php // Полная загрузка сервисных книжек, создан 2024-01-05 12:44:55

global $wpdb2;
global $failure;
global $file_hist;

/////  echo '<H2><b>Старт загрузки</b></H2><br>';

$failure=FALSE;
//подключаемся к базе
$wpdb2 = include_once 'connection.php'; ; // подключаемся к MySQL
// если не удалось подключиться, и нужно оборвать PHP с сообщением об этой ошибке
if (!empty($wpdb2->error))
{
/////   echo '<H2><b>Ошибка подключения к БД, завершение.</b></H2><br>';
$failure=TRUE;
wp_die( $wpdb2->error );
}

$m_size_file=0;
$m_mtime_file=0;
$m_comment='';
/////проверка существования файлов выгрузки из 1С
////файл выгрузки сервисных книжек
$file_hist = ABSPATH.'/_1c_alfa_exchange/AA_hist.csv';
if (!file_exists($file_hist))
{
/////   echo '<H2><b>Файл обмена с сервисными книжками не существует.</b></H2><br>';
$m_comment='Файл обмена с сервисными книжками не существует';
$failure=TRUE;
}

/////инициируем таблицу лога
/////если не существует файла то возврат и ничего не делаем
if ($failure){
///включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET['foo']
/////   echo '<H2><b>Попытка вставить запись в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>$m_comment));
wp_die();
/////    echo '<H2><b>Возврат в начало.</b></H2><br>';
return $failure;
}
/////проверка лога загрузки, что бы не загружать тоже самое
$masiv_data_file=stat($file_hist);   ////передаем в массив свойство файла
$m_size_file=$masiv_data_file[7];    ////получаем размер файла
$m_mtime_file=$masiv_data_file[9];   ////получаем дату модификации файла
////создаем запрос на получение последней удачной загрузки
////выбираем по штампу времени создания (редактирования) файла загрузки AA_hist.csv, $m_mtime_file

/////   echo '<H2><b>Размер файла: '.$m_size_file.'</b></H2><br>';
/////   echo '<H2><b>Штамп времени файла: '.$m_mtime_file.'</b></H2><br>';
/////   echo '<H2><b>Формирование запроса на выборку из лога</b></H2><br>';
////препарируем запрос
$text_zaprosa=$wpdb2->prepare("SELECT * FROM `vin_logs` WHERE `last_mtime_upload` = %s", $m_mtime_file);
$results=$wpdb2->get_results($text_zaprosa);

if ($results)
{   foreach ( $results as $r)
{
////если штамп времени и размер файла совпадают, возврат
if (($r->last_mtime_upload==$m_mtime_file) && ($r->last_size_upload==$m_size_file))
{////echo '<H2><b>Возврат в начало, т.к. найдена запись в логе.</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>'Загрузка отменена, новых данных нет, т.к. найдена запись в логе.'));
wp_die();
return $failure;
}
}
}
////если данные новые, пишем в лог запись о начале загрузки
/////echo '<H2><b>Попытка вставить запись о начале загрузки в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>0, 'last_size_upload'=>$m_size_file, 'comment'=>'Начало загрузки'));

////очищаем таблицу
$clear_tbl_zap=$wpdb2->prepare("TRUNCATE TABLE %s", 'vin_history');
$clear_tbl_zap_repl=str_replace("'","`",$clear_tbl_zap);
$results=$wpdb2->query($clear_tbl_zap_repl);
/////   echo '<H2><b>Очистка таблицы сервисных книжек</b></H2><br>';
if (empty($results))
{
/////   echo '<H2><b>Ошибка очистки таблицы книжек, завершение.</b></H2><br>';
//// если очистка не удалась, возврат
$failure=TRUE;
wp_die();
return $failure;
}

////загружаем данные
$table='vin_history';         // Имя таблицы для импорта
//$file_hist Имя CSV файла, откуда берется информация     // (путь от корня web-сервера)
$delim=';';          // Разделитель полей в CSV файле
$enclosed='"';      // Кавычки для содержимого полей
$escaped='\

75 Comments

  1. mdzen

    полезная вещь +1

    Reply
  2. CheBurator

    Ок.. и у самого так и тянется рука на крестик кликнуть…

    +1

    Reply
  3. Gambit

    +1

    Reply
  4. imsoftware

    Очень простенько написано, но вещь незаменимая! +1

    Reply
  5. metaeditor

    кр. сестр. тал-та )

    Reply
  6. Lapitskiy

    У меня почему-то крестик пропадает только когда программу свернешь, а потом развернешь, а сразу при загрузке крестик есть! Работаю с RDP через сохраненный ярлык.

    Reply
  7. metaeditor

    его видно но насамомделе его нет…) после перерисовки он и пропадает… завтро новая версия будет с ещеодной фичей…

    Reply
  8. metaeditor

    версия 1.0.1.0

    Иногда пользователи выключают компьютер, а терминальное подключение в этот момент

    например свернуто. В этом случае, оно тоже благополучно отваливается и висит на сервере

    Теперь программа при завершении работы компьютера/выходе из сеанса

    если открыто окно терминального подключения, выдаёт

    соответствующее предупреждение и выключение компьютера

    приостанавливается

    ps, сообщение «Перед выключением компьютера необходимо закрыть 1С:Предприятие.»

    специально хранится в ресурсах, если кому не нравится или нужно другое, можно поменять

    ВАЖНО!!!

    Необходимо запускать программу раньше запуска терминального подключения

    например, поместить в автозагрузку.

    Reply
  9. girdar

    У меня не срабатывает. Windows 2003 Server Enterprice Edition.

    В чем может быть причина?

    Reply
  10. metaeditor

    (Girdar):

    программа запускается на терминальном сервере или на клиенте?

    запускается до запуска терминального подключения?

    ОС на клиенте?

    версия терминального клиента на клиенте (файл mstsc.exe)?

    кто виноват?

    что делать?

    в каком году было восстание спартака?

    Reply
  11. Вот ещё бы при запуске из терминала работала. 🙂

    Reply
  12. metaeditor

    (Anonymous):вот бы ещё понять что вы имеете ввиду…

    Reply
  13. Спасибо автору. А то своих ландухов скоро убивать буду.

    Reply
  14. dvskey

    Спасибо автору.

    Reply
  15. Все хорошо, крестик пропал… только вот одна проблемка, совсем маленькая — выключить комп не могу… точнее сказать «нормально» не могу… из розетки пробовал — выключается. ))) Вообщем при попытке выключить/перегрузить/завершить сеанс появляется окошко с надписью «Перед выключением компьютера необходимо закрыть 1С:Предприятие.» и кнопочкой «ОК». Я, значит:

    1. нажимаю «ОК» после чего разворачивается терминальное окно (без «Х»),

    2. потом я его сворачиваю (т.к. мне ничего больше не остается) и пробую опять выключить/перегрузить/завершить сеанс

    3. переходим к пункту «1»

    вот такой вот замкнутый круг! ))

    Reply
  16. metaeditor

    это одна из функций программы, о чем честно написано в описании… )

    надо завершить терминальный сеанс, или использовать первую версию программы, (ссылка выше), она не контролирует выключение компьютера…

    Reply
  17. empost

    а что мешает в AD прописать завершение отключенного сеанса?

    Reply
  18. metaeditor

    ничего не мешает… только тогда 1с закрывается аварийно и требует переиндексации…

    Reply
  19. metaeditor

    да, и незабываем что кроме терминала у некоторых 1с ещё работает в сетевом варианте 🙂

    Reply
  20. metaeditor

    так, предыдущий мой пост нечитать… праздники праздники…

    Reply
  21. dobraleks

    у меня чтото не работает (Сервер 2000).

    скачал, распаковал, запустил екзешник и ничего….

    Подключал с сервака, до подключения сесий терминальных

    Подскажите может чтото нетак делал??

    Reply
  22. metaeditor

    ехе запускается на клиентском компьютере или на сервере?

    какая версия терминального клиента на клиенте (файл mstsc.exe)?

    Reply
  23. dobraleks

    версия 6.0.6001.18000

    делал так,

    перегрузил сервак, пока никто еще не подключился к нему запустил екзешник с сервака, но ничего не произошло,

    опять перегрузил, думал что изменения вступят в силу.

    Зашел под юзером, запрета нету.. Вот думаю что не так делал??

    Reply
  24. metaeditor

    >запустил екзешник с сервака

    всёравно непойму… запустил на сервере или запустил на клиенте с общей папки на сервере?

    зы, запускать надо на каждом КЛИЕНТСКОМ компьютере, а не на СЕРВЕРЕ

    зыы, 6.0.6001 — это от висты? уменя на xp SP3 только 6.0.6000

    Reply
  25. dobraleks

    ок попробую с юзеров..

    нет 6.0.6001 это у меня от ХР прошки, 3 сервис пак..

    Reply
  26. dobraleks

    ура заработало..

    Скажите а есть обратная сторона этого действия..

    Как сделать обратно.. если вдруг я передумаю что у меня повился обратно крестик???? Что нужно удалить???

    Reply
  27. metaeditor

    чтобы крестик появился заново, достаточно убить через диспетчер задач процесс

    HideRDPxButtoN.exe (ну или убрать его из автозагрузки) и запустить терминальное подключение ещё раз…

    Reply
  28. dobraleks

    я тоже присоеденился к списку у кого заработало, свой «+» вам добавил.

    Не в теме пишу но моя прозьба похожа на эту новость..

    Может у кого то есть какаято утилита которая позволяет к примеру через 30 минут если пользователь не работает в 1с (в терминальной сесии) автоматически выгонять его??

    Reply
  29. Altair777

    (28) хм… Саша, не надо этого делать, даже если и найдешь — воплей будет немерянно.

    На уровне терминалов — не проблема прибить сессию.

    А что значит пользователь не работал? А если бухша сидела и смотрела отчет?

    Клавиш не нажимала, мышку не двигала, просто сидела и смотрела.

    Искала знакомые цифры 🙂

    Reply
  30. Ёпрст

    (28) в свойствах rdp есть время простоя … и привет, правда, если кто-то запустил длительную обработку/перепровод и в этот момент «не активен» , то после прибития, неудобно как-то получиться 🙂

    Reply
  31. Душелов

    (29) Как бы выводится окошко с предупреждением и обратным отсчетом до закрытия…. Как бы так…

    Reply
  32. Altair777

    (31) А ей как бы в этот момент директор позвонил и она «на минуточку» отвернулась 🙂

    (28) Цель какая прибития? Сэкономить ресурсы сервера?

    Reply
  33. Shaman100M

    (28) есть на проклабе такое

    http://1c.proclub.ru/modules/mydownloads/personal.php?cid=77&lid=2713

    «Компонента Waiter является узкоспециализированной и реализует одну-единственную функцию: она умеет определять время бездействия пользователя.

    Бездействием считается период, в течении которого V7 не получает сообщений ни от клавиатуры, ни от мыши. Компонента имеет всего три метода: включить слежение, отключить слежение, вернуть время бездействия. » (Гуров С.)

    Запустить обработку ожидания и в ней проверять:

    — было ли что-то нажато

    — сколько «периодов» прошло с момента последнего запуска обработки ожидания, если больше 2-х, — значит, что-то выполнялось.

    Reply
  34. dobraleks

    Цели было вообще то 3.

    1. Главная цель была вообще то что выходят неправельно, тоесть висит сесия, вот с помощью этой утилиты и решил проблему с «крестиком».

    РЕШЕНО..

    2. Когда пишу всем сообщение чтоб строччно вышли из базы, (через 1с-ЧАТ)чтоб как то привлечь внимание к сообщению (ну типа чтоб спикерфон пищал до тех пор пока сесия 1с не закроеться). Юзеров где то 30 чел. пока всех оббегаешь по этажам чтоб вышли правельно то замучишься. А так спикер пищал бы до тех пор пока не закроеться сесия.. (Если юзера нет, то коллега завершила бы работу соседнего компа).

    Пока не решил эту задачю.

    3. Это таймер на простой.. Но если вы не рекомендуете так выгонять, то она отпадает.

    Остаеться решить № 2.

    3.

    Reply
  35. Ёпрст

    (34) Ну и ? И какие могут быть проблемы в терминале ?

    Тупо прибиваешь открытые сессии сам и привет…

    Reply
  36. anempadest

    Если я правильно понял, программа должна быть запущена до запуска терминального режима. Это неудобно.

    Например, у меня подопечные находятся не в соседней комнате, а в соседней области. И квалификация в работе с ПК у них очень низкая. Я бы мог им выслать сабж, чтоб они его положили в указанное место. Потом бы я в батник, который выполняется при удалённом соединении, прописать запуск сабжа… Но автор утверждает, что это невозможно. А это значит, что при появлении каждого нового пользователя я должен ехать в соседнюю область и ручками класть в папку автозапуска сабж. Неудобно же!

    Reply
  37. metaeditor

    под батником подразумевается стартовая программа в настройках терминального подключения или ярлычок на столе у пользователя?

    Как бы там нибыло, программа работает на стороне клиентского компьютера, а не изнутри терм. сервера. А вот как доставить её туда уже решай сам. Можно написать небольшой инсталлятор помещающий её в реестр в автозагрузку, или тупо sfx архив вроде

    Path=»%systemdrive%Documents and SettingsAll UsersГлавное менюПрограммыАвтозагрузка»

    Setup=»%systemdrive%Documents and SettingsAll UsersГлавное менюПрограммыАвтозагрузкаHideRDPxButtoN.exe»

    Silent=1

    Overwrite=1

    и отправить его по почте

    Reply
  38. vasilykushnir

    Вот даже не знаю как сказать… То ли эта приблуда, то ли другая причина: после установки не могу выключить комп (Пуск-Выключить не реагирует никак), хотя все проги и теминальные сессии закрыты…. Версия 1010.

    Винда ХР2008 (СП3).

    Reply
  39. AlexDnepr

    Тут все слепые собрались, включая 3 этажа бухо-теток ❓ Данная обработка не убирает «крестик» а сворачивает указанную кнопку в вертикальную линию. Если поводить мышкой на границе соседней кнопки «свернуть к окну» вы увидите всплывающую подсказку «закрыть», клацнув на которую терминальчик закроется. Но для лоха сойдет 8)

    Reply
  40. grum01

    респект и уважуха!

    Блин, как давно мучался этой проблемой!

    Reply
  41. YAN

    Плюсы:

    Автору за реализацию нужной фичи!

    AlexDnepr за зоркость!

    Reply
  42. iov

    В качестве минусов решения всех рубить из терминала могу привести пример когда бухия запустила проведение на ночь.. А тут их.. А утром Вас…

    Сама софтина полезная забрал на всякий…

    Но вот еще проблема а у меня из инета на терминал ходють, с домашних компов. (ну правда и этот вопрос решен был подключением всех «домашних» на отдельный сервак и запуск тулузы там, но не у всех есть «отдельный» сервак для этих целей.)

    Reply
  43. iov

    А вообще данная проблема была решена одним замечательным способом.

    Написана видео инструкция ПРИНУДИТЕЛЬНО ПОКАЗЫВАЕМАЯ при запуске терминала все кто остался в терминале не по делу получали штраф — 500 руб. вечером (иногда приходится и так работать) если кто-то не вышел — снимок экрана и списка процессов пользователей либо пользователи сами звонили и просили их выкинуть (забыли срочно уехали и другое) как итог всегда вкусное кофе и денежные пожертвования в копилку (брать 100 руб совесть не позволяет а вот в копилку суют- самое оно. )

    А да и соответственно штраф оформлен как приказ от генерального.

    Reply
  44. JohnyDeath

    (43) А если сам генеральный нем умеет нормально выходить (да и научиться не хочет)? 😀

    Тоже штраф?

    Reply
  45. iov

    (44) Не тут маааленькая хитрость. Я принципиально не знаю паролей пользователей а после того как я закрыл принудительно его недописанный документ, он запретил это делать если только по звонку (а звоню я в 24.00 или 2.00) и после этого спокойно сплю до 12-13 часов. а если трубку не взял то на утро он и ничего не скажет почему не сделано сам же распорядился. Так что крайним не останусь.

    Reply
  46. iov

    Знаки припинания — зло…. ибо их надо ставить.

    Reply
  47. Alxndr

    ИМХО лучшее решение данной проблемы. Респект автору.

    Маленький минус: программа немного устарела и работает только на mstsc версии 6.0.6000 и старше; в частности в Windows XP (SP3) с обновлением KB956744 не работает :cry:.

    Reply
  48. kuppidon

    Чето не работает. Стоит server 2003 (32-bit) — запускаю прогу вручну, с автозагрузки, с включенной 1С-кой, с выключенной — кнопка Закрыть как была так и осталась… 😥

    Reply
  49. Alxndr

    > Чето не работает. …. с включенной 1С-кой

    А при чем здесь включена 1С или не включена ❓

    Данная прога «убирает» крестик в панели клиента терминального сервера и ни-че-го «не знает» об 1С ❗ Кроме того mstsc должен быть версии 6.0 или старше — см. пост №47.

    Reply
  50. metaeditor

    версия 1.0.1.1:

    добавлена поддержка RDP клиентов от XPSP3, Vista, Windows7

    Reply
  51. Abadonna

    Заглянул в исходники, дарю самый простой способ проверить на повторный запуск;)

    uses
    Forms,Windows,SysUtils,
    UMain in ‘UMain.pas’ {WndsForm};
    
    {$R *.res}
    
    begin
    
    Application.Initialize;
    CreateMutex(nil, LongBool(true), PChar(ExtractFileName(Application.ExeName)));
    if GetLastError = ERROR_ALREADY_EXISTS then Exit; // вот оно!!!!
    Application.CreateForm(TWndsForm, WndsForm);
    Application.Run;
    end.
    

    Показать

    Reply
  52. SumMrak

    спасибо

    то что нужно

    Reply
  53. Slepen

    Пользуюсь очень давно. Очень полезная вещь. Отдельное спасибо за W7

    Reply
  54. SanyaGrek

    Годная вещь.

    Поставим нашим бухам.

    Reply
  55. maikl_len

    Очень простенько написано, но вещь пришлась по вкусу нашему руководству.

    Reply
  56. krosaf4eg

    а как вообще убрать верхнюю панель?

    Reply
  57. metaeditor

    (56) в свойствах подключения закладка Экран, там галка

    Reply
  58. krosaftcheg

    (57) да, спасибо. Уже и сам нашел. Только напрягает то, что панель показывается первые 5 секунд

    Reply
  59. zbwZlobin

    Спасибо автору. Все работает Хорошо. Кнопка «Х» становится недоступна. Но ЕЁ можно нажать между кнопок «Прямоугольник» и «Х» доступна маленькая полосочка Win2003Server.

    Reply
  60. IgoriKr

    Хоть штрафуй, хоть предупреждай (как написано выше) все равно находятся те, кому ‘проще и быстрее’ выходить из терминальной сессии через [X]. Данное решение помогло этих злобных юзеров ‘приучить’ как культурно надо выходить.

    Спасибо от админа и коллег по сопровождению 1С.

    Reply
  61. zhleonid8

    GK.CBR

    Reply
  62. VictorK

    У меня заработало Windows Server 2003, тоже присоеденился к списку у кого заработало и поставил свой «+» .

    Reply
  63. uriah

    А на 2008 64- битном будет работать? А то извели юзвери.

    Reply
  64. daho

    Огроммммное спасибо!!! то что нужно!!!

    Правда прививать придется с боем…

    Reply
  65. sp

    Хотели воспользоваться данной программкой на предприятии (в домене), но наблюдаются какие-то странности, а именно, если у пользователя нет рабочего стола, т.е. в настройках прописан запуск приложения, то у одних пользователей при входе прописанное приложение не запускается (чистый экран), у других — очень долго завершается терминальный сеанс при закрытии приложения(1С). При отключении проги всё нормализуется.

    Reply
  66. metaeditor

    (65)программка никаким образом не лезет в терминальный сеанс, она тупо скрывает крестик. думаю просто совпадение

    Reply
  67. AlexO

    (66)

    ну как это не лезет, если работает напрямую с окном терминала?

    (65) sp,

    если у пользователя нет рабочего стола

    и как тогда затавить пользователя выйти?

    (18)

    только тогда 1с закрывается аварийно и требует переиндексации

    и как тогда решить этот краеугольный вопрос?

    Ну не может закрыть по крестику, ну оставил сессию открытой, ну сервер автоматически закрыл неиспользуемую сессию…

    А как быть с 1С, которой очень не нравится подобное обращение?

    Reply
  68. grumpi

    В windows 7, в утилите версии 1.0.1.1 кнопка терминального сеанса в окне исчезает, но если окно с сеансом свернуть, то в панели задач при наведении указателя на окно кнопка Х присутствует. Получается, что проблема закрытия сеанса не решается полностью… Есть ли решение этой проблемы?

    Reply
  69. metaeditor

    [HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionExplorerAdvanced]

    «ExtendedUIHoverTime»=dword:000186a0

    этот параметр реестра устанавливает очень долгую задержку перед показом всплывающего меню, фактически отключает его

    но ещё остается правый клик на свернутом приложении, там тоже есть кнопка закрытия, я так и не нашел как его отключить

    Reply
  70. CheBurator

    Стоит и у меня эта пряталка крестика

    Все это все равно костыли

    Пока пипл не поймет и не прочувствует своим телом что любая ошибка это извините мпх в (_._) ничего принципиально не поможет. У меня пипл уходит просто забывая выйти из базы. Пока не сделать что при неправилтном завершении или незавершении работы турникет на выход не откроется и придется для исправления ситуации перется на тпетий этаж — только такие злобные методы рулят. Остальное — пофиг

    Reply
  71. metaeditor

    10 лет почти прошло, ужс)

    Reply
  72. Smiley-R

    Спасибо, полезно.

    Reply
  73. PVG_73

    (71) а до сих пор актуально….. 😉

    Reply
  74. chesnauskis

    (71) настолько актуально, что было бы просто идеально сделать под win10 😹

    Reply
  75. chesnauskis

    (71) отставить, все ок, спасибо

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *