Visual Basic, .NET, ASP, VBA, VBScript
 
  Библиотека кодов  
  Общие вопросы работы с программой  
     
  Снять задачу  
 

Автор: vmv

При работе, а чаще всего, при отладке програм связанных с открытием-закрытием приложений (например с XL) бывают ситуации, когда после активации приложения происходит сбой программы. Приложение остается в памяти и последующий старт программы загружает еще одно такое же приложение ... При старте программы необходимо проверить загружено ли приложение в память, и если - да, то предварительно снять задачу. Закрыть приложение (на примере с Excel) и снять задачу( как и любое другое ), оставшееся в памяти можно таким образом.
' помещаем в модуль

Public Const PROCESS_TERMINATE = &H1
Public Const WM_QUERYENDSESSION = &H11
Public Const WM_ENDSESSION = &H16
Public Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Public Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Public Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
Public Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Public Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Const WM_CLOSE = &H10
Dim strCaptions() As String ' Здесь будут лежать заголовки всех найденных окон
Dim lngHandle() As Long ' А здесь все хэндлы этих окон
Public Function CloseProg(strCaption As String) As Boolean
Dim iCount As Integer
Dim i As Integer
Dim Pos As Integer
Dim lngEnum As Long
ReDim strCaptions(0)

     ReDim lngHandle(0)' Обнуляем массив от возможных прошлых результатов
     lngEnum = EnumWindows(AddressOf Callback1_EnumWindows, 0)' то же чистим

     For i = 0 To UBound(strCaptions) ' перебираем эти массивы
         Pos = InStr(1, strCaptions(i), strCaption, vbTextCompare) ' ищем строку - название окна
         If Pos > 0 Then
         SendMessage lngHandle(i), WM_CLOSE, 0, 0
         SendMessage lngHandle(i), WM_ENDSESSION, 0, 0
         SendMessage lngHandle(i), WM_QUERYENDSESSION, 0, 0
         ' будут закрыты все окна с таким названием окна
         iCount = iCount + 1
         End If
     Next
End Function


Public Function Callback1_EnumWindows(ByVal hwnd As Long, ByVal lpData As Long) As Long
Dim cnt As Long
Dim rttitle As String * 256
     cnt = GetWindowText(hwnd, rttitle, 255) ' ищем следующее окно
     If cnt > 0 Then ' нашли, тогда добавляем элемент в массивы
         ReDim Preserve lngHandle(UBound(strCaptions) + 1)
         ReDim Preserve strCaptions(UBound(strCaptions) + 1)
         strCaptions(UBound(strCaptions)) = Left$(rttitle, cnt)
         lngHandle(UBound(lngHandle)) = hwnd
     End If
     Callback1_EnumWindows = 1 ' продолжаем перебирать
End Function
'-------

' в Private Sub Form_Load() помещаем
   CloseProg "Microsoft Excel - ****" ' где **** - имя приложения
   ' затем
   XL.Workbooks.Open App.Path & "\****.xls" ' открываем приложение

Примечание: имя приложения - "Microsoft Excel - ****" можно уточнить (при XL.Visible = True) через Ctrl-Alt-Del
 
     
  VBNet online (всего: 51608)  
 

Логин:

Пароль:

Регистрация, забыли пароль?


В чате сейчас человек
 
     
  VBNet рекомендует  
   
     
  Лучшие материалы  
 
ActiveX контролы (112)
Hitman74_Library (36119)
WindowsXPControls (20739)
FlexGridPlus (19374)
DSMAniGifControl (18295)
FreeButton (15157)
Примеры кода (546)
Parol (18027)
Passworder (9299)
Screen saver (7654)
Kerish AI (5817)
Folder_L (5768)
Статьи по VB (136)
Мое второе впечатление... (11236)
VB .NET: дорога в будущее (11161)
Основы SQL (9225)
Сообщения Windows в Vi... (8788)
Классовая теория прогр... (8619)
 
     
Техническая поддержка MTW-хостинг | © Copyright 2002-2011 VBNet.RU | Пишите нам