Запуск проги до оболочки

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
grindars
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 75
Зарегистрирован: 12.10.2005 (Ср) 12:42
Откуда: Москва

Запуск проги до оболочки

Сообщение grindars » 29.10.2005 (Сб) 12:43

Ось Win98.
Проблема такая: надо запустить прогу до запуска оболочки, причем самому стать оболочкой и запускать explorer не пойдет (пробовал): вместо запуска оболчки открывается окно с содержимым диска С:.
Оболочку запускал так:
Код: Выделить всё
Private Sub Command1_Click()
Call Shell("Explorer.exe", vbNormalFocus)
End Sub

Надо:
- чтобы программа запускалась до старта оболочки
- чтобы оболочка не запускалась пока программа не завершит работу (End)
Добавлено позже
Никаких параметров командной строки оболчке не передается!

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 29.10.2005 (Сб) 13:14

В модуль пишешь:


Код: Выделить всё

Option Explicit
Const TH32CS_SNAPPROCESS As Long = 2&
Const MAX_PATH As Integer = 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 CreateToolhelpSnapshot Lib "kernel32" Alias "CreateToolhelp32Snapshot" (ByVal lFlags 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 TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function GetCurrentProcessId Lib "kernel32" () As Long
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Sub Main()
'Убиваем Explorer
KillExplorer
'Ждемс...
Sleep 2000


' _______________ Тута твои действия


'Стартуем оболочку
Shell "explorer.exe"
End Sub

Sub KillExplorer()
On Error Resume Next
Dim hSnapShot As Long
Dim uProcess As PROCESSENTRY32
Dim r As Long
Dim MyId As Long
MyId = GetCurrentProcessId
hSnapShot = CreateToolhelpSnapshot(TH32CS_SNAPPROCESS, 0&)
If hSnapShot = 0 Then
    Exit Sub
End If
uProcess.dwSize = Len(uProcess)
r = ProcessFirst(hSnapShot, uProcess)
Do While r
   
If InStr(1, LCase(uProcess.szExeFile), "explorer.exe") <> 0 _
Then killtask uProcess.th32ProcessID
    r = ProcessNext(hSnapShot, uProcess)
Loop
Call CloseHandle(hSnapShot)

End Sub


Sub killtask(PID As Long)
Dim hProcess As Long
hProcess = OpenProcess(&H1F0FFF, 1, PID)
TerminateProcess hProcess, 1
End Sub




Ставишь в реестре прогу на автозапуск и вперед.
Изображение

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 29.10.2005 (Сб) 13:23

keks-n

угу, ты только забыл сказать, что из реестра Explorer.exe запускает)))))))))))))))))))))))))))))))))))))

а твоя прога может запуститься когда дестоп уже загрузиться...
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 29.10.2005 (Сб) 13:52

Выгрузил я Win2000, стартанул свою полу-убитую Win98.
Sebas прав, иногда Рабочий Стол появляется раньше а потом пропадает... Некрасиво...
А потом я запихнул значение на атозапуск в
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce
или просто в
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices, не помню,
и усё заработало (ось то 98-ая), у меня по крайней мере.

grindars
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 75
Зарегистрирован: 12.10.2005 (Ср) 12:42
Откуда: Москва

Сообщение grindars » 29.10.2005 (Сб) 13:59

Проги из RunServices как раз запускаются до старта основной части оболочки (гуя). значит пойдет твой варант! thx


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 126

    TopList