Re: Как из VB запустить программу не указывая путь к файлу

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Сергей Юдин
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 08.06.2003 (Вс) 11:06
Откуда: Волгоград

Re: Как из VB запустить программу не указывая путь к файлу

Сообщение Сергей Юдин » 15.06.2003 (Вс) 18:34

К сожалению через поток запустить никак не получается даже файл с простеньким примером,
который для простоты целиком считывается с диска.
Хотя сам поток запускается, даже в программе откомпилированной в нативе коде, а не только
P-коде, как рекомендуют.
Если кому интересно ложу свой пример, где поток запускает программу размещенную в модуле.
Поток можно запустить(кнопка1), приостановить (3), продолжить (4). Кнопка 2-выход.
На форме должно быть два текстбокса.

Option Explicit
Dim file$, lFileLength As Long, BinaryData() As Byte
Dim dwFlags As Long, ThreadID As Long, thread1 As Long, Adres As Long
Private Sub Command1_Click()
file$ = App.Path + "\Primer.exe"
lFileLength = FileLen(file$)
ReDim BinaryData(lFileLength - 1)
Open file$ For Binary Access Read As #1
Get 1, , BinaryData()
Close #1
Adres = VarPtr(BinaryData(0))
Text2.Text = Adres
dwFlags = CREATE_SUSPENDED
'thread1 = CreateThread(ByVal 0&, ByVal 0&, Adres, ByVal 0&, dwFlags, ThreadID)
thread1 = CreateThread(ByVal 0&, ByVal 0&, AddressOf ThreadProc, ByVal 0&, dwFlags, ThreadID)
If thread1 = 0 Then End
Command4_Click
End Sub
Private Sub Command3_Click()
SuspendThread thread1
End Sub
Private Sub Command2_Click()
Unload Me
End Sub
Private Sub Command4_Click()
ResumeThread thread1
End Sub

А это код модуля.

Public Const CREATE_SUSPENDED = &H4
Public Declare Function SuspendThread Lib "kernel32" (ByVal hThread As Long) As Long
Public Declare Function ResumeThread Lib "kernel32" (ByVal hThread As Long) As Long
Public Declare Function CreateThread Lib "kernel32" (ByVal lpThreadAttributes _
As Any, ByVal dwStackSize As Long, ByVal lpStartAddress As Long, _
lpParameter As Any, ByVal dwCreationFlags As Long, lpThreadId As Long) As Long

Public Sub ThreadProc()
Dim x&
For x = 1 To 1000
Form1.Text1.Text = x
Next x
End Sub

ShadowCaster
Бывалый
Бывалый
 
Сообщения: 254
Зарегистрирован: 24.05.2002 (Пт) 10:52

Сообщение ShadowCaster » 15.06.2003 (Вс) 21:54

1) Если мне не изменяет память, то в EXE-файле первые 256 байт - это незапускаемый заголовок.
2) В оставшейся части должна быть точка входа (Entry Point), которая ДАЛЕКО НЕ ВСЕГДА находится в начале этой части (образа).
3) ASProtect пихает в память именно этот образ и выполняет команду "Jmp <точка_входа>"

TRUST
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 192
Зарегистрирован: 22.08.2002 (Чт) 20:24
Откуда: Orel

Сообщение TRUST » 16.06.2003 (Пн) 0:03

В EXE первые байты - это PE заголовок. Да и в DLL/OCX также.
Далее есть такая вещь, как APIENTRY (в VC++ такую юзаешь) - точка входа в программу.

Больше не знаю - не мое.
Кто юзал мой аккаунт и весь его выюзал?!!


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

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

Сейчас этот форум просматривают: AhrefsBot и гости: 118

    TopList