Hi
Ich habe mir ein Programm geschrieben, das den Windows Taskmanager, sowie die Taskleiste und das Startmenü ersetzen soll!
Ein Screenshot ist hier zu sehen http://home.pages.at/troller507/Pics/bild1.JPG
Jetzt jedoch zu meinem Problem. Das Auslesen der Laufwerksdaten läuft bei meinem Programm in Threads. Hier zu der Code ohne Deklarationen:
Private Sub pThread_OnThreadFinish(ByVal ThreadHandle As Long, ByVal ThreadID _
As Long)
Dim i As Integer
Wait 500
WaitUntilThreadisFinish = 0
lblSearch.Caption = ""
For i = 0 To frmmain.drDrive.ListCount - 2
If i >= 4 Then
Exit For
End If
Next i
If i = 3 Then
frmmain.picGraphDrive.Width = 1485
frmmain.picGraphDrive.Left = 810
frmmain.lblSysAnly(0).Left = 69
frmmain.lblSysAnly(1).Left = 69
frmmain.lblSysCapt.Left = 76
ElseIf i = 4 Then
frmmain.picGraphDrive.Width = 1305
frmmain.picGraphDrive.Left = 990
frmmain.lblSysAnly(0).Left = 55
frmmain.lblSysAnly(1).Left = 55
frmmain.lblSysCapt.Left = 62
ElseIf i = 5 Then
frmmain.picGraphDrive.Width = 1125
frmmain.picGraphDrive.Left = 1170
frmmain.lblSysAnly(0).Left = 41
frmmain.lblSysAnly(1).Left = 41
frmmain.lblSysCapt.Left = 42
End If
frmmain.picGraphDrive.Line (0, 0)-(i * 10, 100), &HFF0000, BF
For i = 0 To UBound(FreeBArray) - 1
If i >= 4 Then
Exit For
End If
frmmain.lblDrive1(i) = frmmain.drDrive.List(i)
If FreeBArray(i) <> 0 And FreeBArray(i) <> "" Then
If (100 / TotBArray(i)) * FreeBArray(i) <> 0 Then _
frmmain.picGraphDrive.Line (i * 10, 0)-((i * 10) + 10, (100 / _
TotBArray(i)) * FreeBArray(i)), &HFFFF00, BF
Else
frmmain.picGraphDrive.Line (i * 10, 0)-((i * 10) + 10, 100), _
&HFFFF00, BF
End If
frmmain.picGraphDrive.Line (i * 10, 0)-(i * 10, 100), &H80000007
frmmain.lblDs(i) = FSArray(i)
frmmain.lblFs(i) = FSPArray(i)
Next i
tmrGetProzessName.Enabled = True
Wait 500
frmmain.tmrGetAvailableDriveInf.Enabled = True
End Sub
Sub DoInfo(DummyArgument As Variant)
Dim i
Dim Result As Long
Dim Drv As String
Dim SerN As Long, PathL As Long, flags As Long
Dim XPC As Long, BPS As Long
Dim FreeC As Long
Dim TotC As Long
Dim VolN As String * 256
Dim FileS As String * 256
ReDim FSArray(0)
ReDim FSPArray(0)
ReDim TotBArray(0)
ReDim FreeBArray(0)
For i = 0 To frmmain.drDrive.ListCount - 1
Drv = frmmain.drDrive.List(i) & "\"
Result = GetVolumeInformation(Drv, VolN, 256, SerN, _
PathL, flags, FileS, 256)
If Result = 0 Then
FSArray(UBound(FSArray)) = "**"
Else
If Left$(FileS, InStr(FileS, Chr$(0)) - 1) = "NTFS" Then
FSArray(UBound(FSArray)) = "ns"
ElseIf Left$(FileS, InStr(FileS, Chr$(0)) - 1) = "FAT" Then
FSArray(UBound(FSArray)) = "ft"
ElseIf Left$(FileS, InStr(FileS, Chr$(0)) - 1) = "CDFS" Then
FSArray(UBound(FSArray)) = "cf"
End If
End If
Wait 250
Result = GetDiskFreeSpace(Drv, XPC, BPS, FreeC, TotC)
If Result = 0 Then
FSPArray(UBound(FSPArray)) = "**"
Else
FreeBArray(UBound(FreeBArray)) = CDbl(FreeC) * XPC * BPS 'freeb
FSPArray(UBound(FSPArray)) = Format$(FreeBArray(UBound(FreeBArray)) _
/ 1000000000, 0)
End If
TotBArray(UBound(TotBArray)) = CDbl(TotC) * XPC * BPS 'totb
ReDim Preserve FSArray(UBound(FSArray) + 1)
ReDim Preserve FSPArray(UBound(FSPArray) + 1)
ReDim Preserve FreeBArray(UBound(FreeBArray) + 1)
ReDim Preserve TotBArray(UBound(TotBArray) + 1)
Next i
End Sub Lasse ich diesen Thread mehrer Male im Programm laufen d.h. alle anderen Daten (Cpu Speed, Ram Usage, In/Out Network Traffic usw.) werden auch ermittelt, so stürzt das Programm nach etwa 30s ab! Deaktiviere ich jedoch diese Funktion so läuft der Thread einwandfrei! Umgekehrt genau gleich (d.h. alle Daten werden problemlos ermittelt, der Thread läuft nicht).
Fehlerbeschreib beim Absturz: AppName: Vb6.exe .... Offset: 00000174e ...
Ich habe diverse Sachen ausprobiert um das Problem einzugrenzen, jedoch ohne Erfolg! Wie lässt sich die genau Ursache herausfinden?
Gruss Flaute |