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

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);
                }
  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值