درهنگام لود برنامه اين دستور رو اجرا كن :
AppPath = app.path + "\a.bat" 'fff
هر جاي برنامه كه احتياج به اين آدرس داشتي از اين متغيير _ كه بايد در جنرال فرمت تعريف شده باشه _ استفاده كن.
Di Di نوشته است:درهنگام لود برنامه اين دستور رو اجرا كن :
AppPath = app.path + "\a.bat" 'fff
هر جاي برنامه كه احتياج به اين آدرس داشتي از اين متغيير _ كه بايد در جنرال فرمت تعريف شده باشه _ استفاده كن.
ممنون DiDi جان .
یعنی CommonDialog متغیر App.Path را تغییر می ده ؟
سلام
خوب هستيد
با اجازه دوستان براي اجرا يك فايل اجرايي بصورتي كه بعد اجرا فايل تا اتمام كار فايل اجرايي برنامه برنامه متوقف بشه ميشه از api هاي زير استفاده كرد.
کد:
Const INFINITE = &HFFFF
Const STARTF_USESHOWWINDOW = &H1
Private Enum enSW
SW_HIDE = 0
SW_NORMAL = 1
SW_MAXIMIZE = 3
SW_MINIMIZE = 6
End Enum
Private Type PROCESS_INFORMATION
hProcess As Long
hThread As Long
dwProcessId As Long
dwThreadId As Long
End Type
Private Type STARTUPINFO
cb As Long
lpReserved As String
lpDesktop As String
lpTitle As String
dwX As Long
dwY As Long
dwXSize As Long
dwYSize As Long
dwXCountChars As Long
dwYCountChars As Long
dwFillAttribute As Long
dwFlags As Long
wShowWindow As Integer
cbReserved2 As Integer
lpReserved2 As Byte
hStdInput As Long
hStdOutput As Long
hStdError As Long
End Type
Private Type SECURITY_ATTRIBUTES
nLength As Long
lpSecurityDescriptor As Long
bInheritHandle As Long
End Type
Private Enum enPriority_Class
NORMAL_PRIORITY_CLASS = &H20
IDLE_PRIORITY_CLASS = &H40
HIGH_PRIORITY_CLASS = &H80
End Enum
Private Declare Function CreateProcess Lib "kernel32" Alias "CreateProcessA" (ByVal lpApplicationName As String, ByVal lpCommandLine As String, lpProcessAttributes As SECURITY_ATTRIBUTES, lpThreadAttributes As SECURITY_ATTRIBUTES, ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, lpEnvironment As Any, ByVal lpCurrentDriectory As String, lpStartupInfo As STARTUPINFO, lpProcessInformation As PROCESS_INFORMATION) As Long
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Private Function SuperShell(ByVal App As String, ByVal WorkDir As String, dwMilliseconds As Long, ByVal start_size As enSW, ByVal Priority_Class As enPriority_Class) As Boolean
Dim pclass As Long
Dim sinfo As STARTUPINFO
Dim pinfo As PROCESS_INFORMATION
'Not used, but needed
Dim sec1 As SECURITY_ATTRIBUTES
Dim sec2 As SECURITY_ATTRIBUTES
'Set the structure size
sec1.nLength = Len(sec1)
sec2.nLength = Len(sec2)
sinfo.cb = Len(sinfo)
'Set the flags
sinfo.dwFlags = STARTF_USESHOWWINDOW
'Set the window's startup position
sinfo.wShowWindow = start_size
'Set the priority class
pclass = Priority_Class
'Start the program
If CreateProcess(vbNullString, App, sec1, sec2, False, pclass, _
0&, WorkDir, sinfo, pinfo) Then
'Wait
WaitForSingleObject pinfo.hProcess, dwMilliseconds
SuperShell = True
Else
SuperShell = False
End If
End Function
حال براي اجرا برنامه از دستور زير استفاده كنيد
کد:
SuperShell (exe-bat-com-scr... file name for ex:a.bat),(work directory for ex c:\), 0, (how run file in normal,hiden,... for ex:SW_HIDE), (PRIORITY level for ex:HIGH_PRIORITY_CLASS)
فرق اين اجرا با اجرا هاي ديگر اين است كه
1- كنترل بر همه موارد اجرا
2- متوقف شدن تا اجرا ي برنامه به محضي كه برنامه دوم به پايان برسه برنامه ما فعال ميشه
و براي بدست اوردن مسير اجرا بهتر است از روش زير استفاده شود:
کد:
dim strApppath as string
strAppPath=app.path
if right(strAppPath,1)<>"\" then strAppPath=strAppPath +"\"
اميدوارم كمك كنه
ممنون دوست عزیز هر چند به کارم نیومد . ولی ممنونم
(۱۰-مرداد-۱۳۸۷, ۱۶:۴۹:۱۶)davoodx نوشته است: [ -> ]سلام
من یک کاربر مبتدی Visual Basic 6 هستم . یه سوال از اساتید این سایت داشتم . نمی دونم کسی با makesis کار کرده یا نه ؟ MakeSIS.exe یا برنامه واسه ساخت installer واسه موبایل است . برای ساختن Installer باید CMD را باز کنی و Makesis.exe را اجرا کنی و دستوری را به شکل : makesis.exe my.pkg my.sis بزنی . من خواستم بپرسم که با Visual Basic چطوری می شه کاری کرد که عملیاتی که گفتم با یک کلیک انجام بشه و خروجی آن توی یه TextBox نشون بده ؟
ممنون می شم که پاسخ بدید.
با تشکر از همگی
برای این کار می تونی مستقیما از داخل برنامه بدون bath File این کار را انجام بدی یا API :
Private Declare Function GetTempFileName Lib "KERNEL32" Alias "GetTempFileNameA" (ByVal lpszPath As String, ByVal lpPrefixString As String, ByVal wUnique As Long, ByVal lpTempFileName As String) As Long
Public Declare Function OpenProcess Lib "KERNEL32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Public Declare Function CloseHandle Lib "KERNEL32" (ByVal hFile As Long) As Long
Private Const SYNCHRONIZE = &H100000
Public Function ShellGetText(Program As String) As String
Dim sTempFile As String
Dim hFile As Long
Dim pid As Long
Dim hProcess As Long
Dim bResult As Boolean
sTempFile = Space(1024)
GetTempFileName Environ("TEMP"), "OUT", 0, sTempFile
sTempFile = FromSz(sTempFile)
pid = Shell(Environ("COMSPEC") & " /C " & Program & ">" & sTempFile, vbHidden)
hProcess = OpenProcess(SYNCHRONIZE, True, pid)
Do Until (hProcess = 0) Or WaitForSingleObject(hProcess, 60000)
GoTo CloseHandles
Loop
CloseHandles:
hFile = FreeFile
Open sTempFile For Binary As #hFile
ShellGetText = Input$(LOF(hFile), hFile)
Close #hFile
CloseHandle hProcess
Kill sTempFile
End Function
موفق باشی