Avatar billede inkognito1 Nybegynder
01. marts 2002 - 14:20 Der er 14 kommentarer og
2 løsninger

Timer - kør igen først når script er færdigt.

Jeg fik denne kode af en i går. Den køre perfekt men kan man få VB til at tjekke om filen i forvejen køre inden man exeuter den igen. Det er fordi det kan godt ske at den ikke er færdig med scriptet som det ser ud nu.
-------
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

Public MyCount As Long

Private Sub Timer1_Timer()

ShellExecute Me.hwnd, vbNullString, "c:\run\sys.vbs", vbNullString, vbNullString, vbHide

MyCount = MyCount + 1
If MyCount > 100000 Then MyCount = 1

Label2.Caption = "Script kørt " & MyCount & " gange"

End Sub
---------
Så en eller andern funktion der lige tjkker om VBS filen køre.

Håber en lige ved om man kan det ...
Avatar billede nolle_k Nybegynder
01. marts 2002 - 14:26 #1
Hvad med at disable timeren indtil scriptet er færdigt og så starte timeren igen bagefter??

Jeg ville gøre følgende

i et mod defineres

Public Declare Function GetProcessVersion Lib "Kernel32.dll" (ByVal lProcessID As Long) As Long

Public Sub WaitForProcessToEnd(PID As Long)
  Do
    DoEvents
  Loop While GetProcessVersion(PID) <> 0
End Sub

Herefter ville jeg kalde scriptet via Shell der er et indbygget kald i VB og som returnerer programmet PID efter start af eksekvering

dvs.

WaitForProcessToEnd Shell("C:\run\sys.vbs", vbHide)

//Nolle_K
Avatar billede bennytordrup Nybegynder
01. marts 2002 - 14:30 #2
Er det et krav, at koden kører videre efter shellexecute? Hvis ikke, så kan du bruge WaitForSingleObject på den handle, du får fra ShellExecute.
Avatar billede inkognito1 Nybegynder
01. marts 2002 - 15:31 #3
I må lige prøve at hjælpe mig lidt mere .. jeg er ikke særlig erfaren med VB.

Nolle k: den skriver noget med "Ambiguous name detected: WaitForProcessToEnd"

Når jeg førsger at compile den


Bebby.tordrup: Hvor vil du sætte WaitForSingleObject ind den kode jeg har. Hvordan får jeg handle ??
Avatar billede nolle_k Nybegynder
01. marts 2002 - 15:33 #4
Du erstatter ShellExecute Me.hwnd, vbNullString, "c:\run\sys.vbs", vbNullString, vbNullString, vbHide

med

WaitForProcessToEnd Shell("C:\run\sys.vbs", vbHide)
Avatar billede bennytordrup Nybegynder
01. marts 2002 - 15:36 #5
I declarations:

Const INFINITE = &HFFFF
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long

I timer-eventet

dim hHand as long
hHand = ShellExecute Me.hwnd, vbNullString, "c:\run\sys.vbs", vbNullString, vbNullString, vbHide
if hHand>32 then WaitForSingleObject hHand, INFINITE
Avatar billede inkognito1 Nybegynder
01. marts 2002 - 15:37 #6
Den siger fuktionen ikke er diefineret ..
Avatar billede inkognito1 Nybegynder
01. marts 2002 - 15:39 #7
Jeg er helt forvirret .. kan i ikke sætte det sammen med den kode jeg har pasted ind...
Avatar billede nolle_k Nybegynder
01. marts 2002 - 15:41 #8
Public MyCount As Long

Private Declare Function GetProcessVersion Lib "Kernel32.dll" (ByVal lProcessID As Long) As Long

Private Sub WaitForProcessToEnd(PID As Long)
  Do
    DoEvents
  Loop While GetProcessVersion(PID) <> 0
End Sub


Private Sub Timer1_Timer()


WaitForProcessToEnd Shell("C:\run\sys.vbs", vbHide)

MyCount = MyCount + 1
If MyCount > 100000 Then MyCount = 1

Label2.Caption = "Script kørt " & MyCount & " gange"

End Sub
Avatar billede bennytordrup Nybegynder
01. marts 2002 - 15:50 #9
Public MyCount As Long

Const INFINITE = &HFFFF
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
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 Timer1_Timer()

dim hHand as long
hHand = ShellExecute Me.hwnd, vbNullString, "c:\run\sys.vbs", vbNullString, vbNullString, vbHide
if hHand>32 then WaitForSingleObject hHand, INFINITE
MyCount = MyCount + 1
If MyCount > 100000 Then MyCount = 1

Label2.Caption = "Script kørt " & MyCount & " gange"

End Sub
Avatar billede inkognito1 Nybegynder
01. marts 2002 - 15:51 #10
Shell("C:\run\sys.vbs", vbHide)

Shell call virker ikke på min server når der er tale om en VBS fil. Det virker fimt nok når det er exe fil.

Derfor fik jeg den løsning med ShellExecute
Avatar billede inkognito1 Nybegynder
01. marts 2002 - 15:52 #11
Benny:

hHand = ShellExecute Me.hwnd, vbNullString, "c:\run\sys.vbs", vbNullString, vbNullString, vbHide

denne linie optræder med rødt .. alså error
Avatar billede bennytordrup Nybegynder
01. marts 2002 - 15:56 #12
Sorry, skulle være

hHand = ShellExecute (Me.hwnd, vbNullString, "c:\run\sys.vbs", vbNullString, vbNullString, vbHide)
Avatar billede inkognito1 Nybegynder
01. marts 2002 - 16:11 #13
Hvad mener du med "Er det et krav, at koden kører videre efter shellexecute? "

Vil det sige den kun køre scriptet en gang ?
Avatar billede inkognito1 Nybegynder
01. marts 2002 - 16:31 #14
Vil dette fungere ??
-----
Public MyCount As Long

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 Declare Function GetProcessVersion Lib "Kernel32.dll" (ByVal lProcessID As Long) As Long

Private Sub WaitForProcessToEnd(PID As Long)
  Do
    DoEvents
  Loop While GetProcessVersion(PID) <> 0
End Sub


Private Sub Timer1_Timer()


WaitForProcessToEnd ShellExecute(Me.hwnd, vbNullString, "c:\run\sys.vbs", vbNullString, vbNullString, vbHide)


MyCount = MyCount + 1
If MyCount > 100000 Then MyCount = 1

Label2.Caption = "Script kørt " & MyCount & " gange"

End Sub
Avatar billede inkognito1 Nybegynder
01. marts 2002 - 20:20 #15
Den venter ikke med at køre scriptet igen.

Skal jeg sætte Timer til disable som difault ?
Avatar billede inkognito1 Nybegynder
22. april 2002 - 23:22 #16
jeg fant en anden løsning .. men tak for jeres tid ..
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