Toon posts:

[VB]Zelf gedaan, maar werkt niet (teller+batch)

Pagina: 1
Acties:

Verwijderd

Topicstarter
Omdat ik het maar zelf moest doen heb ik dat gedaan.

Ik heb een .bas file aangemaakt zoals beschreven stond in de tut, en ook een .bat file (c:\test.bat)

Dit is de code van het form dat ik gebruik, de teller doet het, het dos venster ook, maar dan laad ie da batch file niet :(
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Private Sub Command1_Click()
    Label1.Caption = "Running: "
    Start = Timer   ' Set start time.
Do While Label1.Caption = "Running: "
    DoEvents   ' Yield to other processes.
    Label2.Caption = FormatDateTime(Now, vbLongTime)
Loop
End Sub

   Private Sub Form_Load()
     If AllocConsole() Then
     hConsole = GetStdHandle(STD_OUTPUT_HANDLE)
     If hConsole = 0 Then MsgBox "Couldn't allocate STDOUT"
     Else
     MsgBox "Couldn't allocate console"
     End If
      If Label2.Caption = "16:57:00" Then
   Dim Result As Long, sOut As String, cWritten As Long
     sOut = "Hi There" & vbCrLf
     Result = WriteConsole(hConsole, ByVal sOut, Len(sOut), cWritten, _
                   ByVal 0&)
     Shell "C:\TEST.BAT"
     End If
   End Sub

   Private Sub Form_Unload(Cancel As Integer)
     CloseHandle hConsole
     FreeConsole
   End Sub

Verwijderd

Mja wie zegt dat de uitvoer van de BAT-file gedirect wordt naar jouw console?
Volgens mij maakt hij gewoon een nieuwe console aan.

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 28-08 12:00

Janoz

Moderator Devschuur®

!litemod

ff 1 ding. Begrijp je helemaal wat overal gebeurt?

Daarnaast, weet je zeker dat je test.bat niet wordt uitgevoerd? Het kan namelijk best zijn dat deze wel wordt uitgevoerd zonder dat er een dosbox verschijnt. Het is zowieso niet het geval dat die batchfile in de console wordt uitgevoerd (afaik)

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Topicstarter
Op maandag 27 mei 2002 17:05 schreef GrAviTy het volgende:
Mja wie zegt dat de uitvoer van de BAT-file gedirect wordt naar jouw console?
Volgens mij maakt hij gewoon een nieuwe console aan.
Umm, omdat deze code bij form_load stond:
code:
1
2
3
4
5
6
7
8
   Private Sub Form_Load()
     If AllocConsole() Then
     hConsole = GetStdHandle(STD_OUTPUT_HANDLE)
     If hConsole = 0 Then MsgBox "Couldn't allocate STDOUT"
     Else
     MsgBox "Couldn't allocate console"
     End If
        End Sub

end deze code bij een button waardoor in die console die batch file werd uitgevoerd:
code:
1
2
3
4
5
6
7
Private Command1_click()
   Dim Result As Long, sOut As String, cWritten As Long
     sOut = "Hi There" & vbCrLf
     Result = WriteConsole(hConsole, ByVal sOut, Len(sOut), cWritten, _
                   ByVal 0&)
     Shell "C:\TEST.BAT"
 end sub

Verwijderd

Topicstarter
Op maandag 27 mei 2002 17:06 schreef Janoz het volgende:
ff 1 ding. Begrijp je helemaal wat overal gebeurt?

Daarnaast, weet je zeker dat je test.bat niet wordt uitgevoerd? Het kan namelijk best zijn dat deze wel wordt uitgevoerd zonder dat er een dosbox verschijnt. Het is zowieso niet het geval dat die batchfile in de console wordt uitgevoerd (afaik)
Punt 1:
Ja ik weet wat er word gedaan
Punt 2:
Das een goede, ik zal es een .exe laten openen in die batch file en dan kijken of er iets gebeurt.

Verwijderd

Shell start een process, dit kan een EXE/COM zijn of een BAT file, zelfs een gewoon file met een geregde extentie. Dit process heeft HELEMAAL NIETS te maken met jouw programma. Daarom zal er ook een NIEUWE console verster gecreerd worden.
En waarschijnlijk gebeurt er niet veel in je BAT file zodanig dat je de nieuwe zelfs gewoon niet ziet.

Verwijderd

Topicstarter
Op maandag 27 mei 2002 17:11 schreef GrAviTy het volgende:
Shell start een process, dit kan een EXE/COM zijn of een BAT file, zelfs een gewoon file met een geregde extentie. Dit process heeft HELEMAAL NIETS te maken met jouw programma. Daarom zal er ook een NIEUWE console verster gecreerd worden.
En waarschijnlijk gebeurt er niet veel in je BAT file zodanig dat je de nieuwe zelfs gewoon niet ziet.
Kan ik dus gewoon ook alleen shell "c:\Bla.bat" doen en de hele reeks (op de timer na) weg laten?

Kan het misschien hier aan liggen:
De timer maakt van label2 iedere seconde de lokale tijd in deze vorm uur:min:sec
is het dan correct als ik die zo aanspreek:

If label2.caption = "uur:min:sec" ??

Edit:
Ik ben er nu zeker van dat de batch file _niet_ laad, maar wel degelijk bestaat!
Edit2: Nog een keer testen voor de zekerheid met staight batch file...

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 28-08 12:00

Janoz

Moderator Devschuur®

!litemod

Ik denk dat je een verkeerde timer te pakken hebt... Deze timer is om gewoon de tijd op je app te zetten. Jij hebt een andere timer nodig. Die if wordt maar 1x uitgevoerd. Het is niet zo dat ie gewoon wacht todat de conditie waar is.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Ik denk dat ik eindelijk door heb wat je probeert te doen:
Je wil een BAT-file starten op een bepaald moment?

Verwijderd

Topicstarter
Op maandag 27 mei 2002 17:20 schreef Janoz het volgende:
Ik denk dat je een verkeerde timer te pakken hebt... Deze timer is om gewoon de tijd op je app te zetten. Jij hebt een andere timer nodig. Die if wordt maar 1x uitgevoerd. Het is niet zo dat ie gewoon wacht todat de conditie waar is.
Kijk...
Nu word het duidellijk waarom het niet werkt...
SHIT

Verwijderd

Op maandag 27 mei 2002 17:21 schreef slindenau het volgende:

[..]

Daar zat ik idd ook al aan te denken, maar als je zo de code bekijkt kan het toch gewoon werken???
Neen, want de Form_Load wordt maar één maal doorlopen en dat is bij het "laden" van je Form.
Je moet het inderdaad met een andere timer aanpakken. Al die zooi van die console is zoals je gezegd hebt niet nodig.

Verwijderd

Topicstarter
K,
FF googlen dan, tot ik een betere timer gevonden heb...
Of nog ff doorkloten aan deze code tot ie werkt...

Ok: Nu werkt ie wel, alleen opent ie de batch file zon 7X...Dus toch maar naar die andere timer zoeken.

Edit:
Is dit iets:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Wait Method Example

This example pauses a running macro until 6:23 P.M. today.

Application.Wait "18:23:00"
This example pauses a running macro for approximately 10 seconds.

newHour = Hour(Now())
newMinute = Minute(Now())
newSecond = Second(Now()) + 10
waitTime = TimeSerial(newHour, newMinute, newSecond)
Application.Wait waitTime
This example displays a message indicating whether 10 seconds have passed.

If Application.Wait(Now + TimeValue("0:00:10")) Then
    MsgBox "Time expired"
End If

En moet ik dan "Application" zo laten of veranderen?

Verwijderd

Wat jij wilt is heel simpel hoor.

Start een nieuw project.
Plaats op je Form een Timer object. Een klokje in de buurt van een Label een Button etc.

Zet het Interval op 1000 (of iets tussen 1000 en 65000, elke x milliseconden zal hij de code Timer1_Timer (zie verder) uitvoeren).

En je code plaats je:
code:
1
2
3
4
5
Private Sub Timer1_Timer()
    If Time = "01:01:01" Then
      Shell "c:\iets.bat"
    End If
End Sub

Verwijderd

Topicstarter
Op maandag 27 mei 2002 17:44 schreef GrAviTy het volgende:
Wat jij wilt is heel simpel hoor.

Start een nieuw project.
Plaats op je Form een Timer object. Een klokje in de buurt van een Label een Button etc.

Zet het Interval op 1000 (of iets tussen 1000 en 65000, elke x milliseconden zal hij de code Timer1_Timer (zie verder) uitvoeren).

En je code plaats je:
code:
1
2
3
4
5
Private Sub Timer1_Timer()
    If Time = "01:01:01" Then
      Shell "c:\iets.bat"
    End If
End Sub
Ummm :?
"Zet in je form een timer"
Daar houd het zon beetje op...
Form, ok, Maar dan :+

  • robjanssen
  • Registratie: September 2001
  • Laatst online: 02-08 16:10

robjanssen

Software Developer

Een Timer is zo'n ding wat je aan de linkse kant ziet staan bij alle anders componenten.

Iets wat op een klokje lijkt.
Pagina: 1