VR
Virtual Reality On-line   VB
Новости   |     Журнал    |    Хаkер   |     Магазин   |   Проекты
[   Вход    ]
[Kарта сайтa]
[ Download  ]
[  Конкурс  ]
[  Анекдоты ]
[  Ссылки   ]
[  Реклама  ]
[ Почтальон ]
[ О проекте ]






TopList
Visual Basic.
Ожидание завершения проги
:

В этой статье описывается даже не программа, а всего лишь часть кода. Каждый сможет найти ему применение. В одном из выпусков VR-Online была статья, о создании на Делфи приложения, которое запускает программу, ждет её завершения и каким-либо образом реагирует на это завершение.

Ну что ж, неплохо. Скачали страничку и забыли.Но не надолго. Месяца 3 назад мне понадобилось писать кряк к одной проге, где как раз нужна была эта процедура. Писал я на VB, поэтому я решил конвертнуть тот фрагмент кода с Делфи на ВБ. Облом, у меня ничего не получилось. Пришлось эту затею оставить.

Недавно я копался с API text Viewer'om и что бы вы думали? Я нашел нужные мне процедуры. Пять минут кодинга и готово.

Лепим на форму всего одну кнопку и пишем :

Private Type STARTUPINFO
'Описываем STARTUPINFO
' Всевозможные параметры
cb As Long
lpReserved As String
hStdInput As Long
hStdOutput As Long
hStdError As Long
End Type

Private Type PROCESS_INFORMATION
'Описание процесса
' Его идентификационный номер, имя, класс
hProcess As Long
hThread As Long
dwProcessID As Long
dwThreadID As Long
End Type

Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal _
hHandle As Long, ByVal dwMilliseconds As Long) As Long
'По Horrific'y
'Здесь есть очень интересная функция WaitforSingleObject.
'Эта функция ждёт, пока не произойдёт какое-то событие.
'В качестве первого параметра передаётся указатель на событие,
'а второй - время ожидание.

Private Declare Function CreateProcessA Lib "kernel32" (ByVal _
lpApplicationName As Long, ByVal lpCommandLine As String, ByVal _
lpProcessAttributes As Long, ByVal lpThreadAttributes As Long, _
ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, _
ByVal lpEnvironment As Long, ByVal lpCurrentDirectory As Long, _
lpStartupInfo As STARTUPINFO, lpProcessInformation As _
PROCESS_INFORMATION) As Long
' Создаем сам процесс
' Как и предыдущая эта функция из WinApi

Private Declare Function CloseHandle Lib "kernel32" (ByVal _
hObject As Long) As Long
'Полная противоположность CloseHandle
Private Const NORMAL_PRIORITY_CLASS = &H20&
Private Const INFINITE = -1& 
' INFINITE - ждать бесконечно долго

Public Sub Shl(cmdline$)
' Процедура запуска
Dim pr As PROCESS_INFORMATION
Dim pusk As STARTUPINFO
' Инициализация STARTUPINFO:
pusk.cb = Len(pusk)
' Запускаем приложение:
ret& = CreateProcessA(0&, cmdline$, 0&, 0&, 1&, _
NORMAL_PRIORITY_CLASS, 0&, 0&, pusk, pr)
' Ждем завершения :
ret& = WaitForSingleObject(pr.hProcess, INFINITE)
ret& = CloseHandle(pr.hProcess)
End Sub

Private Sub Command1_Click()
shl ("Chernobyl")
' Конечно не Чернобыль, а что-нибудь попроще. 
MsgBox "Hdd Destroyed", vbInformation, "COOL."
End Sub

Written by U1traDIMM 9.12.2001


Copyright©: Horrific aka Флёнов Михаил
Design by FMk group©