![]() |
Модераторы: Akina |
![]() ![]() ![]() |
|
AHTUxPK |
|
|||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 1.9.2011 Где: Пятигорск Репутация: нет Всего: нет |
Всем доброго времени суток.
Делаю программу для удобного управления несколькими серверами Counter Strike на одном компьютере, одна из нужных мне функций - остановка сервера. Но проблема в том, что все сервера имеют одинаковое имя процесса, а в интернете я нашёл только завершение программы по её названию или по имени процесса. Подскажите, как сделать завершение работы определённой программы, зная, где она находится (или зная порт, который используется сервером и т.п.). Программа и сервера находятся на одном компьютере. (Все сервера работают в консольном режиме, процессы имеют одинаковые названия) Заранее спасибо) UPD Итоги Это сообщение отредактировал(а) AHTUxPK - 30.1.2012, 15:46 |
|||
|
||||
Дмит |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 117 Регистрация: 21.4.2006 Где: г.Волгоград Репутация: 1 Всего: 9 |
Запуск сервера входит в управление? Если да, то запомни PID процесса и соответственно останавливай. Ещё, как вариант, можно различить процессы по времени работы, если есть окно, то по активности оного. |
|||
|
||||
AHTUxPK |
|
||||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 1.9.2011 Где: Пятигорск Репутация: нет Всего: нет |
Скромный вопрос, как? Запускаю я так:
text1 - расположение файла, text8 - параметры запуска файла. Может есть какой-то параметр запуска, по которому потом можно найти и закрыть процесс? Это сообщение отредактировал(а) AHTUxPK - 24.12.2011, 16:38 |
||||
|
|||||
AHTUxPK |
|
|||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 1.9.2011 Где: Пятигорск Репутация: нет Всего: нет |
Хотя нашёл, что функция shell возвращается pID - попробую с ней поработать
Подскажите, как в этой функции задавать рабочую папку? Это сообщение отредактировал(а) AHTUxPK - 25.12.2011, 22:56 |
|||
|
||||
Дмит |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 117 Регистрация: 21.4.2006 Где: г.Волгоград Репутация: 1 Всего: 9 |
у каждого сервера своя рабочая папка при одном запускаемом файле? тогда возможно указать в параметрах. как Вы запускаете в ручную? используете параметры? |
|||
|
||||
AHTUxPK |
|
||||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 1.9.2011 Где: Пятигорск Репутация: нет Всего: нет |
Каждый сервер имеет отдельную папку и свой файл hlds.exe, запускаю так: pID = Shell(Путь_к_папке_с_файлом & "\" & "hlds.exe" & " " & Параметры_запуска, 1) Чтобы запускать в ручную раньше использовал *.cmd файлы, которые находятся в каждой папке с сервером. Вот как работает с помощью ShellExecute
Это сообщение отредактировал(а) AHTUxPK - 26.12.2011, 09:33 |
||||
|
|||||
Дмит |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 117 Регистрация: 21.4.2006 Где: г.Волгоград Репутация: 1 Всего: 9 |
Shell("explorer.exe /e, D:\", 1)
ShellExecute(0, "open", "explorer.exe", "/e, D:\", "", SW_SHOWNORMAL) Пример с explorer - D:\ папка для запуска. Не знаю то ли Вы имели ввиду. |
|||
|
||||
AHTUxPK |
|
|||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 1.9.2011 Где: Пятигорск Репутация: нет Всего: нет |
Не, немного не то, у ShellExecute есть параметр, который прямо описывается как рабочая директория, поэтому вопроса по этой функции не возникает:
Private Declare Function ShellExecute Lib "shell32" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long Параметры: hWnd – идентификатор родительского окна. Указывать родительское окно не обязательно, можно просто 0 lpOperation – операция выполняемая с файлом. Может иметь следующие значения: «open» - открыть файл (папку), «print» - печатать текстовой документ, «explore» lpFile – файл или папка, которую нужно открыть lpParameters – параметры открытия файла, т.ч. запуска приложения. Используется только при запуске приложений lpDirectory – рабочая директория nShowCmd – параметры окна открытого файла (приложения, директории) А у функции Shell нет так отдельно вынесенного параметра, но она возвращает нужный pID... Это сообщение отредактировал(а) AHTUxPK - 27.12.2011, 13:05 |
|||
|
||||
Дмит |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 117 Регистрация: 21.4.2006 Где: г.Волгоград Репутация: 1 Всего: 9 |
Может CurDir после Shell ?
|
|||
|
||||
AHTUxPK |
|
|||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 1.9.2011 Где: Пятигорск Репутация: нет Всего: нет |
Да не, не получается так... |
|||
|
||||
AHTUxPK |
|
|||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 1.9.2011 Где: Пятигорск Репутация: нет Всего: нет |
Всё, подсказали точно как сделать на другом форуме.
получилось так:
|
|||
|
||||
AHTUxPK |
|
||||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 1.9.2011 Где: Пятигорск Репутация: нет Всего: нет |
Теперь осталось разобраться как закрывать программу, зная её pID, нагуглил я один способ:
Но это принудительное закрытие процесса. Вот пост с 1 форума:
Подскажите, кто знает, как получить hWnd окна (зная process ID и/или Handle) и передать окну определённое сочетание клавиш? (в моём случае Ctrl + C, ну закрытие консоли короче) Или просто мягкое закрытие программы? Лучше конечно передача сочетания клавиш, она мне для другой программы пригодится... Это сообщение отредактировал(а) AHTUxPK - 3.1.2012, 19:40 |
||||
|
|||||
AHTUxPK |
|
||||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 1.9.2011 Где: Пятигорск Репутация: нет Всего: нет |
Ура, кажется нашёл то, что нужно.
Получаем hwnd по pid. В модуль:
В кнопку:
|
||||
|
|||||
AHTUxPK |
|
||||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 1.9.2011 Где: Пятигорск Репутация: нет Всего: нет |
Научился отправлять нажатия клавиш по hwnd.
В модуль:
В кнопку:
Но никак не получается послать сочетание клавиш... P.s. Что-то моя тема превращается в монолог ![]() Это сообщение отредактировал(а) AHTUxPK - 7.1.2012, 15:10 |
||||
|
|||||
Дмит |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 117 Регистрация: 21.4.2006 Где: г.Волгоград Репутация: 1 Всего: 9 |
попробуйте нажать контрол до отсыла нажатия клавиши:
keybd_event(VK_CONTROL, 0, 0, 0) и после отпустить: keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0) впрочем в VB6 есть своя функция замена API (keybd_event) и я пользуюсь SendMessage для отсыла, их нюансы читайте в Helpe. Кстати, обязательно ли через клавиши, может быть так пройдёт как надо: SendMessage(hwnd , WM_CLOSE, 1, 0) или SendMessage(hwnd , WM_QUIT, 1, 0) Это сообщение отредактировал(а) Дмит - 10.1.2012, 14:01 |
|||
|
||||
AHTUxPK |
|
|||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 1.9.2011 Где: Пятигорск Репутация: нет Всего: нет |
Первый способ помог, большое спасибо, только пришлось вставить одну строчку:
Ибо если вообще без задержки команда иногда не успевала доходить, а контрол уже отжимался Это сообщение отредактировал(а) AHTUxPK - 10.1.2012, 21:22 |
|||
|
||||
AHTUxPK |
|
||||||||||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 1.9.2011 Где: Пятигорск Репутация: нет Всего: нет |
Подытожу всю работу кусочками кода:
Запускаем программу и возвращаем её pID.
Определяем hwnd по pID: Модуль:
Кнопка:
Посылаем сочетание клавиш для закрытия консоли по hwnd: Модуль:
И в код:
Дмитрию большое спасибо за помощь. Это сообщение отредактировал(а) AHTUxPK - 10.1.2012, 21:56 |
||||||||||
|
|||||||||||
AHTUxPK |
|
|||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 1.9.2011 Где: Пятигорск Репутация: нет Всего: нет |
![]() P.s. Никто так и не поможет с этой темой?( Это сообщение отредактировал(а) AHTUxPK - 15.2.2012, 14:10 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "VB6" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | VB6 | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |