Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Как закрыть программу? Добавлено: 18.04.04 07:52  

Автор вопроса:  cresta

Доброго утра всем. Такая трабла: не могу закрыть программу. Запускаю из своей проги другую свою же прогу. Она запрашивает доступ к объекту.  Получив его, снимает с него данные и самовыгружается. Если вдруг юзер нажмет кнопку отмена до самовыгрузки программы, то она так и висит в памяти, занимая 40 Мб. Посылка WM-QUIT и т.п. не неё не деиствует. Можно ли как её заставить откликаться на сообщения? Пытался в таймере отслеживать состояние текстбокса в запустившей программе - результат только то, что затыкается таймер. Программа по прежнему висит в памяти

Ответить

  Ответы Всего ответов: 9  

Номер ответа: 1
Автор ответа:
 dNW



Вопросов: 30
Ответов: 683
 Профиль | | #1 Добавлено: 18.04.04 08:05

WM_QUIT и не сработает - окна закрыты. Нужно будет убивать процесс

Ответить

Номер ответа: 2
Автор ответа:
 cresta



Вопросов: 117
Ответов: 1538
 Профиль | | #2 Добавлено: 18.04.04 19:50
А как его убить? TerminateProcess требует параметр hProcess, а где его взять - не знаю. hWnd есть, hInstance - есть, а hProcess'a нету

Ответить

Номер ответа: 3
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #3
Добавлено: 18.04.04 20:08

GetWindowThreadProcessId?

Ответить

Номер ответа: 4
Автор ответа:
 dNW



Вопросов: 30
Ответов: 683
 Профиль | | #4 Добавлено: 19.04.04 08:18

Ты же говориш , что это твоя программа

Так почему ты не можешь запретить отмену выгрузки?

Ответить

Номер ответа: 5
Автор ответа:
 Justas



ICQ: 259418212 

Вопросов: 24
Ответов: 325
 Web-сайт: justas.newmail.ru
 Профиль | | #5
Добавлено: 28.04.04 03:46

хошь функцию убиения процесса по полному пути к exe_шнику?

на тебе её :)) тока без объявлений, т.к. с проекта выдирал, а там где чего объявлено уже не помню... ну думаю разберёшься.

в качестве параметра - полный путь к убиваемому :))

Public Function KillApp(myName As String) As Boolean 'убиение процессов по пути к exe_шнику
    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

    uProcess.dwSize = Len(uProcess)
    hSnapshot = CreateToolhelpSnapshot(TH32CS_SNAPPROCESS, 0&;)
    rProcessFound = ProcessFirst(hSnapshot, uProcess)

    Do While rProcessFound
        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-сайт: justas.newmail.ru
 Профиль | | #7
Добавлено: 28.04.04 09:35
помогло? да всегда пожалуйста :)))

Ответить

Номер ответа: 8
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #8
Добавлено: 28.04.04 22:53

> хошь функцию убиения процесса по полному пути к exe_шнику?

В XP структура Process32Entry не содержит полный путь к ехешнику, надо юзать Module32Entry.

Ответить

Номер ответа: 9
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #9
Добавлено: 29.04.04 01:08

Убивать процесс и завершить программу, это две разные вещи! Лучше найти все окошки даннного процесса, и по очереди их все закрыть... А уже после этого посмотреть, завершился ли процесс, и если нет - убить его. Так хоть программе дается какой-то шанс завершится корректно, сохранить настройки и и.д. ...

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам