Модераторы: feodorv, GremlinProg, xvr, Fixin

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как сделать, чтобы putty открывалась при запуске 
V
    Опции темы
winsent7
Дата 24.1.2011, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 3.9.2010

Репутация: нет
Всего: нет



Здравствуйте, идея вот в чем: хочу модернизировать программу записи в файл так, чтобы она сама открывала putty и отправляла строки не в файл, а в сразу в устройство, основная проблема: как сделать, чтобы программа открывала терминал, может кто подскажет? 
PM MAIL   Вверх
RastaDja
Дата 24.1.2011, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 1.11.2010

Репутация: нет
Всего: 5



если просто запустить, тогда ShellExecute() или WinExec()
Вот код для проводника
Код

ShellExecute(m_hWnd, "open", "c:\\windows\\explorer.exe", NULL, NULL, SW_SHOWNORMAL);

WinExec("c:\\windows\\explorer.exe",SW_SHOW);


Добавлено через 57 секунд
чуть не забыл smile , надо shellapi.h включить


--------------------
The more closely you look at one thing, the less closely can you see something else.
PM MAIL   Вверх
winsent7
Дата 25.1.2011, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 3.9.2010

Репутация: нет
Всего: нет



Спасибо. Еще поясните пож-ста.
1. А в чем разница, если ее нет,  то WinExec() короче  :scratch_, one-s_head, и что значит SW_SHOW ?
2. При запуске выводится сообщение о подтверждении запуска putty, как это в программе указать?
3. Потом еще надо параметры подключения выставлять(скорость, номер порта)
Вобщем хочется, чтобы программа сама все это сделала и предложила уже ввести логин и пароль входа в устройство.   
 


Это сообщение отредактировал(а) winsent7 - 25.1.2011, 09:54
PM MAIL   Вверх
jonie
Дата 25.1.2011, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 7
Всего: 118



WinExec не использовать - она устарела и будет удалена в дальнейшем.
Цитата

Note  This function is provided only for compatibility with 16-bit Windows. Applications should use the CreateProcess function.
(с) MSDN

Цитата

3. Потом еще надо параметры подключения выставлять(скорость, номер порта)

у патти есть коммандная строка - изучайте и прописывайте в неё что надо


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
winsent7
Дата 25.1.2011, 10:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 3.9.2010

Репутация: нет
Всего: нет



Спасибо, буду изучать.
PM MAIL   Вверх
winsent7
Дата 26.1.2011, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 3.9.2010

Репутация: нет
Всего: нет



Не решается проблема запуска cmd - при выполнении программы появляется окно cmd, но написано там "Для продолжения нажмите любую клавишу...", после нажатия оной окно исчезает. Подскажите пож-ста что не так. Спасибо.
Код

#include <windows.h>

int main()
{
    
    ShellExecute(NULL,TEXT("open"),TEXT("c:\\windows\\cmd.exe"), NULL, NULL, SW_SHOWNORMAL);

        return 0;
}

 PS. с shellapi.h не работает почему-то (Visual 2008 EE)
PM MAIL   Вверх
xvr
Дата 26.1.2011, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



Цитата(winsent7 @  26.1.2011,  11:13 Найти цитируемый пост)
Подскажите пож-ста что не так.
Не так путь к cmd. У меня на машине он лежит в C:\WINNT\system32\cmd.exe, на другой машине он может лежать в C:\windows\system32\cmd.exe, а на третьей вообще где угодно  smile (ну или почти где угодно)

Вопрос - нафига вам cmd? Вы же putty запускать собирались.



PM MAIL   Вверх
winsent7
Дата 26.1.2011, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 3.9.2010

Репутация: нет
Всего: нет



Цитата

Вопрос - нафига вам cmd? Вы же putty запускать собирались

так мне по-любому нужна функция запуска cmd, а потом из cmd уже запускать сессию putty,
может  так прокатит?
 
ShellExecute(NULL,TEXT("open"),TEXT("c:\\windows\\system32\\cmd.exe\\putty -load "session""), NULL, NULL, SW_SHOWNORMAL);

Добавлено @ 12:04
не прокатило...

мне сразу надо в корневой попасть, это наверное в пятом параметре указывается?



Это сообщение отредактировал(а) winsent7 - 26.1.2011, 12:19
PM MAIL   Вверх
xvr
Дата 26.1.2011, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



Цитата(winsent7 @  26.1.2011,  11:55 Найти цитируемый пост)
так мне по-любому нужна функция запуска cmd, а потом из cmd уже запускать сессию putty,
Не надо, запускайте сразу putty, он же не .bat файл, что бы cmd им кормить  smile 

Цитата(winsent7 @  26.1.2011,  11:55 Найти цитируемый пост)
может  так прокатит?
Нет

Код

ShellExecute(NULL,TEXT("open"),TEXT("putty"),TEXT("-load \"session\""), NULL, SW_SHOWNORMAL); 


PM MAIL   Вверх
winsent7
Дата 26.1.2011, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 3.9.2010

Репутация: нет
Всего: нет



В таком виде
Код

#include <windows.h>



int main()
{
    
    ShellExecute(NULL,TEXT("open"),TEXT("putty"),TEXT(" -load \"session\""),NULL, SW_SHOWNORMAL);

        return 0;
}

 результат
Цитата

при выполнении программы появляется окно cmd, но написано там "Для продолжения нажмите любую клавишу...", после нажатия оной окно исчезает.

буду пробовать разобраться, спасибо

Это сообщение отредактировал(а) winsent7 - 26.1.2011, 15:02
PM MAIL   Вверх
xvr
Дата 26.1.2011, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



Цитата(winsent7 @  26.1.2011,  12:59 Найти цитируемый пост)
результат
У вас на putty пути прописаны? Если просто открыть окно cmd и набрать там putty, что получается?


PM MAIL   Вверх
winsent7
Дата 28.1.2011, 20:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 3.9.2010

Репутация: нет
Всего: нет



Цитата

Если просто открыть окно cmd и набрать там putty, что получается?

запускается, но если предварительно положить ее в место где по умолчанию открывается cmd(может подскажете заодно как сделать, чтобы при запуске я в C:\ сразу оказывался. smile )

мне кажется проблема в том, что  программа пытается открыть putty там, где его нет, но пока не могу понять как отправить в нужное место.
Когда я просто запускаю через свою программу cmd(путь - TEXT("c:\\windows\\system32\\cmd.exe")), 
то вижу это - c:\Visual Studio\Projects\cmd\cmd> , соответственно когда параметр указываешь "Putty", программа не понимает где искать, наверное...
PM MAIL   Вверх
xvr
Дата 28.1.2011, 20:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



Цитата(winsent7 @  28.1.2011,  20:29 Найти цитируемый пост)
но пока не могу понять как отправить в нужное место.

Не надо его никуда направлять  smile В системе есть такое понятие, как переменные окружения (откройте cmd и наберите там set - увидите большой большой список). И в нем есть такая переменная, PATH называется (наберите set PATH) В этой переменной перечислены (через ';') пути, где система будет искать любую вашу программу, если вы не снабдили ее полным путем при запуске. Надо добавить туда путь на putty, и все будет запускаться. (Добавить можно через Мой Компьютер->Свойства->Дополнительно->Переменные среды)

Либо запускать putty через ShellExecute с полным путем (где он там у вас лежит?)

Добавлено через 3 минуты и 6 секунд
Цитата(winsent7 @  28.1.2011,  20:29 Найти цитируемый пост)
может подскажете заодно как сделать, чтобы при запуске я в C:\ сразу оказывался. 

Сделайте ярлык для cmd и пропишите ему в Свойствах C:\ в 'Рабочую папку'

PM MAIL   Вверх
winsent7
Дата 30.1.2011, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 3.9.2010

Репутация: нет
Всего: нет



xvr, спасибо, буду экпериментировать.
PM MAIL   Вверх
winsent7
Дата 1.2.2011, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 3.9.2010

Репутация: нет
Всего: нет



Сессия запускается, но надо нажать Enter, чтобы предложили ввести логин и пароль, как бы это программно сделать? 
PM MAIL   Вверх
winsent7
Дата 2.2.2011, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 3.9.2010

Репутация: нет
Всего: нет



Видимо, с помощью SendInput(), осталось с параметрами разобраться  smile 
PM MAIL   Вверх
winsent7
Дата 4.2.2011, 09:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 3.9.2010

Репутация: нет
Всего: нет



Что-то не получается, подскажите пож-ста, наверное, косяк с названием Enter.
Код

#include <windows.h>


int main()
{
    
    ShellExecute(NULL,TEXT("open"),TEXT("c:\\putty.exe"),TEXT(" -load \"COM\""),NULL,SW_SHOWNORMAL);

     INPUT it[2];
 
                 it[0].type = INPUT_KEYBOARD;
                 it[0].ki.wVk = VK_ENTER;

     it[1].type = INPUT_KEYBOARD;
                 it[1].ki.wVk = VK_ENTER;
     it[1].ki.dwFlags = KEYEVENTF_KEYUP;
                    
                 SendInput(2,it, sizeof(it));


           

        return 0;
}
 
В таком виде пишет " необъявленный идентификатор VK_ENTER"
Спасибо.

Добавлено @ 09:41
Только что нашел(полдня не мог найти) - VK_RETURN, буду пробовать

Это сообщение отредактировал(а) winsent7 - 4.2.2011, 09:42
PM MAIL   Вверх
winsent7
Дата 4.2.2011, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 3.9.2010

Репутация: нет
Всего: нет



Не работает, компилится без ошибок, но эфеект имеет странный, после попытки запуска моей программы, putty не реагирует потом на ENTER, что бы это могло быть? 
PM MAIL   Вверх
winsent7
Дата 4.2.2011, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 3.9.2010

Репутация: нет
Всего: нет



Цитата

putty не реагирует потом на ENTER
с этим разобрался, теперь просто не работает, как будто и нет вовсе SendInput() в коде, проверил тот же код на командной строке - работает: открывает cmd и нажимает там Enter smile , нужна помощь!
PM MAIL   Вверх
winsent7
Дата 10.2.2011, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 3.9.2010

Репутация: нет
Всего: нет



Цитата

не работает, как будто и нет вовсе SendInput() в коде, проверил тот же код на командной строке - работает: открывает cmd и нажимает там Enter  , нужна помощь! 


Неужели ни у кого нет идей?
Код

#include <windows.h>

int main()
{
    
    ShellExecute(NULL,TEXT("open"),TEXT("c:\\putty.exe"),TEXT(" -load \"COM1\""),NULL,SW_SHOWNORMAL);

    INPUT it[1];
    memset(it,0,sizeof(INPUT));
 
                 it[0].type = INPUT_KEYBOARD;
                 it[0].ki.wVk = VK_RETURN;
        
                    SendInput(1,it, sizeof(INPUT));
            
    
        return 0;
}





Это сообщение отредактировал(а) winsent7 - 10.2.2011, 14:49
PM MAIL   Вверх
xvr
Дата 10.2.2011, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



Попробуй добавить небольшие задержки между (и перед) SendInput

Добавлено @ 16:48
PS. Кстати - а где второй вызов SendInput с KEYEVENTF_KEYUP?


Это сообщение отредактировал(а) xvr - 10.2.2011, 16:50
PM MAIL   Вверх
winsent7
Дата 11.2.2011, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 3.9.2010

Репутация: нет
Всего: нет




Цитата

Попробуй добавить небольшие задержки между (и перед) SendInput

Да, теперь все работает как надо - Sleep() перед  SendInput, 
Спасибо всем!  

Цитата

PS. Кстати - а где второй вызов SendInput с KEYEVENTF_KEYUP?

без этого работает, кстати , почему?



PM MAIL   Вверх
xvr
Дата 11.2.2011, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



Цитата(winsent7 @  11.2.2011,  11:50 Найти цитируемый пост)
без этого работает, кстати , почему?
Сильно зависит от приложения, кому отправляют SendInput. Некоторые могут игнорировать события отпускания кнопок (скорее даже - почти все игнорируют), а некоторые могут ловить. Так что лучше все же их посылать (для надежности)


PM MAIL   Вверх
winsent7
Дата 11.2.2011, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 3.9.2010

Репутация: нет
Всего: нет



xvr, спасибо за ответы!
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0748 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.