Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

Страница: 1 |

 

  Вопрос: Как получить имя нового окна Добавлено: 01.10.05 21:26  

Автор вопроса:  999 | Web-сайт: wolf002.narod.ru
Может у кого есть исходник того, как можно узнать когда и какие проги были запущены на компе, желательно конечно с лог файлом.
Т.Е. нужно получить время и имя нового приложение или окна в запущенного системе.

Ответить

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

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


 

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

Вопросов: 236
Ответов: 8362
 Профиль | | #1 Добавлено: 02.10.05 05:33
даже если есть... что тебе с чужый исходников? Разобраться в чужём коде - проше написать самому. Могу подкинуть примеры получения списка окон, списка прог. Ну а далее через какой-то промежуток времени получать список прог и сранивать с предыдущим, те которые есть в новом и нет в придыдщем - новые.

Ответить

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



Вопросов: 13
Ответов: 26
 Web-сайт: wolf002.narod.ru
 Профиль | | #2
Добавлено: 02.10.05 13:52
а что ни как нельзя узнать о том какие проги были вновь запущены, только сравнивая со списком раннее запущенных

Ответить

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



Вопросов: 20
Ответов: 285
 Профиль | | #3 Добавлено: 02.10.05 15:07
А тебе что предлагают?

Ответить

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



ICQ: 247906854 

Вопросов: 133
Ответов: 882
 Web-сайт: neco.pisem.net
 Профиль | | #4
Добавлено: 05.10.05 01:57
Если тебя интересуют проги только с графическим интерфейсом, то можно установить хук на операции с окнами (подробнее, если заинтересует и когда приду домой) и тогда проводить перепроверку количества и состояния окон можно будет только при действительном изменении списка окон, а не раз в секунду.
Если же нужны все проги (и консольные в том числе), то тут дело пахнет керосином - надо писать библиотеку по перехвату API, внедрять её во все действующие процессы, заменять адреса вызовов части функций на адреса своих функций, потом при входе в эти функции информировать своё главное окно и... радоваться жизни.
Честно скажу, что когда я всё это реализовал, желание писать прогу у меня уже пропало, поэтому надо ОЧЕНЬ хотеть, чтобы это сделать.

Ответить

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



Вопросов: 13
Ответов: 26
 Web-сайт: wolf002.narod.ru
 Профиль | | #5
Добавлено: 05.10.05 22:26
Да если че есть дай почитать о хуках на VB и о перехвате API. или кидай сюды wolf002@narod.ru

Ответить

Номер ответа: 6
Автор ответа:
 HACKER


 

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

Вопросов: 236
Ответов: 8362
 Профиль | | #6 Добавлено: 05.10.05 23:05
перехват апи - не вб, wasm.ru, для всех окон нужно тогда глобальный устанавливать - тоже не вб...

Ответить

Номер ответа: 7
Автор ответа:
 Neco



ICQ: 247906854 

Вопросов: 133
Ответов: 882
 Web-сайт: neco.pisem.net
 Профиль | | #7
Добавлено: 06.10.05 00:40
Хук на окна на vb:
---------Форма------------
Private Sub Form_Load()
  Text1 = ""
  Caption = "Shell log"
  uRegMsg = RegisterWindowMessage(ByVal "SHELLHOOK";)
  Call RegisterShellHook(hwnd, RSH_REGISTER Or RSH_REGISTER_TASKMAN Or RSH_REGISTER_PROGMAN)
  OldProc = GetWindowLong(hwnd, GWL_WNDPROC)
  SetWindowLong hwnd, GWL_WNDPROC, AddressOf WndProc
End Sub

Private Sub Form_Resize()
  Text1.Move 0, 0, ScaleWidth, ScaleHeight
End Sub

Private Sub Form_Unload(Cancel As Integer)
    Call RegisterShellHook(hwnd, RSH_DEREGISTER)
    SetWindowLong hwnd, GWL_WNDPROC, OldProc
End Sub
---------Модуль-----------
' Bas module for implementing system - wide shell hook.
' Using undocumented Shell32 function RegisterShellHook.
' Thanks to James Holderness for his help on using this function.
' You can find many othar undoc shell32 functions at
' http://www.geocities.com/SiliconValley/4942/contents.html

Public Declare Function RegisterWindowMessage Lib "user32" Alias "RegisterWindowMessageA" (ByVal lpString As String) As Long
Public Declare Function RegisterShellHook Lib "Shell32" Alias "#181" (ByVal hwnd As Long, ByVal nAction As Long) As Long
Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Private Declare Function GetKeyboardLayout Lib "user32" (ByVal dwLayout As Long) As Long
Private Declare Function GetLocaleInfo Lib "kernel32" Alias "GetLocaleInfoA" (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String, ByVal cchData As Long) As Long

Public Const GWL_WNDPROC = (-4)

Public Const RSH_DEREGISTER = 0
Public Const RSH_REGISTER = 1
Public Const RSH_REGISTER_PROGMAN = 2
Public Const RSH_REGISTER_TASKMAN = 3

Const HSHELL_ACTIVATESHELLWINDOW = 3
Const HSHELL_WINDOWCREATED = 1
Const HSHELL_WINDOWDESTROYED = 2
Const HSHELL_WINDOWACTIVATED = 4
Const HSHELL_GETMINRECT = 5
Const HSHELL_REDRAW = 6
Const HSHELL_TASKMAN = 7
Const HSHELL_LANGUAGE = 8
Const HSHELL_ACCESSIBILITYSTATE = 11
Const LOCALE_SENGLANGUAGE As Long = &H1001
Public OldProc As Long, uRegMsg As Long

Public Function WndProc(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
  If wMsg = uRegMsg Then
     ;Dim sText As String
     Select Case wParam
            Case HSHELL_WINDOWCREATED
                 sText = "Window created. Caption = " & GetWndText(lParam) & " Handle = " & lParam
            Case HSHELL_WINDOWDESTROYED
                 sText = "Window destroyed. Caption = " & GetWndText(lParam) & " Handle = " & lParam
            Case HSHELL_WINDOWACTIVATED
                 sText = "Window activated. Caption = " & GetWndText(lParam) & " Handle = " & lParam
            Case HSHELL_LANGUAGE
                 ;Dim LocId As Long
                 ;Debug.Print "!!!"
                 LocId = LoWord(GetKeyboardLayout(0&;))
                 sText = "Language changed to " & GetLanguageInfo(LocId, LOCALE_SENGLANGUAGE)
            Case HSHELL_GETMINRECT
                 sText = "Get Window RECT"
            Case HSHELL_REDRAW
                 sText = "Title in taskbar has been redrawn. Caption = " & GetWndText(lParam) & " Handle = " & lParam
            Case HSHELL_TASKMAN
                 sText = "Task Manager activated"
            Case HSHELL_ACTIVATESHELLWINDOW
                 sText = "Shell window activated"
            Case Else
                 sText = "Unknown... " + CStr(wParam) + " " + CStr(lParam)
     End Select
     Form1.Text1 = Form1.Text1 & sText & vbCrLf
  Else
' WndProc = CallWindowProc(OldProc, hwnd, wMsg, wParam, lParam)
  End If
     WndProc = CallWindowProc(OldProc, hwnd, wMsg, wParam, lParam)
End Function

Private Function GetWndText(hwnd As Long) As String
  ;Dim k As Long, sName As String
  sName = Space$(128)
  k = GetWindowText(hwnd, sName, 128)
  If k > 0 Then sName = Left$(sName, k) Else sName = "No caption"
  GetWndText = sName
End Function

Private Function LoWord(DWORD As Long) As Integer
   If DWORD And &H8000& Then
      LoWord = &H8000 Or (DWORD And &H7FFF&;)
   Else
      LoWord = DWORD And &HFFFF&
   End If
End Function

Private Function GetLanguageInfo(ByVal dwLocaleID As Long, ByVal dwLCType As Long) As String
   ;Dim sReturn As String, nRet As Long
   sReturn = String$(128, 0)
   nRet = GetLocaleInfo(dwLocaleID, dwLCType, sReturn, Len(sReturn))
   If nRet > 0 Then GetLanguageInfo = Left$(sReturn, nRet - 1)
End Function
-------------------------
О перехвате АПИ лучше Рихтера никто не объяснит. Единственное "но", так это то, что, имхо, его нужно от корки до корки прочесть, чтобы особо вопросов не возникало. Но читается легко и быстро, поэтому не проблема. Ну и пожалуй второе "но" - его способ внедрения: он перечислял все процессы, внедрял в них библии, а потом ещё следил за тем, чтобы все новые процессы тоже содержали код библиотеки (перехват CreateProcess). Но куда как проще установить глобальный хук и тогда проги сами будут подгружать библию автоматом - немного меньше гимора, хотя службы не будут просекаться. Ну и фиг с ними!

Ответить

Страница: 1 |

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



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