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