Toon posts:

[VB6] Afsluitprobleem

Pagina: 1
Acties:
  • 115 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik heb een programma gemaakt die op wordt gestart zodra de pc wordt opgestart (in startmenu). Maar nu heb ik een stukje code er achter gehangen die zorgt dat er een aantal file's worden gekopieert zodra het programma wordt afgesloten:
code:
1
2
3
4
5
6
7
Private Sub Form_Unload(Cancel As Integer)
    Me.Hide
    GTIAfsluitScherm.Show
    DoEvents
    FileCopy "H:\Mijn documenten\Down\een_bestand.exe", "C:\Temp\een_bestand.exe"
    End
End Sub

Als ik nu mijn pc afmeld krijg ik netjes het GTIAfsluitScherm te zien, en is hij druk bezig om een file te copieren. Maar na drie seconde krijg ik zo'n leuk windows melding dat het programma niet reageert. Als ik er niet op reageer en als hij klaar is met copieren gaat hij netjes verder met afsluiten. Maar hoe zorg ik ervoor dat hij NIET die melding geeft dat hij niet reageert?

  • RobzQ
  • Registratie: Februari 2000
  • Laatst online: 21-12-2020

RobzQ

greedy as a pig

Op vrijdag 01 maart 2002 14:38 schreef jouwmobiel het volgende:
Ik heb een programma gemaakt die op wordt gestart zodra de pc wordt opgestart (in startmenu). Maar nu heb ik een stukje code er achter gehangen die zorgt dat er een aantal file's worden gekopieert zodra het programma wordt afgesloten:
code:
1
2
3
4
5
6
7
Private Sub Form_Unload(Cancel As Integer)
    Me.Hide
    GTIAfsluitScherm.Show
    DoEvents
    FileCopy "H:\Mijn documenten\Down\een_bestand.exe", "C:\Temp\een_bestand.exe"
    End
End Sub

Als ik nu mijn pc afmeld krijg ik netjes het GTIAfsluitScherm te zien, en is hij druk bezig om een file te copieren. Maar na drie seconde krijg ik zo'n leuk windows melding dat het programma niet reageert. Als ik er niet op reageer en als hij klaar is met copieren gaat hij netjes verder met afsluiten. Maar hoe zorg ik ervoor dat hij NIET die melding geeft dat hij niet reageert?
ff een loopje maken en wachten tot de file volledig is gekopieerd (filesize checken, indien gelijk dan END)

..so be wary of any man who keeps a pig farm..


Verwijderd

Tsja, dat komt omdat windows juist probeert alle taken af te sluiten, terwijl jij die taak op dat moment wil starten.

Ik denk dat je een iets andere oplossing moet zoeken. Die functie filecopy kun je misschien proberen te vervangen voor een batchfile dmv

retval = shell("pad_batch",vbhide)

[EDIT]
anders gebruik je ff een van de bekende tweak utils om de timeout van de reageert-niet-melding te verlengen...

Verwijderd

Topicstarter
Op vrijdag 01 maart 2002 14:40 schreef RobzQ het volgende:

[..]

ff een loopje maken en wachten tot de file volledig is gekopieerd (filesize checken, indien gelijk dan END)
Dus ik begrijp hier uit, zodra je programma flink aan het rekenen blijft (Dus een loop uitvoert, o.i.d.) dan zal hij die melding dus niet geven |:(

Typish Micro$oft |:(

Verwijderd

Volgens mij kan je beter een programmatje schrijven waarmee je je pc afsluit en dan daarin ook die filecopy actie uithalen. Dan heb je alles zelf in de hand

als je win9x hebt gaat het ongeveer zo :

Public Declare Function ExitWindowsEx Lib "user32" (ByVal uflags as long,ByVal dwReserved as long) as long

Public Const EXIT_LOGOFF=0
Public Const EXIT_SHUTDOWN=1
Public Const EXIT_REBOOT=2

Public Sub ShutDown(uflags as long)
Call ExitWindowsEx(uflags,0)
End Sub

In winnt/win2k/XP gaat het wat lastiger omdat je het proces eerst administrator rechten moet geven. Maar o

  • RobzQ
  • Registratie: Februari 2000
  • Laatst online: 21-12-2020

RobzQ

greedy as a pig

Op vrijdag 01 maart 2002 14:46 schreef jouwmobiel het volgende:

[..]

Dus ik begrijp hier uit, zodra je programma flink aan het rekenen blijft (Dus een loop uitvoert, o.i.d.) dan zal hij die melding dus niet geven |:(

Typish Micro$oft |:(
Neen, je sluit je programma af terwijl die nog bezig is met de filecopy..

Je moet dus een loopje maken waar je in checked of de file volledig gekopieerd is.

If (filesize(file1) = filesize(file2)) then end
else lekker blijven loopen..

..so be wary of any man who keeps a pig farm..


  • RobzQ
  • Registratie: Februari 2000
  • Laatst online: 21-12-2020

RobzQ

greedy as a pig

Op vrijdag 01 maart 2002 15:12 schreef speertje het volgende:
Volgens mij kan je beter een programmatje schrijven waarmee je je pc afsluit en dan daarin ook die filecopy actie uithalen. Dan heb je alles zelf in de hand

als je win9x hebt gaat het ongeveer zo :

Public Declare Function ExitWindowsEx Lib "user32" (ByVal uflags as long,ByVal dwReserved as long) as long

Public Const EXIT_LOGOFF=0
Public Const EXIT_SHUTDOWN=1
Public Const EXIT_REBOOT=2

Public Sub ShutDown(uflags as long)
Call ExitWindowsEx(uflags,0)
End Sub

In winnt/win2k/XP gaat het wat lastiger omdat je het proces eerst administrator rechten moet geven. Maar o
Hij wil zijn PC niet afsluiten!

..so be wary of any man who keeps a pig farm..


Verwijderd

Topicstarter
Op vrijdag 01 maart 2002 15:14 schreef RobzQ het volgende:

[..]

Hij wil zijn PC niet afsluiten!
Ik wil juist WEL mijn PC afsluiten/afmelden. Maar hij moet eerst mijn acties uitvoer die ik programmeer en als dat ALLEMAAL klaar is dan moet hij pas weer verder gaan met afsluiten/afmelden!

Zoiets heb ik ook thuis bij Internet Anywhere MailServer, als ik hem afsluit zie je eerst een tijdje een scherm van de mailserver, en pas als HJI klaar is met uitvoeren dan gaat hij verder. Dat wil ik dus ook, maar ga eerst ff bovenstaande topics proberen :9

Verwijderd

Wat je kan proberen is het tonen van dat form en de Filecopy in de QueryUnload event te zetten, en de End in de Unload event laten staan.

[edit]
Of een hele andere opzet die garandeert dat alles in de juiste volgorde afgehandeld is voordat het programma sluit.

In de unload doe je alleen dit:
code:
1
2
3
4
5
Private Sub Form_Unload(Cancel As Integer)
    Me.Hide
    GTIAfsluitScherm.Show 1
    End
End Sub

Let op de 1 die nu achter de show staat. Het form wordt nu modal getoond, dus het programma zal niet verder lopen naar de End totdat het afsluitscherm sluit.


Dan in de Form_Activate van GTIAfsluitScherm doe je de Filecopy.
code:
1
2
3
4
5
6
Private Sub Form_Activate(Cancel As Integer)
    DoEvents
    FileCopy "H:\Mijn documenten\Down\een_bestand.exe", "C:\Temp\een_bestand.exe"

    Me.Hide
End Sub

Door de Me.Hide aan het einde zal ie dus het afsluitscherm sluiten na het kopieren en zal ie verder gaan bij de form_unload van dat andere form en de End uitvoeren.

Het is een beetje experimenteren met de volgorde waarin je de dingen doet.

Verwijderd

CopyFile API geprobeerd?

  • RobzQ
  • Registratie: Februari 2000
  • Laatst online: 21-12-2020

RobzQ

greedy as a pig

Op vrijdag 01 maart 2002 15:20 schreef jouwmobiel het volgende:

[..]

Ik wil juist WEL mijn PC afsluiten/afmelden.
Woeps, verkeerd begrepen dan, ik dacht dat je alleen je app af wilde sluiten ipv windows..

..so be wary of any man who keeps a pig farm..


Verwijderd

Topicstarter
Met welke code vraag je nou je filesize op? Ze hebben vorige week m'n VB6 boek meegenomen, en daar stond het in, en op het internot kon ik het zo snel niet vinden!

  • RobzQ
  • Registratie: Februari 2000
  • Laatst online: 21-12-2020

RobzQ

greedy as a pig

Op vrijdag 01 maart 2002 15:38 schreef jouwmobiel het volgende:
Met welke code vraag je nou je filesize op? Ze hebben vorige week m'n VB6 boek meegenomen, en daar stond het in, en op het internot kon ik het zo snel niet vinden!
=> msdn.microsoft.com <=

..so be wary of any man who keeps a pig farm..


Verwijderd

Het probleem zit em niet in de Filecopy. VB wacht met uitvoeren van de rest van het programma totdat de filecopy klaar is. Bij nader inzien denk ik dat het problem em zit in het feit dat doordat je in het beeindigingprocess iets gaat zitten doen wat teveel tijd kost waardoor Windows denkt dat de applicatie niet meer reageert. Windows heeft opdracht gegeven aan het window om te sluiten maar krijgt daar niet snel genoeg een terugmelding van.
Pagina: 1