Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: Сиистемааа Добавлено: 19.05.05 18:47  

Автор вопроса:  Дмитрий Щапов
Приём, приём.. проверка модема.

Ответить

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

Номер ответа: 1
Автор ответа:
 Дмитрий Щапов



Вопросов: 71
Ответов: 321
 Профиль | | #1 Добавлено: 19.05.05 18:47
Кхе..кхе..
1) Переключение между окнами ==> Активировать другое окно, свернуть, развернуть
2) Чей процесс ==> Какого пользователя
3) Список пользователей ==> загруженных и кто сейчас активен (сюда же можно ещё и незагруженных добавить)
4) 16 разрядные задачи ==> как их отсеять (определить)
5) Сервис ==> Установка и запуск сервиса + BONUS: как запретить или перехватить(а потом запретить) завершение процессов. Вот допустим я не хочуц чтобы мне завершали winlogon.exe (кстати попробуйте у себя и вы убедитесь что Windows может делать Тотально быструю перезагрузку)
6) Слежка за запуском программ ==> быть первым в курсе о запуске программ (как только юзер запустит прогу, можно даже - как только юзер подумает запустить прогу) наверно можно поставить хук на функцию Dll - Shell или как ? Постоянно доставать и смотреть Processes дело не самое оптимальное и надеюсь не единственное. Надо что бы так: Хоп - новая задача. Хоп - нет старой задачи. В общем по последней технологии "Два прихлопа, два притопа"
7) Процессы служб ==> необ; как узнать что процесс относится к какой-нить службе, или все SYSTEM и т.п. это службы?

Ответить

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


 

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

Вопросов: 236
Ответов: 8362
 Профиль | | #2 Добавлено: 19.05.05 22:28
ого! блин! Ну ладно...

1) Могу подарить мой модуль...

'HACKER Inc.
' ++++++++++++++++++++++++++ HACKER WORK WINDOW ++++++++++++++++++++++++++
'Модуль для работы с окнами                   (11.05.05)          ;(c) 2005


'go go go!


Const WM_CLOSE = &H10
Const WS_MINIMIZE = &H20000000 ' Style bit 'is minimized'
Const HWND_TOP = 0 ' Move to top of z-order
Const SWP_NOSIZE = &H1 ' Do not re-size window
Const SWP_NOMOVE = &H2 ' Do not reposition window
Const SWP_SHOWWINDOW = &H40 ' Make window visible/active
Const GW_HWNDFIRST = 0 ' Get first Window handle
Const GW_HWNDNEXT = 2 ' Get next window handle
Const GWL_STYLE = (-16) ' Get Window's style bits
Const SW_RESTORE = 9 ' Restore window
Const WS_VISIBLE = &H10000000 ' Window is not hidden
Const WS_BORDER = &H800000 ' Window has a border
Const WS_CLIPSIBLINGS = &H4000000 ' can clip windows
Const WS_THICKFRAME = &H40000 ' Window has thick border
Const WS_GROUP = &H20000 ' Window is top of group
Const WS_TABSTOP = &H10000 ' Window has tabstop
' API Functions Definition
Private Declare Function GetWindow Lib "user32" (ByVal hWnd As Long, ByVal wCmd As Long) As Long
Private Declare Function GetWindowWord Lib "user32" (ByVal hWnd As Long, ByVal nIndex As Long) As Integer
Private 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 GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hWnd As Long) As Long
Private Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Private Declare Function ShowWindow Lib "user32" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long
Private Declare Function BringWindowToTop Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function CloseWindow Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetActiveWindow Lib "user32" () As Long
Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hWnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Private Declare Function AnimateWindow Lib "user32" (ByVal hWnd As Long, ByVal dwTime As Long, ByVal dwflags As Long) As Boolean
Private Declare Function GetMenu Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function AppendMenu Lib "user32" Alias "AppendMenuA" (ByVal hMenu As Long, ByVal wFlags As Long, ByVal wIDNewItem As Long, ByVal lpNewItem As Any) 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

Private Declare Function GetForegroundWindow Lib "user32" () As Long


Const TH32CS_SNAPPROCESS As Long = 2&
Const MAX_PATH As Long = 260

Private Type PROCESSENTRY32
dwSize As Long
cntUsage As Long
th32ProcessID As Long
th32DefaultHeapID As Long
th32ModuleID As Long
cntThreads As Long
th32ParentProcessID As Long
pcPriClassBase As Long
dwflags As Long
szexeFile As String * MAX_PATH
End Type
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hWnd As Long, lpdwProcessId As Long) As Long
Private Declare Function CreateToolhelpSnapshot Lib "Kernel32" Alias "CreateToolhelp32Snapshot" (ByVal lFlgas As Long, ByVal lProcessID As Long) As Long
Private Declare Function ProcessFirst Lib "Kernel32" Alias "Process32First" (ByVal hSnapshot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Function ProcessNext Lib "Kernel32" Alias "Process32Next" (ByVal hSnapshot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Sub CloseHandle Lib "Kernel32" (ByVal hPass As Long)

Private Declare Function EnumWindows& Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long)
Private Declare Function IsWindowVisible& Lib "user32" (ByVal hWnd As Long)
Private Declare Function GetParent& Lib "user32" (ByVal hWnd As Long)
Dim sPattern As String, hFind As Long


' Public Task Item Structure
Public Type TASK_STRUCT
    TaskName As String
    TaskID As Long
End Type


'Structure filled by FillTaskList Sub call
Public TaskList(250) As TASK_STRUCT


Public Function Get_hWND_Window(WindowName$) As Long
'Возвращает хендл по имени
 Dim hWnd
 hWnd = FindWindow(vbNullString, WindowName$)
 Get_hWND_Window = hWnd
End Function

Public Function Get_Name_ActiveWindows() As String
'Возвращает имя активного
    Dim MyStr As String
    MyStr = String(GetWindowTextLength(GetForegroundWindow) + 1, Chr$(0))
    GetWindowText GetForegroundWindow, MyStr, Len(MyStr)
    Get_Name_ActiveWindows = MyStr
End Function

Public Function Get_hWnd_ActiveWindows() As Long
'Возвращает хендл активного
Get_hWnd_ActiveWindows = Get_hWND_Window(Get_Name_ActiveWindows)
End Function

Public Sub Get_AllWindow(hWnd As Long, OnlyVisible As Boolean, ShowWindowCaption As Boolean)
'Возвращает в Public Type TASK_STRUCT Имя и хендл всех окон
 i = FillTaskList(hWnd, OnlyVisible, ShowWindowCaption)
End Sub

Public Function AnimWindow(hwndWindows As Long, AnimTime As Long, AW_Flags)
'Анимация и эффекты для окна

'Значения для  AW_Flags:
'&H1        'Развертывание слева направо
'&H2        'Развертывание справа налево
'&H4        'Развертывание сверху вниз
'&H8        'Развертывание снизу вверх
'&H10       'Развертывание из центра
'&H10000    'Скрыть окно; Если этот флаг отсутствует - Показать
'&H20000    'Активизировать окно
'&H40000    'Скольжение
'&H80000    'Затемнение
'- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 AnimateWindow hwndWindows, AnimTime, AW_Flags
End Function

'---------------------------------------------------------------------------------------
Public Function Window_CloseByhWnd(hWnd As Long, meHwnd As Long)
'Закрывает окно по хенделу
SendMessage hWnd, WM_CLOSE, meHwnd, 0
End Function

Public Function Window_SetPos(hWnd As Long, hWndInsertAfter As Long, x As Long, y As Long, cx As Long, cy As Long, wFlags As Long)
'Перемещает окно в заданные кординаты по хендалу

'Описание переменных:
'hWnd - окно которое перемещает
'hWndInsertAfter - хендл этого окна после перемещения
'x - Кордината по высоте
'y - Кордината по ширине
'cx - Ширина окна
'cy - Высота окана
'wFlags - Х.З. :) (Вроде всегда ноль должен быть)
 SetWindowPos hWnd, hWndInsertAfter, x, y, cx, cy, 0
End Function

Public Function Window_ToTop(hWnd As Long)
'Перемещает окно на верх по хенделу
 BringWindowToTop (hWnd)
End Function

Public Function IsTask(hwndTask As Long) As Boolean
'Возвращает True или False является ли данное оконо видимым
 Dim WndStyle As Long
 Const IsTaskStyle = WS_VISIBLE Or WS_BORDER
 WndStyle = GetWindowLong(hwndTask, GWL_STYLE)
 If (WndStyle And IsTaskStyle) = IsTaskStyle Then IsTask = True
End Function

Public Function Window_Add_Menu(hWnd As Long, mnuCaption As String)
'Добавляет в окно пункт меню

'hWnd - Хендл окна к которому добавляем меню
'mnuCaption - Имя пункта меню

hMenu = GetMenu(hWnd)
Call AppendMenu(hMenu, 0, 0, mnuCaption)
End Function

Public Function Window_show(hWnd As Long, ShowOptions As Byte)
'Куча действий с окном

'Значения ShowOptions:

'0 - Hide
'3 - MAXIMIZE
'6 - MINIMIZE
'9 - RESTORE
'5 - SHOW
'10 -SHOWDEFAULT
'3 - SHOWMAXIMIZED
'2 - SHOWMINIMIZED
'7 - SHOWMINNOACTIVE
'8 - SHOWNA
'4 - SHOWNOACTIVATE
'1 - SHOWNORMAL
ShowWindow hWnd, ShowOptions
End Function
Public Function GetExeFromHandle(hWnd As Long) As String
'Получение полного пути exe-файла из его хэндла
Dim threadID As Long, processID As Long, hSnapshot As Long
Dim uProcess As PROCESSENTRY32, rProcessFound As Long
Dim i As Integer, szExename As String
threadID = GetWindowThreadProcessId(hWnd, processID)
If threadID = 0 Or processID = 0 Then Exit Function
hSnapshot = CreateToolhelpSnapshot(TH32CS_SNAPPROCESS, 0&;)
If hSnapshot = -1 Then Exit Function
uProcess.dwSize = Len(uProcess)
rProcessFound = ProcessFirst(hSnapshot, uProcess)
Do While rProcessFound
If uProcess.th32ProcessID = processID Then
i = InStr(1, uProcess.szexeFile, Chr(0))
If i > 0 Then szExename = uProcess.szexeFile
Exit Do
Else
rProcessFound = ProcessNext(hSnapshot, uProcess)
End If
Loop
Call CloseHandle(hSnapshot)
GetExeFromHandle = szExename
End Function

Public Function FillTaskList(hWnd As Long, OnlyVisible As Boolean, ShowWindowCaption As Boolean) As Integer
' Нахождения хенделов и имён всех окон и запись их в Public Type TASK_STRUCT
    Dim hwndTask As Long
    Dim intLen As Long
    Dim strTitle As String
    Dim strClass As String
    Dim intClass As Integer
    Dim cnt As Integer
    Dim bTask As Boolean

    For cnt = 0 To 250
        TaskList(cnt).TaskID = 0
        TaskList(cnt).TaskName = ""
    Next cnt
    
    cnt = 0
    ' process all top-level windows in master window list
    hwndTask = GetWindow(hWnd, GW_HWNDFIRST) ' get first window
    Do While hwndTask ' repeat for all windows

        If hwndTask <> hWnd Then
            bTask = IsTask(hwndTask)
           
            
            If bTask = True And OnlyVisible = True Or OnlyVisible = False Then
                intLen = GetWindowTextLength(hwndTask) + 1 ' Get length
                strTitle = Space(intLen) ' Get caption
                intLen = GetWindowText(hwndTask, strTitle, intLen)
    
                If intLen > 0 Then ' If we have anything, add it
                
                    If ShowWindowCaption = True Then
                        TaskList(cnt).TaskName = strTitle
                        TaskList(cnt).TaskID = hwndTask
                        cnt = cnt + 1
                    Else
                        strClass = Space(255)
                        intClass = GetClassName(hwndTask, strClass, 255)
                        strClass = Left(strClass, intClass)
                        TaskList(cnt).TaskName = strClass
                        TaskList(cnt).TaskID = hwndTask
                        cnt = cnt + 1
                    End If
                        
                End If
            End If
        End If
        
        hwndTask = GetWindow(hwndTask, GW_HWNDNEXT)
    Loop
    FillTaskList = cnt
End Function

' Give focus to another Task
Public Sub SwitchTo(hWnd As Long)
    Dim ret As Long
    Dim WStyle As Long ' Window Style bits

   ' Get style bits for window
    WStyle = GetWindowLong(hWnd, GWL_STYLE)
    ' If minimized do a restore
    If WStyle And WS_MINIMIZE Then
        ret = ShowWindow(hWnd, SW_RESTORE)
    End If
    ' Move window to top of z-order/activate; no move/resize
    ret = SetWindowPos(hWnd, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE Or SWP_SHOWWINDOW)
End Sub

Private Function EnumWinProc(ByVal hWnd As Long, ByVal lParam As Long) As Long
'Поиск hwnd процесса на панели задач
Dim k As Long, sName As String
If lParam <> 0 Then
    If IsWindowVisible(hWnd) And GetParent(hWnd) = 0 Then
        sName = Space$(128)
        k = GetWindowText(hWnd, sName, 128)
        If k > 0 Then
            sName = Left$(sName, k)
            If UCase(sName) Like UCase(sPattern) Then
                hFind = hWnd
                EnumWinProc = 0
                Exit Function
            End If
        End If
    End If
Else
    sName = Space$(128)
    k = GetWindowText(hWnd, sName, 128)
    If k > 0 Then
        sName = Left$(sName, k)
        If UCase(sName) Like UCase(sPattern) Then
            hFind = hWnd
            EnumWinProc = 0
            Exit Function
        End If
    End If
End If
EnumWinProc = 1
End Function
Public Function FindWindowWild(sWild As String, Optional OnlyTaskBar As Boolean = True) As Long      '(Вызывать эту!)
'Возвращает hwnd процесса на панели задач по имени
sPattern = sWild
EnumWindows AddressOf EnumWinProc, OnlyTaskBar
FindWindowWild = hFind
End Function
'-----------------------------------------


2,7)

'Методом "через попку"

Open "C:\tmp.bat" For Output As #1
Print #1, "tasklist /V > C:\file.txt"
Close #1
Shell "C:\tmp.bat"
Kill "C:\tmp.bat"

Open "C:\file.txt" For Input As #1
Do While Not EOF(1)
Line Input #1, Str$

'Ну далее разбираешь этот файл, анализируешь, ну итп...
Loop


как запретить или перехватить(а потом запретить) завершение процессов


Может просто получать список процесов, если какого-то нет (его завершили), то запустить его снова.

Ответить

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


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #3
Добавлено: 20.05.05 03:27
На большинство твоих вопросов ответ содержится в исходниках Process Explorer с www.sysinternals.com

Ответить

Номер ответа: 4
Автор ответа:
 Дмитрий Щапов



Вопросов: 71
Ответов: 321
 Профиль | | #4 Добавлено: 20.05.05 23:01
HACKER: Thank you

Sharp: И чем она мне поможет? Не посмотреть это конечно интересно. Прога хороша, стройна, красива.Но вот еслибы Mark Russinovich ещё и исходники выставил....эээхх(мечтательно глубоко вздохнул)...

Ответить

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


 

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

Вопросов: 236
Ответов: 8362
 Профиль | | #5 Добавлено: 21.05.05 00:58
КирасиД: Да я ж токо рад помочь :) Был бы инет ещё халявный вообще б всем проги писал в онлайне прям :)))

Ответить

Номер ответа: 6
Автор ответа:
 Дмитрий Щапов



Вопросов: 71
Ответов: 321
 Профиль | | #6 Добавлено: 21.05.05 18:41
НАРОД!
RegisterServiceProcess пишет что нет такого в kernel32.dll, но везде она числится в этой библе.
Может kernel сам не знает что в нём есть, а чего нет?

Что за на? Как мне ещё зарегить сервис.???

мля внтуре

Ответить

Номер ответа: 7
Автор ответа:
 Дмитрий Щапов



Вопросов: 71
Ответов: 321
 Профиль | | #7 Добавлено: 21.05.05 20:04
ну епрст!!!! Опера херова с её горящими клавами. Писал писал. вот пишу поновой..
----СУТЬ----
Где взять хэндл окна?! Вот достаю я GetProcesses. Выбираю какое-нить окно(видимое). Привожу X.Handle or X.MainWindowHandle к int32. Достаю через FindWindow хэндл этого же окна. Смотрю. Нисходится!!! Апи показывает нормальное, человеческое значение, а первое показ-ет.. Сумашествие какое-то. К Int64 даже боюсь приводить. Если я такое с таким значением вызову функцию... мне же ни одна апи не поверит.
Нафиг в Process мне нужет указатель(MainWindowHandle)?

Эпилог: Как из Process достать нормальный хрендл.

Ну Опера!.. Мать твою Lucent Technologies за ногу!!

Ответить

Номер ответа: 8
Автор ответа:
 Дмитрий Щапов



Вопросов: 71
Ответов: 321
 Профиль | | #8 Добавлено: 22.05.05 21:39

 Sharp: Я так понимаю у тебя исходники есть да?
Дай пожелуйста! Ну плиз! Ну всем святым прошу!

Ответить

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


 

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

Вопросов: 236
Ответов: 8362
 Профиль | | #9 Добавлено: 22.05.05 23:24
2 КирасиД Помойму мой модуль умеет выполнять все необходимые дейстивия над окнами, какие проблемы непойму?

Ответить

Номер ответа: 10
Автор ответа:
 Дмитрий Щапов



Вопросов: 71
Ответов: 321
 Профиль | | #10 Добавлено: 23.05.05 05:48
я достаю список задач с getProcesses(там больше инфы) и какое -нить окошечко хочу прикрыть. Что мне для этого нужно. Хендл. В Process есть указатели от которых толку.. Любо мне ещё раз доставать список через апи, сравнивать,но можно ошибиться с окном да и операции лишнии.

Ответить

Номер ответа: 11
Автор ответа:
 Дмитрий Щапов



Вопросов: 71
Ответов: 321
 Профиль | | #11 Добавлено: 24.05.05 18:29
Ну вот и всё. Осталось пару вещей
1) Может у кого-то есть код для глобального хука.
2) Где в Process хэндл окна. Ато не могу поюзать код HACKER'a :)

Ответить

Номер ответа: 12
Автор ответа:
 Дмитрий Щапов



Вопросов: 71
Ответов: 321
 Профиль | | #12 Добавлено: 26.05.05 19:53
хм.. всё ясно..
Ну чтож. Хакеру ещё раз спасибо за код.

Что-то я стал доверять мысли что Google лучше Yandex'a

Ответить

Страница: 1 |

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



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