Страница: 1 |
Доброго утра всем. Такая трабла: не могу закрыть программу. Запускаю из своей проги другую свою же прогу. Она запрашивает доступ к объекту. Получив его, снимает с него данные и самовыгружается. Если вдруг юзер нажмет кнопку отмена до самовыгрузки программы, то она так и висит в памяти, занимая 40 Мб. Посылка WM-QUIT и т.п. не неё не деиствует. Можно ли как её заставить откликаться на сообщения? Пытался в таймере отслеживать состояние текстбокса в запустившей программе - результат только то, что затыкается таймер. Программа по прежнему висит в памяти
WM_QUIT и не сработает - окна закрыты. Нужно будет убивать процесс GetWindowThreadProcessId? Ты же говориш , что это твоя программа Так почему ты не можешь запретить отмену выгрузки? хошь функцию убиения процесса по полному пути к exe_шнику? на тебе её ) тока без объявлений, т.к. с проекта выдирал, а там где чего объявлено уже не помню... ну думаю разберёшься. в качестве параметра - полный путь к убиваемому ) Public Function KillApp(myName As String) As Boolean 'убиение процессов по пути к exe_шнику uProcess.dwSize = Len(uProcess) Do While rProcessFound > хошь функцию убиения процесса по полному пути к exe_шнику? В XP структура Process32Entry не содержит полный путь к ехешнику, надо юзать Module32Entry. Убивать процесс и завершить программу, это две разные вещи! Лучше найти все окошки даннного процесса, и по очереди их все закрыть... А уже после этого посмотреть, завершился ли процесс, и если нет - убить его. Так хоть программе дается какой-то шанс завершится корректно, сохранить настройки и и.д. ... Страница: 1 |
Вопрос: Как закрыть программу?
Добавлено: 18.04.04 07:52
Автор вопроса: cresta
Ответы
Всего ответов: 9
Номер ответа: 1
Автор ответа:
dNW
Вопросов: 30
Ответов: 683
Профиль | | #1
Добавлено: 18.04.04 08:05
Номер ответа: 2
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #2
Добавлено: 18.04.04 19:50
А как его убить? TerminateProcess требует параметр hProcess, а где его взять - не знаю. hWnd есть, hInstance - есть, а hProcess'a нету
Номер ответа: 3
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #3
Добавлено: 18.04.04 20:08
Номер ответа: 4
Автор ответа:
dNW
Вопросов: 30
Ответов: 683
Профиль | | #4
Добавлено: 19.04.04 08:18
Номер ответа: 5
Автор ответа:
Justas
ICQ: 259418212
Вопросов: 24
Ответов: 325
Web-сайт:
Профиль | | #5
Добавлено: 28.04.04 03:46
Const PROCESS_ALL_ACCESS = 0
Dim uProcess As PROCESSENTRY32
Dim rProcessFound As Long
Dim hSnapshot As Long
Dim szExename As String
Dim exitCode As Long
Dim myProcess As Long
Dim AppKill As Boolean
Dim appCount As Integer
Dim i As Integer
On Local Error GoTo Finish
appCount = 0
hSnapshot = CreateToolhelpSnapshot(TH32CS_SNAPPROCESS, 0&
rProcessFound = ProcessFirst(hSnapshot, uProcess)
i = InStr(1, uProcess.szExeFile, Chr(0))
szExename = LCase$(Left$(uProcess.szExeFile, i - 1))
If Right$(szExename, Len(myName)) = LCase$(myName) Then
KillApp = True
appCount = appCount + 1
myProcess = OpenProcess(PROCESS_ALL_ACCESS, False, uProcess.th32ProcessID)
AppKill = TerminateProcess(myProcess, exitCode)
Call CloseHandle(myProcess)
Call CloseHandle(hSnapshot)
Exit Function
End If
rProcessFound = ProcessNext(hSnapshot, uProcess)
Loop
Call CloseHandle(hSnapshot)
Finish:
End Function
Номер ответа: 6
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #6
Добавлено: 28.04.04 09:24
Спасибо.
Номер ответа: 7
Автор ответа:
Justas
ICQ: 259418212
Вопросов: 24
Ответов: 325
Web-сайт:
Профиль | | #7
Добавлено: 28.04.04 09:35
помогло? да всегда пожалуйста ))
Номер ответа: 8
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #8
Добавлено: 28.04.04 22:53
Номер ответа: 9
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #9
Добавлено: 29.04.04 01:08