nexpay

آیا تابع یا دستوری در vb هست که بتونه یه فایل exe رو اجرا کنه؟

شروع موضوع توسط yehnafar ‏3 دسامبر 2005 در انجمن Visual Basic 6

  1. yehnafar

    yehnafar Registered User

    تاریخ عضویت:
    ‏24 ژانویه 2003
    نوشته ها:
    209
    تشکر شده:
    0
    محل سکونت:
    تهران
    اقا من میخوام با این سواد نداشته ام یه برنامه بنویسم که هر مثلا شصت دقیقه یکبار بره و از یک مسیر خاص یه فایل exe را اجرا کنه.
    مثلا : در شروع برنامه بره از اینجا:
    E:/1/ssiim.exe

    بعد شصت دقیقه بره از اینجا:
    E:/2/ssiim.exe

    بعد شصت دقیقه دیگه از اینجا:
    E:/3/ssiim.exe

    و به همین ترتیب تا مثلا 100 بار بره و از مسیر داده شده اون فایل ssiim.exe رو اجرا کنه. حالا کاری هم نداشته باشه که برنامه exe قبلیه رو که اجرا کرده، اجراش تموم شده یا نه.

    ولی چون اصولا برنامه نویس نیستم و به خاطر قسمتی از تزم مجبورم یه همچین کاری بکنم «مشکل اولم» اینه که نمی دونم آیا اصلا تابعی یا دستوری تو vb هست که بتونه یه فایل exe رو هر مثلا 60 دقیقه یکبار بره اجرا کنه؟:wacko: :wacko:
     
  2. Piter1356

    Piter1356 کاربر تازه وارد

    تاریخ عضویت:
    ‏11 اکتبر 2004
    نوشته ها:
    395
    تشکر شده:
    0
    محل سکونت:
    tehran
  3. yehnafar

    yehnafar Registered User

    تاریخ عضویت:
    ‏24 ژانویه 2003
    نوشته ها:
    209
    تشکر شده:
    0
    محل سکونت:
    تهران
    دقیقا با شل خواستم بکنم این کارو. منتها شل ظاهرا تا برنامه قبلیه تموم نشه بعدی رو شروع نمی کنه.
     
  4. saeedsmk

    saeedsmk مدیر بازنشسته

    تاریخ عضویت:
    ‏6 سپتامبر 2003
    نوشته ها:
    1,519
    تشکر شده:
    4
    از اين كد استفاده كن يه مدل باز كن و اينها رو توش كپي كن :
    کد:
    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 "c:\test\test.exe","c:\test\",0, SW_NORMAL, HIGH_PRIORITY_CLASS
    
     
  5. phyma

    phyma کاربر تازه وارد

    تاریخ عضویت:
    ‏21 اکتبر 2004
    نوشته ها:
    39
    تشکر شده:
    0
    ین فایا رو که حیلی راحته هم یک مطالعه کن من که با هاش خیلی راحت کار می کنم یک API رو توضیح مده
     

    فایل های ضمیمه:

  6. ali313

    ali313 Registered User

    تاریخ عضویت:
    ‏26 ژوئن 2005
    نوشته ها:
    280
    تشکر شده:
    0
    محل سکونت:
    زیر خون قمه ، زنجیر ، سینه ، لطم ، سیلی و ... جای
    این shell دستورات داس رو چه جوری اجرا میکنه مثلا کپی کردن یه برنامه از یک دایرکتوری به دایرکتوری دیگه دستورش چه شکلیه؟
     
  7. saeed_vb

    saeed_vb Registered User

    تاریخ عضویت:
    ‏9 دسامبر 2005
    نوشته ها:
    650
    تشکر شده:
    8
    محل سکونت:
    همین ورا
  8. saeedsmk

    saeedsmk مدیر بازنشسته

    تاریخ عضویت:
    ‏6 سپتامبر 2003
    نوشته ها:
    1,519
    تشکر شده:
    4
    برای اجرا دستوارت داس توسط شلی که گفتم یا شل vb باید از cmd.exe یا command.exe با سوئیچ /c استفاده کنی فرض کن میخوای از درایو c دایرکتوری بگیری با سوئیچ /w میشه
    کد:
    command /c dir c:\  /w
    
    یا بصورت کلی میشه
    کد:
    command /c [the command u want with switches]
    
    :lol:
     
  9. littlerabbit

    littlerabbit مدیر بازنشسته کاربر فعال

    تاریخ عضویت:
    ‏13 جولای 2003
    نوشته ها:
    667
    تشکر شده:
    4
    محل سکونت:
    Iran
    فکر میکنم منظور پیتر خود تابع Shell توی وی بی بود!!!! که یه برنامه خارجی رو اجرا میکنه.
     
  10. Piter1356

    Piter1356 کاربر تازه وارد

    تاریخ عضویت:
    ‏11 اکتبر 2004
    نوشته ها:
    395
    تشکر شده:
    0
    محل سکونت:
    tehran
    امیدوارم مشکلت حل شده باشه

    ضمنا باید بگم تایمر کمک میکنه که مشکل پشت سرهم اجرا شدن برنامه ها رو نداشته باشی
     
  11. Piter1356

    Piter1356 کاربر تازه وارد

    تاریخ عضویت:
    ‏11 اکتبر 2004
    نوشته ها:
    395
    تشکر شده:
    0
    محل سکونت:
    tehran
    درست فکر کردی !!
     
  12. yehnafar

    yehnafar Registered User

    تاریخ عضویت:
    ‏24 ژانویه 2003
    نوشته ها:
    209
    تشکر شده:
    0
    محل سکونت:
    تهران

    من برنامه بالا رو به شكل زير در آوردم و يه فايل exe به نام runner ساختم كه اونو هم ميذارم بالا. اين برنامه كاملا كاري رو كه قبلا گفته بودم و مي خواستم انجام ميده . فقط يه اشكال داره و اونم فقط اينه كه در طول مدت زماني كه برنامه runner در حال اجراست CPU Usage را صد در صد اشغال ميكنه. ( در يك دستگاه با cpu 1.7 گيگ)

    چون خود اون برنامه اي كه من مي خوام runner اون رو اجرا كنه ( و اسمشمSSIIM.EXE است و در متن برنامه زير اوردمش) پنجاه تا صد درصد سي پي يو رو اشغال مي كنه و خب اين در واقع مشكل درست ميكنه.
    شما چيزي به نظرتون مي رسه كه اشكال كجاست كه باعث ميشه كه اين حجم از سي پي يو اشغال بشه؟

    کد:
    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
    
    
    
    
    Private Sub Command1_Click()
    
        t = Val(Text1.Text)
        n = Val(Text2.Text)
        
        For i = 1 To n
            m = 1 + Int(Log(n) / Log(10))
            Path = "E:\ssiim\" + Right$(Str$(n), m)
            SuperShell Path + "\ssiimwin.exe", Path, 0, SW_NORMAL, HIGH_PRIORITY_CLASS
            t2 = Timer
            If i < n Then
                Do
                Loop Until t2 + t < Timer
            End If
            
        Next i
        
            
    End Sub
    
    Private Sub Command2_Click()
        Unload Me
    End Sub
    
    
    
    
     

    فایل های ضمیمه:

    • Runner.zip
      اندازه فایل:
      4.6 KB
      نمایش ها:
      2
  13. avajang.com .leftjee.ir.right
  14. saeedsmk

    saeedsmk مدیر بازنشسته

    تاریخ عضویت:
    ‏6 سپتامبر 2003
    نوشته ها:
    1,519
    تشکر شده:
    4
    اشكال از اين دستوره

    کد:
    Do
                Loop Until t2 + t < Timer
    اين دستور چون يه لوپ طولاني مدت هست و پشت سر هم اجرا ميشه تمام سي پيو رو اشغال ميكنه
    راه حل يا از api ها استفاده كنييد يعني
    کد:
     Do
    sleep(1)
                Loop Until t2 + t < Timer
    كه باعث ميشه برنامه براي مدت يك صدم پانيه متوقف بشه و ويندوز بقيه كار ها رو انجام بده يعني هميشه سي پيو رو اشغال نمكنه فقط هر يك ميلي سكند يك چند هزارم ثانيه چك شدن انجام ميشه
    و راه حل دوم استفاده از doevents كه تاثير مشابه Sleep داره اينكه اختيار اجرا شدن دستورات را به سيستم عامل برميگردونه و بعد سيستم عامل كه يك دستور رو انجام داد دوباره اختيار رو به برنامه مبده و اين بازي با هر دفعه صدا زدن اين تابع انجام ميشه و در نتيجه اين حالت استفاده 100 درصد از سي پيو يا گرفتار شدن در حلقه از بين ميره

    کد:
    Do
    doevnets
                Loop Until t2 + t < Timer
    در ضمن بعد از اينكه پست كردم يه چيزي به چشم خورد
    توي وي بي بعد براي خروج بهتر ( زماني كه از Api استفاده ميكني ) يعد از unlod me يك خط ديگر هم بگذاري يعني دستور end اين دستور خيلي جلويي باگ هاي بعدي و اشغال شدن الكي حافظه توسط برنامه هاي درست بسته نشده رو ميگيره
    اميدوارم كمك كنه
     
  15. yehnafar

    yehnafar Registered User

    تاریخ عضویت:
    ‏24 ژانویه 2003
    نوشته ها:
    209
    تشکر شده:
    0
    محل سکونت:
    تهران
    اقا من اين دو تا رو امتحان كردم ولي جواب نداد.

    يعني وقتي sleep (1 رو به زير خط do اضافه كردم ارور داد و گفت همچين فانكشني رو نمي شناسه.
    doevent رو هم كه اضافه كردم اشكال نگرفت ولي اون مشكل اشغال صد در صد سي پي يو باقي بود و هيچ تغيري نكرده بود. :( :(
     
  16. saeedsmk

    saeedsmk مدیر بازنشسته

    تاریخ عضویت:
    ‏6 سپتامبر 2003
    نوشته ها:
    1,519
    تشکر شده:
    4
    اقا اينم كد
    کد:
    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 unLoadMe As Boolean
    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 Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds 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
    
    
    
    
    Private Sub Command1_Click()
        Dim ExitLoop As Boolean
        t = Val(Text1.Text)
        n = Val(Text2.Text)
        
        For i = 1 To n
            m = 1 + Int(Log(n) / Log(10))
            'Path = "E:\ssiim\" + Right$(Str$(n), m)
            'SuperShell Path + "\ssiimwin.exe", Path, 0, SW_NORMAL, HIGH_PRIORITY_CLASS
            MsgBox "x"
            t2 = Timer
            If i < n Then
                Do
                    Sleep 1
                    DoEvents
                    If unLoadMe Then Exit Sub
                Loop Until (t2 + t < Timer)
            End If
            
        Next i
        
            
    End Sub
    
    Private Sub Command2_Click()
        Unload Me
    End Sub
    
    Private Sub Form_Load()
        unLoadMe = False
    End Sub
    
    Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
        unLoadMe = True
    End Sub
    
    اقا اميدوارم كمكت كنه
     
  17. yehnafar

    yehnafar Registered User

    تاریخ عضویت:
    ‏24 ژانویه 2003
    نوشته ها:
    209
    تشکر شده:
    0
    محل سکونت:
    تهران
    آقا دستت درست. گمونم كار ميكنه :)

    ايشالا عروسيت. :lol:
     
  18. saeedsmk

    saeedsmk مدیر بازنشسته

    تاریخ عضویت:
    ‏6 سپتامبر 2003
    نوشته ها:
    1,519
    تشکر شده:
    4
    خواهش ميكنم
     
zarpopخرید بک لینک عسل طبیعی و گرده گل ایرانیfootbal