View Full Version : سوال: اجراي دستورات داس تو vb6
  
sina32
دوشنبه 15 شهریور 1389, 21:27 عصر
ميدونم که ميشه دستورات داس رو توي ويبی اجرا کرد. کسي راهشو بلده؟
mds_boy
دوشنبه 15 شهریور 1389, 21:33 عصر
دوسته عزیز من بیشتر از api استفاده میکنم، به این شکل :
دستوری به نام winexec هست که میشه با اون هر دستوری رو اجرا کرد.
مثال :
تو قسمته جنرال برنامت این کد api رو بنویس :
Private Declare Function WinExec Lib "kernel32" (ByVal lpCmdLine As String, ByVal nCmdShow As Long) As Long
بعد : 
StrDastoor = "Net start mssqlserver "
            WinExec StrDastoor, 0
این کد کارش اینه که اس کیو ال سرور رو استارت میکنه، میتونی بجای "Net start mssqlserver"  دستوری که میخوای اجرا بشه رو بنویسی !
موفق باشی.
sina32
دوشنبه 15 شهریور 1389, 21:55 عصر
دوسته عزیز من بیشتر از api استفاده میکنم، به این شکل :
دستوری به نام winexec هست که میشه با اون هر دستوری رو اجرا کرد.
مثال :
تو قیمته جنرال برنامت این کد api رو بنویس :
Private Declare Function WinExec Lib "kernel32" (ByVal lpCmdLine As String, ByVal nCmdShow As Long) As Long
بعد : 
StrDastoor = "Net start mssqlserver "
            WinExec StartSql, 0
این کد کارش اینه که اس کیو ال سرور رو استارت میکنه، میتونی بجای "Net start mssqlserver"  دستوری که میخوای اجرا بشه رو بنویسی !
موفق باشی.
دستورات داس! مثلا دستور ساخت پوشه، چطور اجرا ميشه؟
MEhdi Sobhani
دوشنبه 15 شهریور 1389, 22:03 عصر
این طوری : 
Dos$="MD MyDir"
Shell "cmd.exe /c " & Dos$
mds_boy
دوشنبه 15 شهریور 1389, 22:15 عصر
میتونی بجای  "Net start mssqlserver" از دستوره "MD FolderName" استفاده کنی.
گفتم که داخله این کوتیشن هر دستوری که مستقیم داخله cmd مینویسی رو میتونی بنویسی و اجرا کنی !!!
اگه جواب نداد خبرم کن.
موفق باشی.
با دستوره shell هم میشه هماننده مثاله دوسنه عزیز ولی من اونجوریشو تست نکردم .
sina32
دوشنبه 15 شهریور 1389, 22:19 عصر
جواب داد، مرسی
akbarg64
دوشنبه 15 شهریور 1389, 22:27 عصر
سلام.این سورس رو توی سیستمم پیدا کردم گفتم واست بزارم شاید بدردت بخوره.موفق باشید.
Veteran
پنج شنبه 03 شهریور 1390, 13:22 عصر
گرامی ما وقتی یک کدی رو وارد میکنیم  قطعا یک جوابی داره  
مثلا توی داس مزنیم  dir  خود داس یک جوابی به ما میده میخواستم ببینیم چجوری میتونیم اون جواب یا عکس العمل رو در برناممون بگیریم
quiet_programmer
پنج شنبه 03 شهریور 1390, 14:13 عصر
با سلام.
مثلا توی داس مزنیم  dir  خود داس یک جوابی به ما میده میخواستم ببینیم چجوری میتونیم اون جواب یا عکس العمل رو در برناممون بگیریم 						
برای این کار میتونین به این شکل عمل کنین:
Shell "cmd.exe /c dir >>" + """" + "d:\new folder\1.txt" + """"
با اجرای این دستور خروجی حاصل از دستور DIR به جای نمایش رو مانیتور میره تو فایل 1.txt داخل فولدر new folder در داخل درایو d. (همونطور که بدیهیه این مسیر میتونه تغییر کنه). بعد شما تو برنامه تون میتونین این فایل رو باز کنین و خروجی دستور اجرا شده در محیط داس رو بخونین.
یا حق.
موفق باشین.
setroyd
پنج شنبه 03 شهریور 1390, 14:21 عصر
این رو نمیتونی انجام بدی چون محیط داس نمایش رو در محیط خودش اجرا میکنه و شما قادر به انجام این کار نیستی ولی میتونی با dir() و یا api findfile استفاده کنی و لیستی از فایلها و پوشها به دست بیاری البته با send message و fso هم میشه .
Veteran
پنج شنبه 03 شهریور 1390, 14:22 عصر
خیلی ممنون اما من میخوام توی خود برنامه به دست بیارم مثلا توی یک تکست باکس
من گفتم مثلا dir ممکنه دستور دیگه ای وارد کنیم
quiet_programmer
پنج شنبه 03 شهریور 1390, 14:31 عصر
این رو نمیتونی انجام بدی چون محیط داس نمایش رو در محیط خودش اجرا میکنه و  شما قادر به انجام این کار نیستی ولی میتونی با dir() و یا api findfile  استفاده کنی و لیستی از فایلها و پوشها به دست بیاری البته با send message  و fso هم میشه . 						
اول بخون ببین چی میخوان بعد.
مثلا توی داس مزنیم  dir  خود داس یک جوابی به ما میده میخواستم ببینیم چجوری میتونیم اون جواب یا عکس العمل رو در برناممون بگیریم 						
به مثلا دقت کن. مثلا برای خروجی که از اجرای یک دستور تو محیط cmd تولید میشه....
نگفته که میخوام دستور dir پیاده سازی کنم یا نگفته که میخوام لیست فایل ها و فولدرهای یک مسیر رو بدست بیارم. وگرنه منم سوادم اونقدری قد میده که بگم عزیزم برای این کار از fso استفاده کن.
یاحق.
موفق باشین.
quiet_programmer
پنج شنبه 03 شهریور 1390, 14:44 عصر
خیلی ممنون اما من میخوام توی خود برنامه به دست بیارم مثلا توی یک تکست باکس
برای این کار خوب فایل رو باز کن و بخون و بریز تو تکست باکس.
مثلا اینجوری:
اول میزنی این دستور اجرا میشه:
Shell "cmd.exe /c dir >>" + """" + "D:\1.txt" + """"
بعد میای با دستور زیر فایل رو باز میکنی و میریزی تو تکست باکس:
Open "d:\1.txt" For Input As #1
Text1.Text = Input(LOF(1), #1)
Close 1
 من گفتم مثلا dir ممکنه دستور دیگه ای وارد کنیم 						
خوب عزیزم این که دیگه نیاز به پرسیدن نداره: به جای DIR دستور مورد نظرت رو بزار. مثلا chkdsk یا del یا چه میدونم هر دستور دیگه که تو محیط cmd تعریف شدست.
یاحق.
موفق باشین
setroyd
پنج شنبه 03 شهریور 1390, 14:52 عصر
Private Sub Command1_Click()
Dim a As String
a = Dir("g:\")
Print a
While a <> ""
a = Dir
Print a
Wend
End Sub
 با این کد میتونی سرچ کنی یک مسیر رو .
quiet_programmer
پنج شنبه 03 شهریور 1390, 19:17 عصر
با سلام.
جناب sobhan93 (http://barnamenevis.member.php?160830-sobhan93) در جواب به سوالی که پرسیده بودین(دستور داس داخل یه تکست باکس باشه و اون دستور اجرا بشه) باید بگم که کدتون رو به شکل زیر تغییر بدین.
Shell "cmd.exe /c "+Me.TxtCommand.Text+"  >>" + """" + "D:\1.txt" + """"
بعد با دستوری که قبلا گفتم فایل رو باز کنین و محتویش رو بزارین تو یه تکست باکس دیگه.
یا حق.
موفق باشین.
Veteran
جمعه 04 شهریور 1390, 14:17 عصر
راستیش این کد کارو منو راه نمیندازه ! یک کدی چیزی که مستقیم بشه خروجی رو دید اگر باشه خوبه
setroyd
جمعه 04 شهریور 1390, 14:29 عصر
دوست عزیز من اون دستور که گذاشتم dir() کارش همین بود دیگه !!!! مستقیم این کارو میکرد و وابستگی نداشت  !برات ضمیمه کردم دانلود کن .
butterfly8528
شنبه 05 شهریور 1390, 19:03 عصر
سلام .
یک Button و یک TextBox بر روی فرم قرار بدید و کد زیر رو داخل فرمتون بریزید و پروژه رو اجرا کنید :
'www.arshamsoft.com
Option Explicit
Private Function ShellCMD(strCmd As String) As String
 
 Dim WshShell As Object, oExec As Object, strOut As String
 Set WshShell = CreateObject("WScript.Shell")
 Set oExec = WshShell.Exec(strCmd)
 strOut = ""
 Do While oExec.Status = 0
     If Not oExec.StdOut.AtEndOfStream Then
          strOut = strOut & oExec.StdOut.Read(1)
     End If
     DoEvents
 Loop
 ShellCMD = strOut
 Set oExec = Nothing
 Set WshShell = Nothing
End Function
Private Sub Command1_Click()
 Text1.Text = ShellCMD("ipconfig /all")
End Sub
با استفاده از توابع API هم میشه خروجی CMD رو به صورت مستقیم به دست آورد اما این روش خیلی کوتاه و ساده تر هست .
موفق باشید :لبخندساده:.
xxxxx_xxxxx
شنبه 05 شهریور 1390, 19:19 عصر
http://barnamenevis.org/showthread.php?248606
butterfly8528
شنبه 05 شهریور 1390, 19:59 عصر
سلام .
این هم روش بعدی که از توابع API استفاده شده:
Option Explicit
Private Declare Function CreatePipe Lib "kernel32" (phReadPipe As Long, phWritePipe As Long, lpPipeAttributes As SECURITY_ATTRIBUTES, ByVal nSize As Long) As Long
Private Declare Sub GetStartupInfo Lib "kernel32" Alias "GetStartupInfoA" (lpStartupInfo As STARTUPINFO)
Private Declare Function CreateProcess Lib "kernel32" Alias "CreateProcessA" (ByVal lpApplicationName As String, ByVal lpCommandLine As String, lpProcessAttributes As Any, lpThreadAttributes As Any, 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 SetWindowText Lib "user32" Alias "SetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String) As Long
Private Declare Function ReadFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, lpNumberOfBytesRead As Long, lpOverlapped As Any) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Type SECURITY_ATTRIBUTES
    nLength As Long
    lpSecurityDescriptor As Long
    bInheritHandle As Long
End Type
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 Long
    lpDesktop As Long
    lpTitle As Long
    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 OVERLAPPED
    ternal As Long
    ternalHigh As Long
    offset As Long
    OffsetHigh As Long
    hEvent As Long
End Type
Private Const STARTF_USESHOWWINDOW = &H1
Private Const STARTF_USESTDHANDLES = &H100
Private Const SW_HIDE = 0
Private Const EM_SETSEL = &HB1
Private Const EM_REPLACESEL = &HC2
Sub Redirect(cmdLine As String, objTarget As Object)
    Dim I%, t$
    Dim pa As SECURITY_ATTRIBUTES
    Dim pra As SECURITY_ATTRIBUTES
    Dim tra As SECURITY_ATTRIBUTES
    Dim pi As PROCESS_INFORMATION
    Dim sui As STARTUPINFO
    Dim hRead As Long
    Dim hWrite As Long
    Dim bRead As Long
    Dim lpBuffer(1024) As Byte
    
    pa.nLength = Len(pa)
    pa.lpSecurityDescriptor = 0
    pa.bInheritHandle = True
    
    pra.nLength = Len(pra)
    tra.nLength = Len(tra)
    
    If CreatePipe(hRead, hWrite, pa, 0) <> 0 Then
        sui.cb = Len(sui)
        GetStartupInfo sui
        sui.hStdOutput = hWrite
        sui.hStdError = hWrite
        sui.dwFlags = STARTF_USESHOWWINDOW Or STARTF_USESTDHANDLES
        sui.wShowWindow = SW_HIDE
        If CreateProcess(vbNullString, cmdLine, pra, tra, True, 0, Null, vbNullString, sui, pi) <> 0 Then
            SetWindowText objTarget.hwnd, ""
            Do
                DoEvents
                Erase lpBuffer()
                If ReadFile(hRead, lpBuffer(0), 1023, bRead, ByVal 0&) Then
                    SendMessage objTarget.hwnd, EM_SETSEL, -1, 0
                    SendMessage objTarget.hwnd, EM_REPLACESEL, False, lpBuffer(0)
                    DoEvents
                Else
                    Exit Do
                End If
                CloseHandle hWrite
            Loop
            CloseHandle hRead
        End If
    End If
    
End Sub
Private Sub Command1_Click()
  Redirect "ipconfig /all", Text1
End Sub
موفق باشید :لبخندساده:.
Veteran
پنج شنبه 24 شهریور 1390, 17:23 عصر
سلام .
یک Button و یک TextBox بر روی فرم قرار بدید و کد زیر رو داخل فرمتون بریزید و پروژه رو اجرا کنید :
'www.arshamsoft.com
Option Explicit
Private Function ShellCMD(strCmd As String) As String
 
 Dim WshShell As Object, oExec As Object, strOut As String
 Set WshShell = CreateObject("WScript.Shell")
 Set oExec = WshShell.Exec(strCmd)
 strOut = ""
 Do While oExec.Status = 0
     If Not oExec.StdOut.AtEndOfStream Then
          strOut = strOut & oExec.StdOut.Read(1)
     End If
     DoEvents
 Loop
 ShellCMD = strOut
 Set oExec = Nothing
 Set WshShell = Nothing
End Function
Private Sub Command1_Click()
 Text1.Text = ShellCMD("ipconfig /all")
End Sub
با استفاده از توابع API هم میشه خروجی CMD رو به صورت مستقیم به دست آورد اما این روش خیلی کوتاه و ساده تر هست .
موفق باشید :لبخندساده:.
با این نمیشه همه دستورات رو اجرا کرد
محسن واژدی
پنج شنبه 24 شهریور 1390, 18:43 عصر
سلام اگر نام را بدون مسیر بنویسند، در صورتیکه فایل با این نام در فولدر ویندوز، سیستم یا مکان های تعیین شده وجود نداشته باشد برنامه خطای Not found میدهد، البته چون دستورتان را ندیده ام نمیتوانم نظر کاملتری بدهم  موفق باشید
Veteran
پنج شنبه 24 شهریور 1390, 21:44 عصر
همین کدی که دوست خوبمون گذاشتن خوبه اما
همین تیکه اخرش 
 Text1.Text = ShellCMD("ipconfig /all")
اگه به جای ip config /all 
یک دستور دیگه ای مثل dir بزاریم با ارور مواجه میشیم اگه بشه همه دستورات رو باهاش انجام داد خیلی خوبه چون خروجی رو توی خود برنامه بدون دردسر بهمون میده 
فقط اگه بشه موقعی که دستور اجرا میشه اون صفحه سیاه cmd نشون داده نشده دیگه عالی میشه 
اما نمیدونم چشه با تشکر
butterfly8528
جمعه 25 شهریور 1390, 02:35 صبح
سلام .
دوست عزیز این دو روش که قرار دادم فقط برای فرمان های خارجی CMD مثل Ping و IpConfig کاربرد دارن و Dir از فرمان های داخلی هست !
موفق باشید :لبخندساده:.
vbhamed
جمعه 25 شهریور 1390, 10:43 صبح
همین کدی که دوست خوبمون گذاشتن خوبه اما
همین تیکه اخرش 
 Text1.Text = ShellCMD("ipconfig /all")
اگه به جای ip config /all 
یک دستور دیگه ای مثل dir بزاریم با ارور مواجه میشیم اگه بشه همه دستورات رو باهاش انجام داد خیلی خوبه چون خروجی رو توی خود برنامه بدون دردسر بهمون میده 
فقط اگه بشه موقعی که دستور اجرا میشه اون صفحه سیاه cmd نشون داده نشده دیگه عالی میشه 
اما نمیدونم چشه با تشکر
 
سلام
براي Dir هم مي تونيد بنويسيد
Text1.Text = ShellCMD("cmd /c dir c:\windows\system32")
ضمنا اگر از كدي كه butterfly8528 (http://barnamenevis.member.php?75627-butterfly8528) عزيز در پست شماره 20 گذاشتن استفاده كنيد صفحه سياه cmd هم نشون داده نميشه، ضمن اينكه اون كد عملكرد بهتري هم داره
 
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.