编译putty并定制自己ssh客户端

2023-05-16

putty的好处就不用多说了,轻便,选择复制,右键粘贴,同时支持ssh和telnet。
putty不支持脚本录制和回放,不支持多窗口。因此本博文主要目的就是让它带上这样的功能,这样才更好用。

  • 下载Putty源码
    从官网的Source Code链接下面可以找到源码下载的地方。

  • 编译Putty源码
    源码下载后,要通过perl执行mkfiles.pl才会生成工程文件。我是在window安装了cgywin后,在执行“./mkfiles.pl”生成了工程文件。然后用virtual studio打开putty-0.70\windows\VS2010\putty.sln就可以编译了。

  • 修改Putty源码
    因为目标环境是window,源码主要修改在putty-0.70\windows目录。主要修改里面的window.c。在系统启动的时候根据配置文件插入新的菜单项;在键盘消息处理的地方调用插入的菜单命令;在菜单处理时按照文件内容转为WM_CHAR消息。

    [注册菜单]

int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show)
{
    MSG msg;
    HRESULT hr;
    int guess_width, guess_height;
......
                for (k = 0; k < m_script_len; k++) 
                {
                    int len = strlen(m_script[k]);
                    flag = 0;
                    if (len > 2) 
                    {
                        if (m_script[k][0] == '[')
                        {
                            if (m_script[k][len - 1] == ']')
                            {
                                flag = 1;
                            }
                            if ((m_script[k][len - 1] == 10) && (m_script[k][len - 2] == ']'))
                            {
                                flag = 2;
                            }
                            if (flag > 0)
                            {
                                menu_count++;
                                strcpy(menu_name, m_script[k] + 1);
                                menu_name[len - flag - 1] = 0;
                                if (menu_count < 10)
                                {
                                    sprintf(menu_buff, "F%d - %s", menu_count, menu_name);
                                    AppendMenu(m, MF_ENABLED, IDM_MENU_MIN + menu_count, menu_buff);
                                }
                                else
                                {
                                    AppendMenu(m, MF_ENABLED, IDM_MENU_MIN + menu_count, menu_name);
                                }
                            }
                        }
                    }
                }
                AppendMenu(m, MF_SEPARATOR, 0, 0);
......
}
[发送键盘消息]
                if (strncmp(m_script[k], "sleep ", 6) == 0)
                {
                    strcpy(temp, m_script[k] + 6);
                    Sleep(atoi(temp));
                }
                else if (strncmp(m_script[k], "wait ", 5) == 0)
                {
                    strcpy(temp, m_script[k] + 5);
                    waitstr(temp);
                }
                else if (strncmp(m_script[k], "expect ", 7) == 0)
                {
                    strcpy(temp, m_script[k] + 7);
                    waitstr(temp);
                }
                else
                {
                    for (i = 0; i <len; i++)
                    {
                        if (m_script[k][i] == 10)
                        {
                            continue;
                        }
                        SendMessage(hwnd, WM_CHAR, m_script[k][i], 0);
                        Sleep(30);
                    }
                    Sleep(100);
                    SendMessage(hwnd, 0, 13, 0); 
                    SendMessage(hwnd, WM_KEYUP, 13, 0);
                    Sleep(500);
                }
  • 修改的效果
    putty菜单中添加了功能键
    这里写图片描述
    外层增加链接管理,窗口管理,快捷键管理
    这里写图片描述

  • 下载
    https://github.com/kexiaodong/CPShell/blob/master/cpshell.zip
    https://github.com/kexiaodong/CPShell

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

编译putty并定制自己ssh客户端 的相关文章

  • Java异常处理

    文章目录 本章学习要点 Java异常 xff08 Exception xff09 处理及常见异常异常简介例 1 异常类型 Java中Error和Exception的异同例 1 Java异常处理机制及异常处理的基本结构Java try cat
  • Java注解

    文章目录 本章学习要点 Java注解 xff08 Annotation xff09 简介Java 64 Override注解Java 64 Deprecated注解Java 64 SuppressWarnings xff1a 抑制编译器警告
  • 如何夸人?

    文章目录 夸人要怎么夸到心坎上 xff1f 01 有理有据 xff0c 细节见诚意02 一如既往保持信任与支持03 由表及里 xff0c 夸TA前先夸自己04 先抑后扬 xff0c 对比式夸奖05 创造条件引导TA自夸 如何做一只舔狗 xf
  • Java继承和多态

    文章目录 本章学习要点 Java类的封装例 1 Java封装图书信息类Java继承 xff08 extends xff09 简明教程例 1 单继承继承的优缺点 Java super关键字详解super调用父类构造方法例1例2 super访问
  • java中接口(interface)详解

    分享记录一下java接口的博客 xff1a java中接口 xff08 interface xff09 详解 JAVA基础 接口 xff08 全网最详细教程 xff09
  • java引用详解

    文章目录 一 关于对象与引用之间的一些基本概念 new Vehicle Vehicle veh1二 Java对象及引用三 只有理解了对象和引用的关系 xff0c 才能理解参数传递总结 xff1a 什么是值传递 xff0c 什么是引用传递 为
  • python学习-def __init__(self)理解(1)

    python中 init 的作用 在python中创建类后 xff0c 通常会创建一个 init 方法 xff0c 这个方法会在创建类的实例的时候自动执行 实例1 实例化Bob这个对象的时候 xff0c init 方法会自动执行 xff1a
  • 学完java基础语法之后用来练习的不依赖框架的小项目

    刚学完一门语言基础语法之后 xff0c 一般都需要写一些小项目来检验我们的学习效果 xff0c 将所学的基础语法串联起来 xff0c 同时也熟悉一下用这门语言做项目的大概流程 但是此时学习的项目不能太复杂 xff0c 因此此时才刚学完基础语
  • java集合中接口和类的理

    一 背景 首先我们可以先了解一下类和接口的基础和使用方法 xff1a Java类和对象 java中接口 xff08 interface xff09 详解 Java继承和多态 然后再对java集合的基础了解一下 Java集合 泛型和枚举 有了
  • java多线程详解

    文章目录 多线程基础进程进程 vs 线程多线程 创建新线程线程的优先级练习小结 线程的状态小结 中断线程小结 守护线程练习小结 线程同步不需要synchronized的操作小结 同步方法小结 死锁死锁练习小结 转载于 xff1a https
  • Java项目管理工具Maven使用方法详解

    这边直接推荐两个比较好的教程 xff1a https www liaoxuefeng com wiki 1252599548343744 1309301178105890 http c biancheng net maven2 depend
  • maven引入依赖包,import依赖包,编译运行maven项目

    文章目录 IDEA中新建一个maven项目在pom xml中添加依赖包 xff0c 确定依赖包成功导入 xff0c 在项目中import依赖包怎么确定maven成功的导入了依赖包在项目中import导入的依赖包总结 在看这篇博客之前 xff
  • 怎样做一个好的PPT演讲

    文章目录 一 做好PPT演讲的重要性二 怎么做好PPT演讲1 做一个好的PPT2 做好演讲 三 分析一些比较好的PPT演讲视频四 实例解析和总结 一 做好PPT演讲的重要性 不管是在学生时期的竞赛展示 xff0c 毕业答辩 xff0c 我们
  • PPT怎么画出好看的三维示意图

    一 前言 之前一些博客已经大致讲了PPT怎么画图的 xff1a PPT画图文章总结 怎样做一个好的PPT演讲 其实对于我们平常在PPT中会出现的图片 xff0c 可以简单的分为二维示意图和三维示意图 xff0c 二维示意图制作起来相对简单
  • 为什么C++没有Python那么多开源库?

    链接 xff1a https www zhihu com question 375368576 answer 1059898195 看了好多回答 xff0c 还是觉得有更本质的原因的 xff0c 根源还是在C 43 43 这个语言特性上 为
  • 为什么C++没有C语言快?

    作者 xff1a 高性能架构探索 链接 xff1a https www zhihu com question 507790994 answer 2287288696 来源 xff1a 知乎 著作权归作者所有 商业转载请联系作者获得授权 xf
  • C/C++语言性能分析方法及性能分析工具的使用

    文章目录 一 从算法复杂度都程序性能一 事后统计的方法二 事前分析估算的方法三 求解算法的时间复杂度的具体步骤四 算法复杂度和程序性能之间的关系五 执行什么语句耗时 xff1f 不同语句执行时间量级分析整型加和减 xff1a 浮点型加和减测
  • Mysql大量插入随机数据方法--存储过程

    案例1 创建测试表 xff1a mysql span class token operator gt span span class token keyword create span span class token keyword ta
  • 【LeetCode刷题日记】846. 一手顺子 + 复习C++ STL和java集合

    这几天看几个Thu大佬的刷题总结 xff0c 有点被震惊了 xff0c 要向他们学习 xff0c 2022年 xff0c LeetCode刷起来 xff01 题目 Alice 手中有一把牌 xff0c 她想要重新排列这些牌 xff0c 分成
  • 【LeetCode刷题日记】507. 完美数

    题目 对于一个 正整数 xff0c 如果它和除了它自身以外的所有 正因子 之和相等 xff0c 我们称它为 完美数 给定一个 整数 n xff0c 如果是完美数 xff0c 返回 true xff0c 否则返回 false 示例 1 xff

随机推荐