Avatar billede nolle_k Nybegynder
13. juni 2001 - 10:43 Der er 16 kommentarer og
1 løsning

Gøre Shell Synkron!

Hej!

Kan det ikke lade gøre at gøre Shell kommandoen synkron så denne først returnerer når den kommando man udfører er færdig???


//Nolle_K
Avatar billede chris2k Nybegynder
13. juni 2001 - 11:43 #1
Jo, men du skal bruge en anden kommando. Du skal have fat i nogle API\'er. Søg på www.pscode.com efter \"ShellAndWait\"
Avatar billede driis Nybegynder
13. juni 2001 - 13:55 #2
Nej, men du kan få din kode til at vente på, at Shell er færdig med at eksekvere, ved at bruge 2 API\'er, ShellExecuteEx og WaitForSingleObject - 2 secs, så finder jeg lige et eksempel...
Avatar billede chris2k Nybegynder
13. juni 2001 - 14:05 #3
Det var også det jeg sagde...
Avatar billede driis Nybegynder
13. juni 2001 - 14:05 #4
Private Type SHELLEXECUTEINFO
    cbSize As Long
    fMask As Long
    hwnd As Long
    lpVerb As String
    lpFile As String
    lpParameters As String
    lpDirectory As String
    nShow As Long
    hInstApp As Long
    lpIDList As Long
    lpClass As String
    hkeyClass As Long
    dwHotKey As Long
    hIcon As Long
    hProcess As Long
End Type
Private Declare Function ShellExecuteEx Lib \"shell32.dll\" Alias \"ShellExecuteExA\" (lpExecInfo As SHELLEXECUTEINFO) As Long
Private Declare Function WaitForSingleObject Lib \"kernel32.dll\" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Dim Go As SHELLEXECUTEINFO
Dim Ans As Long
Dim gStr As String
Const WAIT_TIMEOUT = &H102
Const SEE_MASK_NOCLOSEPROCESS = &H40

Private Sub Command1_Click()
With Go
    .cbSize = Len(Go)
    .fMask = SEE_MASK_NOCLOSEPROCESS
    .hwnd = Me.hwnd
    .lpVerb = \"open\"
    .lpFile = \"c:\\pingfil.bat\"
    .lpParameters = \"\"
    .lpDirectory = \"c:\\\"
    .nShow = 5
End With
Ans = ShellExecuteEx(Go)

If Not Go.hProcess = 0 Then
    Do
        Ans = WaitForSingleObject(Go.hProcess, 0)
        DoEvents
    Loop While Ans = WAIT_TIMEOUT
Else
    MsgBox \"Filen kunne ikke åbnes...\"
    Exit Sub
End If
Avatar billede driis Nybegynder
13. juni 2001 - 14:08 #5
... denne kode fortsætter først, når det åbnede program er udført.
Avatar billede nolle_k Nybegynder
13. juni 2001 - 14:11 #6
Hvis jeg gør som du skriver driis så får jeg at vide at filen ikke findes selvom der lige er blevet åbnet et dos vindue der vise det der står i den bar fil jeg eksekvere???

Avatar billede nolle_k Nybegynder
13. juni 2001 - 14:11 #7
ja altså bat fil jeg eksekverer!
Avatar billede driis Nybegynder
13. juni 2001 - 15:23 #8
Hmmm... præcis hvor får du det at vide? Prøv evt. med en  EXE fil, f.eks. notepad.exe
Avatar billede chris2k Nybegynder
13. juni 2001 - 15:25 #9
Nogle gange kan windows finde på at vise en dos skærm, hvis der er fejl i den fil du forsøger at køre...
Avatar billede nolle_k Nybegynder
13. juni 2001 - 15:27 #10
Jeg får samme fejl uanset om det er en exe eller en bat fil jeg forsøger mig på!

Af en eller anden årsag er DO.hProcess = 0!!??
Avatar billede chris2k Nybegynder
13. juni 2001 - 15:29 #11
Det er nok fordi at det ikke er lykkedes den at starte filen. Prøv at skrive en fuld sti
Avatar billede driis Nybegynder
13. juni 2001 - 22:14 #12
Hmm... hvilket OS kører du det under? Koden ovenover er testet på Win2K, men burde da virke i alle OS...
Avatar billede nolle_k Nybegynder
14. juni 2001 - 08:31 #13
WinNT
Avatar billede chris2k Nybegynder
14. juni 2001 - 10:32 #14
Det kan godt være det ikke virker under WinNT.

Prøv at søge på www.pscode.com, de plejer at have noget.
Avatar billede driis Nybegynder
14. juni 2001 - 13:37 #15
Eller måske du kan bruge den her i stedet - Jeg ved ikke hvorfor den anden løsning ikke du\'r, men der kan evt. være forskelligheder i API kaldene mellem de 2 OS\'er, som gør at det ikke virker.

http://www.vbaccelerator.com/codelib/shell/shelwait.htm
Avatar billede nolle_k Nybegynder
19. juni 2001 - 11:37 #16
Er løst på anden vis! Poller på om de data der skal indsættes alle er blevet indsat! Hvis dette er tilfældet må shell kommandoen være endt!

Avatar billede python Nybegynder
26. marts 2003 - 16:33 #17
har lidt problemer med de her shellandwait ting.. har nok prøvet de første 10 forskellige.. og de lukker alle liige efter de har launched counter-strike(CS)..

Jeg ved ikke om hl.exe launcher et andet program, der gør at ens shellandwait bare er færdig med det samme.. men hvis den gør det hvad gør jeg så ?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester