ايران ويج

نسخه‌ی کامل: استفاده از CMD?
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
صفحه‌ها: 1 2 3 4 5
Payman62 نوشته است:سلام.
اگه درست متوجه منظورت شده باشم مشکل شما به خاطر عدم مکث شما بین دستوراته.
شما وقتی یه فایل داس رو اجرا میکنی با توجه به فایلی که اجرا کردی و کاری که میخواد انجام بده باید زمانی رو توقف کنی تا کارش تموم شه و بعد برنامت رو ادامه بدی. اینه که بهتره به جای استفاده از دستورات داس و فایل های دیگه از API ها استفاده کنی.

شما از این API استفاده کن.
Private Declare Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long)
این معرفی API هست بالای برنامت بذار و بعد از اجرای فایل از کد زیر برای مکث 3 ثانیه ای استفاده کن.
sleep 3000

ممنون پیمان جان
مشکل همین بود . مرسی
Smile
به یه مشکل دیگه برخوردم !
این دستور :

نقل قول: Shell App.Path & "\a.bat", vbHide
وقتی از طریق برنامه Visual Basic ران می کنم عمل می کنه ولی وقتی به صورت فایل exe سیوش می کنم و اجراش می کنم عمل نمی کنه !
مشکلش کجاست ؟
توی فرمم یه CommonDialog دارم . آیا CommonDialog متغیر App.Path را تغییر می ده ؟
آخه وقتی از Button که CommonDialog را باز می کنه استفاده می کنم دیگه اون فرمان بالا ( فقط در حالت exe ) اجرا نمیشه !
درهنگام لود برنامه اين دستور رو اجرا كن :

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 +"\"

اميدوارم كمك كنه
ممنون دوست عزیز هر چند به کارم نیومد . ولی ممنونم Confused
(۱۰-مرداد-۱۳۸۷, ۱۶:۴۹:۱۶)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

موفق باشی
صفحه‌ها: 1 2 3 4 5