zoukankan      html  css  js  c++  java
  • 通过代码打开mstsc

    using System;
    using System.Collections.Generic;
    using System.Diagnostics;
    using System.IO;
    using System.Linq;
    using System.Security;
    using System.Security.Cryptography;
    using System.Text;
    using System.Threading.Tasks;
    
    
    
    public class OpenRemoteDesktop
    {
        /// <summary>
        /// 密码因子
        /// </summary>
        private static readonly byte[] s_aditionalEntropy = null;
    
        //  public static object ProtectedData { get; private set; }
    
        /// <summary>
        /// 打开远程桌面
        /// </summary>
        /// <param name="ip">IP地址</param>
        /// <param name="admin">用户名</param>
        /// <param name="pw">明文密码</param>
        public void Openrdesktop(string ip, string admin = null, string pw = null)
        {
            string password = GetRdpPassWord(pw);
    
            #region newrdp
            //创建rdp
            string fcRdp = @"screen mode id:i:1 
                               desktopi:1280 
                               desktopheight:i:750 
                               session bpp:i:24 
                               winposstr:s:2,3,188,8,1062,721 
                               full address:s:MyServer 
                               compression:i:1 
                               keyboardhook:i:2 
                               audiomode:i:0 
                               redirectdrives:i:0 
                               redirectprinters:i:0 
                               redirectcomports:i:0 
                               redirectsmartcards:i:0 
                               displayconnectionbar:i:1 
                               autoreconnection 
                               enabled:i:1 
                               username:s:" + admin + @"
                               domain:s:QCH
                               alternate shell:s: 
                               shell working directory:s: 
                               password 51:b:" + password + @"
                               disable wallpaper:i:1 
                               disable full window drag:i:1 
                               disable menu anims:i:1 
                               disable themes:i:0 
                               disable cursor setting:i:0 
                               bitmapcachepersistenable:i:1";
    
            string rdpname = "rdesktop.rdp";
            CreationBat(rdpname, fcRdp);
            #endregion
            //创建bat
            string fcBat = @"mstsc rdesktop.rdp /console /v:" + ip + " /f";
            string batname = "runRdp.bat";
            CreationBat(batname, fcBat);
            //创建vbs
    
            string vbsname = "runBat.vbs";
            string fcVbs = @"set ws=WScript.CreateObject(""WScript.Shell"")" + "
    ws.Run"runRdp.bat",0";
            CreationBat(vbsname, fcVbs);
            //NewVbs(vbsname);
            ExecuteVbs(vbsname);
        }
    
        /// <summary>
        /// 获取RDP密码
        /// </summary>
        private string GetRdpPassWord(string pw)
        {
            byte[] secret = Encoding.Unicode.GetBytes(pw);
            byte[] encryptedSecret = Protect(secret);
            string res = string.Empty;
            foreach (byte b in encryptedSecret)
            {
                res += b.ToString("X2"); //转换16进制的一定要用2位 
            }
            return res;
        }
    
        /// <summary>
        /// 加密方法
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        private static byte[] Protect(byte[] data)
        {
            try
            {
                //调用System.Security.dll
                return ProtectedData.Protect(data, s_aditionalEntropy, DataProtectionScope.LocalMachine);
            }
            catch (CryptographicException e)
            {
                Console.WriteLine("Data was not encrypted. An error occurred.");
                Console.WriteLine(e.ToString());
                return null;
            }
        }
    
        //解密方法
        private static byte[] Unprotect(byte[] data)
        {
            try
            {
                //Decrypt the data using DataProtectionScope.CurrentUser.
                return ProtectedData.Unprotect(data, s_aditionalEntropy, DataProtectionScope.LocalMachine);
            }
            catch (CryptographicException e)
            {
                Console.WriteLine("Data was not decrypted. An error occurred.");
                Console.WriteLine(e.ToString());
                return null;
            }
        }
    
        /// <summary>
        /// 创建bat脚本
        /// </summary>
        /// <param name="batName">文件名</param>
        /// <param name="fileContent">文件内容</param>
        /// <param name="u"></param>
        private void CreationBat(string batName, string fileContent, string u = null)
        {
            string filepath = System.IO.Directory.GetCurrentDirectory();
            string batpath = filepath + @"" + batName;
            writeBATFile(fileContent, batpath);
        }
    
        /// <summary>
        /// 写入文件
        /// </summary>
        /// <param name="fileContent">文件内容</param>
        /// <param name="filePath">路径</param>
        private void writeBATFile(string fileContent, string filePath)
        {
            if (!File.Exists(filePath))
            {
                FileStream fs1 = new FileStream(filePath, FileMode.Create, FileAccess.Write);//创建写入文件
                StreamWriter sw = new StreamWriter(fs1);
                sw.WriteLine(fileContent);//开始写入值
                sw.Close();
                fs1.Close();
            }
            else
            {
                FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Write);
                StreamWriter sr = new StreamWriter(fs);
                sr.WriteLine(fileContent);//开始写入值
                sr.Close();
                fs.Close();
            }
        }
    
    
        /// <summary>
        /// 调用执行bat文件
        /// </summary>
        /// <param name="batName">文件名</param>
        /// <param name="thisbatpath">路径</param>
        private void ExecuteBat(string batName, string thisbatpath)
        {
            Process proc = null;
            try
            {
                string targetDir = string.Format(thisbatpath);//this is where testChange.bat lies
                proc = new Process();
                proc.StartInfo.WorkingDirectory = targetDir;
                proc.StartInfo.FileName = batName;
                proc.StartInfo.Arguments = string.Format("10");//this is argument
                proc.StartInfo.RedirectStandardError = false;
                proc.StartInfo.CreateNoWindow = true;
                proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;//这里设置DOS窗口不显示,经实践可行
                proc.Start();
                proc.WaitForExit();
            }
            catch (Exception ex)
            {
                Console.WriteLine("Exception Occurred :{0},{1}", ex.Message, ex.StackTrace.ToString());
            }
        }
    
        /// <summary>
        /// 调用执行vbs文件
        /// </summary>
        /// <param name="vbsName">文件名</param>
        private void ExecuteVbs(string vbsName)
        {
            string path = System.IO.Directory.GetCurrentDirectory() + @"" + vbsName;
            ProcessStartInfo startInfo = new ProcessStartInfo
            {
                FileName = "wscript.exe",
                Arguments = path
            };
            Process.Start(startInfo);
        }
    
    
        /// <summary>
        /// 创建vbs文件
        /// </summary>
        /// <param name="vbsName">vbs文件名</param>
        private void NewVbs(string vbsName)
        {
            string path = System.IO.Directory.GetCurrentDirectory() + @"" + vbsName;
            FileStream fsvbs = new FileStream(path, FileMode.Create, FileAccess.Write);
            StreamWriter runBat = new StreamWriter(path);
            runBat.WriteLine("set ws=WScript.CreateObject("WScript.Shell")");
            runBat.WriteLine("ws.Run"runRdp.bat",0");
            runBat.Close();
            fsvbs.Close();
        }
    }
    

     

    调用示例:

    OpenRemoteDesktop m_open = new OpenRemoteDesktop();
    m_open.Openrdesktop("ip", "账号", "密码");

     

  • 相关阅读:
    插入排序的Python代码实现
    数据结构基础--二叉堆、优先队列
    数据结构基础--二叉树
    数据结构基础--数组、链表、栈、队列、哈希表
    转:数据结构与算法系列--十大排序(附动态图解
    快速排序的Python代码实现
    选择排序的Python代码实现
    csv文件的读取写法 from Udacity
    Linux下测试ZLAN 5800
    冒泡排序的Python代码实现
  • 原文地址:https://www.cnblogs.com/itclw/p/12599381.html
Copyright © 2011-2022 走看看