Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: "Nettiselain" tekele syö muistia!

laxative [03.06.2005 16:35:46]

#

Elikkä olen ny värkkiny tämmösiä simppeleitä
selaimia, joidenka tarkotuksena on helpottaa
habbohotellissa kulkua. Tein tästä threadin
pari kuukautta takaperin, jossa kyselin
pikanäppäimien käytöstä.

Tällä kertaa ongelmana on kuitenkin jumalaton
muistin syöminen. Tämä kyseinen ( exenä 28kt )
oleva ohjelma syö yli 70 megatavua muistia!

Mikä avuksi?
Alla koodi kokonaan. Jos jotenkin saisin sitä
vörkittyä paremmaksi, niin antakaas vaan kuulua.

Private Const lpClassName = "Winamp v1.x"
Private Const strTtlEnd = " - Winamp"
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hWnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Private Function HaeWinampKappale() As String
    Dim hWnd As Long
    hWnd = FindWindow(lpClassName, vbNullString)    'etsitään winamp

    Dim lpText As String * 100

    If hWnd = 0 Then    'ei löytynyt
        HaeWinampKappale = "Ei kappaletta"
        Exit Function
    End If

    Dim intLength As Integer
    intLength = GetWindowText(hWnd, lpText, Len(lpText))

    If (intLength <= 0) Or (intLength > Len(lpText)) Then   'ei onnistunut
         HaeWinampKappale = "Tuntematon"
         Exit Function
    End If

    Dim strTitle As String  'oletetaan että onnistui
    strTitle = Mid$(lpText, 1, intLength)

    'otetaan vielä mahdollisesti ylimääräinen Winamp teksti lopusta pois
    Dim winampViiva As Integer
    winampViiva = InStr(1, strTitle, strTtlEnd, vbTextCompare)
    If winampViiva > 1 Then
        strTitle = Left$(strTitle, winampViiva)
    End If

    HaeWinampKappale = Trim$(strTitle)

End Function
Private Sub Form_DblClick()
Me.Width = WebBrowser1.Width - 1200
Me.Height = WebBrowser1.Height
End Sub
Private Sub Form_Load()
Me.Width = WebBrowser1.Width - 1200
Me.Height = WebBrowser1.Height
End Sub
Private Sub gogogo_Click()
WebBrowser1.Navigate "http://www.turska.org/~habbative/fin/client_popup[2].html"
End Sub
Private Sub Timer_Timer()
On Error Resume Next
If GetAsyncKeyState(vbKeyF6) <> 0 Then
SendKeys (".{bs}{bs}{bs}" & (HaeWinampKappale) & "~")
End If
End Sub

Private Sub Timer1_Timer()
If Habboselain.WindowState = Minimized Then
    Habboselain.Visible = False
End If
End Sub

Private Sub Timer2_Timer()
On Error Resume Next
If GetAsyncKeyState(vbKeyF7) <> 0 Then
Habboselain.WindowState = vbNormal
Habboselain.Visible = True
End If

Timer2.Enabled = False
End Sub

tuomas [03.06.2005 17:42:14]

#

No jos tuosta pitäisi muistin kuluttajaa veikata, niin arvelisin että syyllinen on tuo webbrowser kontrolli. Koodia voisi muutenkin optimoida, ei ole oikein ideaa ehkä laittaa jokaiselle tarkistukselle omaa timer kontrollia.
Siirrä tarkistus koodit yhteen timer kontrolliin, tai tee vaikka silmukka sen tilalle. Lisää myös aliohjelman viimeiselle koodiriville:

Doevents

laxative [03.06.2005 20:51:01]

#

Ai piru ... Luen tuolta oppaasta kyllä noita juttuja, mutten tajua höläyksen pöläystäkään silmukoista.

Jos tekisit jostain kohtaa koodistani esimerkin, niin yrittäisin pähkäillä sen kanssa.

Kiitos.

hunajavohveli [03.06.2005 21:09:29]

#

laxative kirjoitti:

Ai piru ... Luen tuolta oppaasta kyllä noita juttuja, mutten tajua höläyksen pöläystäkään silmukoista.

Silmukat kuuluvat kyllä ihan perusjuttuihin ja ne pitäisi vähintään osata, ennen kuin selainta rupeaa tekemään. Kannattaa lukea niitä oppaita.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta