Sayfa: [1]   Aşağı git
  Yazdır  
Gönderen Konu: ÇAlışan programı bekleme sorunu  (Okunma Sayısı 239 defa)
0 Üye ve 1 Ziyaretçi konuyu incelemekte.
SAZLI
Yeni Üye
*

Karma: 0
Offline Offline

Cinsiyet: Bay
Mesaj Sayısı: 6


Üyelik Bilgileri
« : 08 Ekim 2008, 20:09:14 »

Arkadaşlar VB& ile hazırladığım bir programda başka bir programı çalıştırıyorum.Ancak bu programın çalışması esnasında ana programın devre dışı kalıp,çalışan programın işi bitip kapandığında tekrar aktif olmasını istiyorum.Hide-Show ya da Visible ayarı denedim olmadı.En sonunda aşağıdaki kodları buldum.

Kod:
Option Explicit
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long

Private Const SYNCHRONIZE = &H100000
Private Const INFINITE = -1&

' Start the indicated program and wait for it
' to finish, hiding while we wait.
Private Sub ShellAndWait(ByVal program_name As String, ByVal window_style As VbAppWinStyle)
Dim process_id As Long
Dim process_handle As Long

 ' Start the program.
 On Error GoTo ShellError
 process_id = Shell(program_name, window_style)
 On Error GoTo 0

 ' Hide.
 Me.Visible = False
 DoEvents

 ' Wait for the program to finish.
 ' Get the process handle.
 process_handle = OpenProcess(SYNCHRONIZE, 0, process_id)
 If process_handle <> 0 Then
   WaitForSingleObject process_handle, INFINITE
   CloseHandle process_handle
 End If

 ' Reappear.
 Me.Visible = True
 Exit Sub

ShellError:
 MsgBox "Error starting task " & _
   txtProgram.Text & vbCrLf & _
   Err.Description, vbOKOnly Or vbExclamation, _
   "Error"
End Sub

' Start the program.
Private Sub cmdRun_Click()
 
ShellAndWait [b]ÇALIŞANPROGRAM[/b], vbNormalFocus
   
End Sub



Fakat bu kezde şöyle bir sorunla karşılaştım.
Ben programımı çalıştırırken;

Kod:
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long


Private Sub Command2_Click()
ShellExecute 0, "", "VirtualDubMod.exe", "/r /s""addaudio.vcf"" /x", "", 1
End Sub
kod grubunu kullanıyorum.Üstte yazdığım kodla uyumunu bir türlü sağlayamadım.Bu konuda yardımcı olabilirseniz sevinirim.
Logged
mayhemious
Administrator
*

Karma: 71
Offline Offline

Cinsiyet: Bay
Mesaj Sayısı: 1004


mayhem mayhemious


Üyelik Bilgileri WWW
« Yanıtla #1 : 08 Ekim 2008, 22:16:39 »

böyle bir kod var:

Option Explicit

Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long

Private Const SYNCHRONIZE = &H100000
Private Const INFINITE = -1&

Public Sub RunUntilFinished(ByVal sApp As String)
    Dim lProcID As Long
    Dim hProc As Long

    ' Start the App
    On Error GoTo ErrHndlr
    lProcID = Shell(sApp, vbNormalFocus)
    On Error GoTo 0

    DoEvents

    hProc = OpenProcess(SYNCHRONIZE, 0, lProcID)
    If hProc <> 0 Then
      WaitForSingleObject hProc, INFINITE
      CloseHandle hProc
    End If
    Exit Sub

ErrHndlr:
    MsgBox "Error starting App:" & vbCrLf & _
       "App: " & sApp & vbCrLf & _
       "Err Desc: " & Err.Description
    Err.Clear
End Sub

Private Sub Command1_Click()
RunUntilFinished "notepad.exe"
MsgBox "oldu"
End Sub

*******************************************************************

veya bir değişik versiyonu

******************************************************************
   Const SYNCHRONIZE = &H100000

   Const INFINITE = &HFFFF

   Const WAIT_OBJECT_0 = 0

   Const WAIT_TIMEOUT = &H102

   Private Declare Function OpenProcess Lib "kernel32" ( _
    ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, _
    ByVal dwProcessId As Long) As Long

   Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long

   Private Declare Function CloseHandle Lib "kernel32" ( _
    ByVal hObject As Long) As Long

Private Sub Command1_Click()
Dim lPid As Long
   Dim lHnd As Long
   Dim lRet As Long



   lPid = Shell("notepad.exe", vbNormalFocus)
Me.Hide
   If lPid <> 0 Then


    lHnd = OpenProcess(SYNCHRONIZE, 0, lPid)
   

    If lHnd <> 0 Then lRet = WaitForSingleObject(lHnd, INFINITE)
    CloseHandle (lHnd)
    End If

   Me.Show
   
End Sub


*********************************************************************

ben bu sorunu çözmek için AutoIT script kullanıyorum
Logged

Mesaj Sayısı 10 ve Altı olanlar Sorularınız YANITLANMAYACAK

Linklerin Görülmesine Izin Verilmiyor
Linki Görebilmek Için Üye Ol veya Giris Yap
V.I.P. Üye Olun. Programlamada Bir Adım Öne Geçin
SAZLI
Yeni Üye
*

Karma: 0
Offline Offline

Cinsiyet: Bay
Mesaj Sayısı: 6


Üyelik Bilgileri
« Yanıtla #2 : 08 Ekim 2008, 22:23:58 »

Teşekkür ederim.
Ancak buradaki ;

shell("notepad.exe", vbNormalFocus)

satırı ile benim kullandığım

ShellExecute 0, "", "VirtualDubMod.exe", "/r /s""addaudio.vcf"" /x", "", 1

satırı uyumsuzluk gösteriyor.Zaten asıl sorunum bu.Declarasyonlarını ayarlayabilsem yukarıda verdiğim kodlar işimi çözecek.
Logged
mayhemious
Administrator
*

Karma: 71
Offline Offline

Cinsiyet: Bay
Mesaj Sayısı: 1004


mayhem mayhemious


Üyelik Bilgileri WWW
« Yanıtla #3 : 08 Ekim 2008, 22:32:24 »

Gülümseme tabi ben projeniz hakkında fikir yürütemediğim için sorunu tam anlayamadım. virtualdub ı addaudio komutu ile çalıştırmak istiyorsunuz. exeyi ek komutla çalıştıran farklı fonksiyonlar vardı bir de onları inceleyelim
Logged

Mesaj Sayısı 10 ve Altı olanlar Sorularınız YANITLANMAYACAK

Linklerin Görülmesine Izin Verilmiyor
Linki Görebilmek Için Üye Ol veya Giris Yap
V.I.P. Üye Olun. Programlamada Bir Adım Öne Geçin
SAZLI
Yeni Üye
*

Karma: 0
Offline Offline

Cinsiyet: Bay
Mesaj Sayısı: 6


Üyelik Bilgileri
« Yanıtla #4 : 08 Ekim 2008, 23:01:59 »

Haklısınız.Virtualdub programını içerisinde işlenmiş kodlar (bir çeşit toplu işlem yaptırma) bulunan addaudio.vcf dosyası ile açtırmak istiyorum.Verdiğimmkodlarla bunu zaten yaptırabiliyorum.
Daha açık konuşmak gerekirse;
Virtualdub bir çeşit video işleme programı.önceden belirlenmşi bir videoya ses eklemek için oluşturulmuş .vcf uzantılı dosyayı virtualdub ile açtırıyor ve videoya ses ekleme işlemi yaptırıyorum.Ancak bunu yaparken vb6 da hazırlanan ana programın saklanmış olması gerekiyor.Yani ses ekleme işlemi başladığında (virtualdub çalışmaya başladığında) program yok olmalı,çünkü içine gömülen dosyalar program kapatılışında otomatik silinmeye kodlanmış.Ancak Virtualdub çalışırken ana program çalışırsa dosyalar silinmiyor.Bu nedenle ana programın virtualdub ın ses ekleme işin bekledikten sonra (ki .vcf dosyası işlem bittiğinde otomatik kapanmaya kodlanmış) ana programın tekrar saklandığı yerden çıkıp kendini kullanıcıya göstermesi gerekiyor.Kullanıcı ana programı kapattığında res'den çıkarttığı dosyaları silebilsin.

Biraz karışık oldu galiba:)
Logged
Sayfa: [1]   Yukarı git
  Yazdır  
GoogleTagged

 
Gitmek istediğiniz yer: