From 3d3e504a9a985700f7c31cd8f35d6378e7cdceac Mon Sep 17 00:00:00 2001 From: Ivan Maslov Date: Sun, 17 Nov 2019 21:28:04 +0300 Subject: [PATCH] #RobotRDPActive_dev30% --- .../Tools/RobotRDPActive/RDPConnector.py | 37 +++++++++++++++++- .../Tools/RobotRDPActive/Template.rdp | Bin 2320 -> 2356 bytes .../Tools/RobotRDPActive/__main__.py | 15 ++++++- 3 files changed, 49 insertions(+), 3 deletions(-) diff --git a/Sources/pyOpenRPA/Tools/RobotRDPActive/RDPConnector.py b/Sources/pyOpenRPA/Tools/RobotRDPActive/RDPConnector.py index 1d751b20..fbff9341 100644 --- a/Sources/pyOpenRPA/Tools/RobotRDPActive/RDPConnector.py +++ b/Sources/pyOpenRPA/Tools/RobotRDPActive/RDPConnector.py @@ -1,6 +1,8 @@ #Import parent folder to import current / other packages from pyOpenRPA.Robot import UIDesktop #Lib to access RDP window import os #os for process run +import uuid #temp id for Template.rdp +import tempfile #Temporary location import time #Connect to RDP session """ @@ -47,4 +49,37 @@ def SessionConnect(inRDPSessionConfiguration): {"title": "Компьютер:", "control_type": "Edit"}] ).set_text(f"{lHostPort}") #Set user - + return +#Add login/ password to the windows credentials to run RDP +def LoginPassSet(inHost,inLogin,inPassword): + #Clear old login/password if it exists + #os.system(f"cmdkey /delete:TERMSRV/{inHost}") #Dont need to delete because new user password will clear the previous creds + #Set login password for host + os.system(f"cmdkey /generic:TERMSRV/{inHost} /user:{inLogin} /pass:{inPassword}") + return None +#Create current .rdp file with settings +#Return full path to file +def RDPConfigurationCreate(inConfiguration): + #RobotRDPActive folder path + lFileFullPath=__file__ + lFileFullPath = lFileFullPath.replace("/","\\") + lRobotRDPActiveFolderPath = "\\".join(lFileFullPath.split("\\")[:-1]) + #Full path to Template.rdp file + lRDPTemplateFileFullPath = os.path.join(lRobotRDPActiveFolderPath, "Template.rdp") + #Open template file (.rdp encoding is USC-2 LE BOM = UTF-16 LE) http://qaru.site/questions/7156020/python-writing-a-ucs-2-little-endian-utf-16-le-file-with-bom + lRDPTemplateFileContent = open(lRDPTemplateFileFullPath, "r", encoding="utf-16-le").read() + #Prepare host:port + lHostPort=inConfiguration['Host'] + if 'Port' in inConfiguration: + lHostPort=f"{lHostPort}:{inConfiguration['Port']}" + #Replace {Width}, {Height}, {BitDepth}, {HostPort}, {Login} + lRDPTemplateFileContent = lRDPTemplateFileContent.replace("{Width}", str(1680)) + lRDPTemplateFileContent = lRDPTemplateFileContent.replace("{Height}", str(1050)) + lRDPTemplateFileContent = lRDPTemplateFileContent.replace("{BitDepth}", inConfiguration.get('Screen',{}).get("DepthBit","32")) + lRDPTemplateFileContent = lRDPTemplateFileContent.replace("{HostPort}", lHostPort) + lRDPTemplateFileContent = lRDPTemplateFileContent.replace("{Login}", inConfiguration['Login']) + #Save template to temp file + lRDPCurrentFileFullPath = os.path.join(tempfile.gettempdir(), f"{uuid.uuid4().hex}.rdp") + open(lRDPCurrentFileFullPath, "w", encoding="utf-16-le").write(lRDPTemplateFileContent) + #Return .rdp full path + return lRDPCurrentFileFullPath \ No newline at end of file diff --git a/Sources/pyOpenRPA/Tools/RobotRDPActive/Template.rdp b/Sources/pyOpenRPA/Tools/RobotRDPActive/Template.rdp index 208b9316b81f430820fcbcf4f5893045013c3eeb..b298abcf70ba59f2061580dee9798a2d8d114b8a 100644 GIT binary patch delta 44 vcmbOrv_)ux0H;bRLoq`tLlHwBLn1>ikYxqrTQO8K_%P%%q%&j!#cLS=>XHeL delta 7 OcmdlYG(l*C04D$numUmw diff --git a/Sources/pyOpenRPA/Tools/RobotRDPActive/__main__.py b/Sources/pyOpenRPA/Tools/RobotRDPActive/__main__.py index 2e5729ef..55d4e879 100644 --- a/Sources/pyOpenRPA/Tools/RobotRDPActive/__main__.py +++ b/Sources/pyOpenRPA/Tools/RobotRDPActive/__main__.py @@ -1,6 +1,9 @@ #Import parent folder to import current / other packages ######################################################### import sys +import subprocess #start process async +import os #path, run, remove +import time #timer #lFolderPath = "\\".join(__file__.split("\\")[:-4]) lFolderPath = "/".join(__file__.split("/")[:-4]) sys.path.insert(0, lFolderPath) @@ -14,7 +17,15 @@ mConfiguration={ "Screen": { "Resolution":"FullScreen", #"640x480" or "1680x1050" or "FullScreen". If Resolution not exists set full screen "FlagUseAllMonitors": False, # True or False - "DepthBit":"" #"32" or "24" or "16" or "15" + "DepthBit":"32" #"32" or "24" or "16" or "15" } } -RDPConnector.SessionConnect(mConfiguration) \ No newline at end of file +#RDPConnector.SessionConnect(mConfiguration) +#RDPConnector.LoginPassSet("111.222.222.111","ww","dd") +lRDPFile = RDPConnector.RDPConfigurationCreate(mConfiguration) +#run rdp session +lItemArgs = [lRDPFile] +subprocess.Popen(lItemArgs, shell=True) +#Remove temp file +time.sleep(2) #Delete file after some delay - one way to delete and run the RDP before because RDP is not read file in one moment +os.remove(lRDPFile) # delete the temp rdp \ No newline at end of file