gifts2017

Альтернативный клиент для удаленного рабочего стола (RDP Client)

Опубликовал Алексей Непряхин (agentz) в раздел Администрирование - Системное

Решение проблемы работы пользователей с приложениями в терминальном режиме

Обновление от 27.02.2014

  • Добавлена информация в заголовок активной сессии в виде %Server% - %User%
  • Сделана вменяемая кнопка с настройками
  • Починено сворачивание окна и разворачивание его

 

Долгое время мои пользователи работали с 1С в полноэкранной сессии и очень часто жаловались. В результате был реализован клиент для rdp протокола который растягивает экранную сесиию на рабочий стол, а панель задач остается видимой.

Внимание! Это первая публичная версия (т.е по сути бэта), комментарии, критика и предложения приветствуются

Системные требования:

  1. Windows XP SP3 и выше
  2. Microsoft Remote Desktop 6.1 и выше (скачать для XP можно тут)

Как с ним работать

При запуске программа заполняет настройки по умолчанию, а именно:

  1. При подключении перенаправлять принтеры
  2. При подключении подключать диски клиентов
  3. При подключении перенаправлять буфер обмена
  4. Авто переподсоединение при разрыве
  5. Звук отключен

Все настройки хранятся в .ini файле. Для того чтобы он создался в первый раз, необходимо просто запустить программу и ее закрыть. В папке с программой будет создан .ini файл следующего содержания:

[main]
UserName=DOMAIN\UserName
Password=MySuperPuperSecretPassw0rd
Server=terminalserver.local
ServerPort=3389
[adv]
ConnectPrinters=1
ConnectLocalDiskDrives=1
ConnectAudio=0
ConnectCOMPorts=0
ConnectSmartCards=0
ConnectClipboard=1
ConnectDevices=1
ConnectPOSDevices=0
EnableAutoReconnect=1
[app]
ExecutablePath=
WorkingDirectory=
Arguments=

 

Для использования своих настроек можно создать кучу таких файлов. Для того, чтобы программа начала использовать настройки и з файла можно просто файл перетащить в проводнике на программу.

Порядок работы

  1. Создаем файл с настройками
  2. Перетаскиваем его на .exe-шник
  3. Нажимаем кнопку connect
  4. Работаем

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

Внимание! Любые изменения внесенные в форме программы автоматом сохраняются в файле настроек

ToDo

  1. Шифрование паролей
  2. Автосоединение при перетаскивании файла на exe-шник
  3. Смена расширения файла и настройка ассоциаций

 

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
alex_rdp_client.exe
.exe 4,92Mb
27.02.14
153
.exe 4,92Mb 153 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Александр Зубцов (iov) 06.02.12 15:52
(0) Зачем Это? Подобное пишется на AUTOIT за час с перерывами на кофе и там будут плюшки поинтереснее чем "запускальщик" штатного рдп .

#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_icon=0000 - 1.ico
#AutoIt3Wrapper_outfile=RunME.exe
#AutoIt3Wrapper_Compression=4
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
Opt("WinTitleMatchMode", 2)     ;1 - с начала, 2 - подстрока, 3 - точное совпадение, 4=...
Opt("TrayIconHide", 1)          ;0 - отображать, 1 - скрыть
Opt("WinWaitDelay", 100)
Opt("TCPTimeout", 250)
Global $key
;~ HotKeySet("^d", "ShowMessage")  ;Shift-Alt-d
;Проверяем обновления


; Проверяем находение в определенном домене
;$USERDOMAIN = @LogonDNSDomain
;if $USERDOMAIN <> "MainDomen" Then
	;Msgbox(0,"Status","домен:" & $USERDOMAIN )
;Else
	;Msgbox(0,"Status","домен правильный:" & $USERDOMAIN )
;EndIF
;~ Msgbox(0,"Status",@OSVersion)

; чистим реестр от временных лицензий
;~ RegDelete("HKEY_LOCAL_MACHINE\Software\Microsoft\MSLicensing")

;проверяем доступность по очереди
ProveritRDP("191.191.191.192",":3391")
ProveritRDP("191.191.191.191",":3389")
MsgBox(48,"","Нет серверов для подключения",10)
Exit

Func ProveritRDP($ADrr,$Port)
	ProveritINET(0)
	If PingS($ADrr) Then
		;$ADrr="rdp.job-profi.ru"
		If ProveritSocket($ADrr,$Port) <> -1 Then
			RDP($ADrr&$port)
			hideTextConnekt($ADrr)
			controlS("в")
			hideText($ADrr)
			Exit
		EndIf
	EndIf

	Return
EndFunc

Func ProveritSocket($ADrr,$Port)
	$Port = StringReplace($Port, ":", "")
	TCPStartUp()
	$ipdr = TCPNameToIP($ADrr)
	$socket = TCPConnect($ipdr, $Port)
	;MsgBox(0, "", $socket)
	If $socket = -1 Then
		MsgBox(48,"","Порт "&$Port&" по адресу "&$ADrr&" закрыт",10)
		$socket = -1
	Return $socket
	EndIf

EndFunc

Func ProveritINET($Param)
	$num = 2
	If PingS("Ya.ru") Then
		$num = $num -1
	EndIf
	If PingS("google.com") Then
		$num = $num -1
	EndIf

	If $num =2 Then
			MsgBox(48,"","Нет подключения к интернету",10)
			Exit
	EndIf
EndFunc

Func hideTextConnekt($term)
	WinWaitActive("Подключение", "",250)
	$title = WinGetTitle("Подключение", "")
	;WinSetState($term, "", @SW_HIDE)
	ControlSetText($title, "", "Static1","1с")
	WinSetTitle( $title, "", "1c" )
	;WinSetState($term, "", @SW_SHOW)
	Return
EndFunc

Func hideText($term)
	WinWaitActive($term, "", 100)
	$title = WinGetTitle($term, "")
	;WinSetState($term, "", @SW_HIDE)
	ControlHide($title, "", "BBARCLASS1")
	WinSetTitle( $title, "", "1с" )
	;WinSetState($term, "", @SW_SHOW)
	Return
EndFunc

Func controlS($params)
	;Return ;
	WinWait("Подключение к удаленному рабочему столу", "", 1)
	$title = WinGetTitle("Подключение к удаленному рабочему столу", "")
	ControlClick($title, "", "Button1")
	Sleep(300)
	ControlClick($title, "", "Button7")
	Return
EndFunc

Func RDP($ADrr)
	    FileInstall(ВОТТУТВКЛЮЧАЕММОЗГ\HideRDPxButtoN.exe", @ScriptDir & "\HideRDPxButtoN.exe")
        Run(@ScriptDir & "\HideRDPxButtoN.exe")
		if @OSVersion = "WIN_7" Then
			$borger = 75
		Else
			$borger = 60
		EndIf
	Run("mstsc.exe /v:"&$ADrr&" /h:" & (@DesktopHeight-$borger) & " /w:" & @DesktopWidth, "", @SW_MAXIMIZE)
	;Sleep(500)
	Return
EndFunc

Func PingS($ip)
	;SplashTextOn("TitleFoo", "пинг")
   ;Sleep(800)
	$var = Ping($ip,1000)
	Return $var
EndFunc

...Показать Скрыть


Вот как-то так....
biker1052; v_den_v; +2 Ответить 1
2. Алексей Непряхин (agentz) 06.02.12 16:11
Собственно никто не запрещает использовать AutoIT. Мне так удобней, тем более что в будущем планируется сделать seamless rdp режим
3. Александр Зубцов (iov) 06.02.12 17:27
(2) Смысл не в запрете а в передаче в неизвестный код всех данных для подключения... Я даже запустить такое не изучив исходники не соглашусь.
Просто вопрос в том что Ваш ник с такой софтиной вызывает дикий приступ паранойи.
Без обид просто очень напомнил якутский вирус "вышлите ваши пароли и сотрите папку windows".
А в целом молодец что вообще сам написал.
4. Алексей Непряхин (agentz) 06.02.12 17:32
Абсолютно без обид. Писалось для себя поэтому и название такое.
А чтобы страхов небыло, то я специально привел скрин с отчетом вирустотала.
5. Александр Зубцов (iov) 06.02.12 17:49
(4) дык и на мой код тоже не ругается (есть аналог только с "контрольками") и я всегда знаю кто пользовался утилитой для входа (краткий обзор системы с которой запущена утилита + проверка на кое какие параметры).

заодно она сама обновляется без "спроса". Ибо пользователь - дитя безответственное и безмозглое. А тут скачал нажал - вошёл. Если что утилитка подскажет что нет инета или поднимет туннель VPN.
И все это буквально за символическое вознаграждение от админов.
6. script Мальчинко (script) 07.02.12 12:54
В общем все класно. Полезно это не только пользователям но и админам и прогрраммерам. НО:
1) обязательно нужно выбор данных авторизации прямо в поле как в обычном РДП
Тыкать ини файлы в езе-шник - это не по феншую.
2) в ини файл добавить опцию - показывать полоску для сфорачивания окна или нет.
7. Алексей Непряхин (agentz) 07.02.12 14:06
(6) script, по п.1 в ближ планах сделать быстрый выбор файла через меню например
по п.2 - запишу на будущее.
в ближ планах сделать бесшовные окна, как в Citrix
8. Данил Арсланов (adanil) 08.02.12 07:35
Программа, конечно, интересная, но чем вам не нравится RemoteApp в 2008 сервере? Там все эти "плюшки" реализованы и работают.
9. Александр Морозов (Abzkrs) 08.02.12 07:46
в виндовс сервер 2008 такая плюшка называется "Удаленные приложения RemoteApp"...
10. Алексей Непряхин (agentz) 08.02.12 10:51
(8) adanil, (9) Abzkrs, в 2003 такого нет. + насколько я помню, RemoteApp требует верисю 7 RDP, а в основном используются 5-6
11. александр (whtblck) 08.02.12 15:46
Разрешите и мне, раз уж критика приветствуется.
Присоединяюсь к (6).
1. Хранить пароль в ini-файле, в незашифрованном виде, как минимум, нелепо.
2. Как выполнить программу при подключении? Пользователю не должен быть доступен рабочий стол сервера.
Вот ini-шник, при подключении выдает неопознанную ошибку
[main]
UserName=<тут мой домен>\<тут мой логин>
Password=<тут мой пароль>
Server=bserv
ServerPort=3389

[adv]
ConnectPrinters=1
ConnectLocalDiskDrives=1
ConnectAudio=0
ConnectCOMPorts=0
ConnectSmartCards=0
ConnectClipboard=1
ConnectDevices=1
ConnectPOSDevices=0
EnableAutoReconnect=1

[app]
ExecutablePath=C:\Program Files (x86)\1Cv77\1c.bat
WorkingDirectory=
Arguments=
...Показать Скрыть

ошибка же такая:
---------------------------
alex_rdp_client
---------------------------
Неопознанная ошибка.
---------------------------
ОК
---------------------------

что не так сделал?
12. Сергей (fly) 09.02.12 02:20
В принципе чего огород городить? Открываем *.rdp в блокноте и правим секцию desktopheight:i:ххх в сторону уменьшения высоты экрана....
13. Алексей Непряхин (agentz) 09.02.12 11:15
(11) whtblck, попробуй указать рабочий каталог WorkingDirectory. Правда я эту опцию не тестировал, у меня в свойствах терминального пользователя прописана программа
(12) fly, вариант, но надо руками менять на каждом клиенте
14. Ivan Haos (haous) 09.02.12 13:13
Пользуюсь RemoteApp в 2008 сервере и не парю мозг!
15. Виталий Гуляев (vital1c) 05.03.12 17:31
(13) agentz, один раз отредактировали файл, и скопировали на все клиенты, уже с незапамятных времен пользуюсь таким спосбом, и меня удивляет что кто-то огороды из этого городит
16. Титович Эдуард (item) 08.03.12 14:43
В любом случае достойный труд.
17. Oscar Oscar (OscarTT) 11.03.12 13:20
в каких то случаях может и пригодиться, скорее всего при массовой "терминализации"
18. Степан (stepan_shock) 04.04.12 09:56
Очень здорово! то что нужно было! А можно добавить
1. маппинг только определенных дисков. как это делается во встроенном клиенте от MS
2. Какие нибуть горячие клавиши для переключения окон типа альт+таб
19. александр ярыгин (Aksonx2) 28.06.12 06:58
(1) iov, Хотел написать вам в личку но нету денех какихто :))). Если вы не против использую ваш текст для своих развлечений с RDP.
На 109 строке включил мозг :)))))
20. Ильдус Гаясович (ildus78) 29.06.12 15:05
(8) adanil, RemoteApp в 2008 R2 до сих пор имеет множество ошибок и нерешенных проблем, лучше и стабильнее Citrixa пока ничего нет.
21. Сергей Петухин (nilabs) 03.03.13 14:50
1. было бы неплохо, если бы можно было запускать вашу программу из командной строки с параметром, в котором можно было бы передавать ini файл, присмотритесь к linux rdesktop,
2. Хотелось бы в ini файле задавать параметры геометрии, т.е. необязательно высота экрана rdp = высота экрана - панель задач и т.д.
22. Николай (beard1) 03.03.13 17:00
в будущем планируется сделать seamless rdp режим


вот это будет действительно интересно посмотреть...
23. Сергей Петухин (nilabs) 08.03.13 12:50
Еще одно замечание, когда пользователь работает с несколькими терминальными сессиями в панели задач я вижу не имя сессии, а "Alex's Microsoft Remote Desktop Client", попробуйте так поориентироваться с 3-4 терминальными сессиями
24. Степан (stepan_shock) 13.03.13 17:34
Есть обновленная версия?
25. Алексей Непряхин (agentz) 13.03.13 18:01
(24) stepan_shock, к сожалению исходники померли вместе с виртуалкой.
может попозже сваяю новую версию
26. Святослав Ушаков (sacred) 15.03.13 11:48
Собственно, единственное, чего не хватает во всех клиентах - возможности запускать удалённый рабочий стол с пониженным разрешением на полный экран.
Т.е. например, у меня монитор 1920*1080 а я запускаю удалёнку в режиме 1024*600 и клиент показывает мне это всё в полноэкранном режиме. Т.е. все элементы пропорционально увеличиваются.
Вот эта фича востребованная для плоховидящих бухгалтеров работающих в терминале.Понижать разрешение локального монитора - не предлагать! :)
27. alevi (1Cynep4eJIoBek) 15.03.13 12:53
для Linux очень хороший 2XClient
28. smaharbA (smaharbA) 15.03.13 13:11
(26) это реализовано в штатном рдп еще с 1997 года и по сей день
29. smaharbA (smaharbA) 15.03.13 13:13
автору - а Вы описание полей штатного файла рдп прочитать не пробовали ?
30. Степан (stepan_shock) 05.06.13 10:52
Восстановите и продолжайте программу! Она классная и нужна людям
31. Алексей Непряхин (agentz) 05.06.13 10:57
(30) stepan_shock, посмотрим, может на след выходных напишу заново
stepan_shock; +1 Ответить
32. Дмитрий Колесников (EastGuy) 19.07.13 11:35
Зачем изобретать велосипед и городить огород, когда есть Win 2008-2012 и их более удобный и мощный RemoteApp. Проблема с версиями RDP легко решается установкой через AD сразу всем юзерам. Покажите уже начальству RemoteApp и направьте свой ум на более полезные задачи.
33. Maxim Kolkin (the1) 28.02.14 08:42
Много лет использую mRemote. Пока искал ссылку, чтобы указать в комментарии, обнаружил, что он уже почил в бозе, а заодно нашел преемника. Кстати, за труды спасибо, тоже поюзаем!
34. Степан (stepan_shock) 06.03.14 00:00
Суперская приблуда!!!!!!!!!!! Огромное спасибо.
Прошлой версией пользовался на ура, а теперь еще и новая!!!!
35. stupid01 stupid01 (stupid01) 27.04.14 21:22
(26) sacred, Не удалось найти решение проблемы?
36. Uri Urkin (banktex) 12.08.15 15:23
Не работает если сменить порт со стандартного на любой другой. У нас порт 3389 заменен в целях безопасности. Эта прога увы не работает.
37. Алексей Непряхин (agentz) 13.08.15 13:15
(36) banktex, работает. № порта берет из соотвествующего поля. Может быть бага, попробуй файл сохранить, а затем открыть заново
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа