VB 웹 페이지 프로그램 (VB + DOS)

VB 로 링크 를 닦 는 것 이 간단 하 다 고 생각 했 는데 실제 작업 을 하 다가 BUG 를 만 났 어 요!바로 IE 커 널 의 브 라 우 저 메모리 유출 문제 입 니 다.VB 에 서 는 웹 컨트롤 로 링크 를 계속 클릭 하거나 새로 고 칠 때 메모리 가 계속 쌓 입 니 다. 모든 대상 을 풀 어도 팝 업 페이지 를 닫 습 니 다. 메 인 웹 컨트롤 이 닫 히 지 않 으 면 메모리 가 놀 라 울 정도 로 쌓 입 니 다. (웹 컨트롤 은 IE 커 널 을 사용 하기 때 문 입 니 다)
그래서 나 는 인터넷 에 접속 하여 해결 방법 을 찾 았 지만 거인 을 발견 하지 못 했다. 얻 은 대답 은 오직 하나 뿐 이 었 다. 마이크로소프트 가 해결 할 때 까지 기 다 려 라!
      그러나 메모리 방출 을 위해 일정 시간 실행 한 후에 프로그램 을 다시 시작 할 수 있다 는 말 도 있다.나 는 이것 이 나의 능력 범위 내 에서 가장 좋 은 방법 이 라 고 생각한다!
      어떻게 다시 켜 지 죠?사용자 가 당신 의 프로그램 을 사용 하고 있다 고 생각해 보 세 요. 그러나 그 는 갑자기 사 라 졌 습 니 다. 받 아들 일 수 없습니다!그 다음 에 프로그램 을 최소 화 할 때 다시 시작 할 때 사용자 에 게 소란 을 피 우지 않 습 니까?어떻게 프로그램 을 조용히 합 니까?
      이상 의 문 제 를 종합 하면 제 해결 방법 은 두 개의 exe 프로그램, 하 나 는 메 인 프로그램, 하 나 는 웹 페이지 를 클릭 하 는 서비스 프로그램 (보이 지 않 음) 으로 그들 간 의 데이터 상호작용 은 레 지 스 트 를 통 해 이 루어 집 니 다.
      이러한 장점 은 자신 도 모 르 는 사이 에 클릭 을 완성 하고 서비스 프로그램 을 다시 시작 하 는 사용자 가 전혀 느끼 지 못 한 다 는 것 이다.그 다음 에 이렇게 하면 메 인 프로그램의 압력 을 크게 줄 일 수 있다. 만약 에 메 인 프로그램 이 웹 페이지 를 클릭 하면 프로그램 이 매우 끊 길 수 있다. 이렇게 하면 메 인 프로그램 을 완전히 방출 하고 그 임 무 는 레 지 스 트 데이터 만 받 는 것 이다.
      설명 이 필요 한 것 은 제 가 수준 이 제한 되 어 있 습 니 다. VB 로 서비스 프로 세 스 를 강제로 끝 내 는 것 은 무리 입 니 다. 최 성룡 형님 의 주 의 를 받 아 DOS 로 끝 낼 생각 을 했 습 니 다. 편리 하고 (프로 세 스 이름 만 있 으 면 됩 니 다) 빠 르 고 깔끔 합 니 다!DOS 의 효율 은 여전히 매우 높다 고 말 할 수 밖 에 없다!적당히 생각해 야 지!
    설명: 원래 미 선생님 께 블 로 그 를 클릭 하기 위해 서 였 는데 공 통 된 메모리 문 제 를 발 견 했 습 니 다. 제 방법 을 공유 하고 서로 교류 하 며 필요 한 사람 에 게 참고 할 필요 가 있 습 니 다.
오리지널 방법, 전재 출처 밝 히 기!감사합니다!
지도 교사: 미 신 강
주 프로그램 원본:
Option Explicit
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Dim DatStart As Date   '      

Private Sub Command1_Click()

SaveSetting "      ", "URL", "URLKEY", Text1.Text     '      
SaveSetting "      ", "URL", "OUTURLKEY", Text4.Text   '      
SaveSetting "      ", "Label", "LabelKey", Text3.Text     '      

SaveSetting "      ", "CMD", "CMDKey", "1"        '    1,        ,            !            !
Shell App.Path & "\serve.exe"          '      

End Sub

Private Sub Command2_Click()

SaveSetting "      ", "CMD", "CMDKey", "0"      '    2,        

End Sub

Private Sub Command3_Click()

Dim I As Long

'       

If Text1.Text = "" Then
    MsgBox "      !"
    Exit Sub
End If

If Text2.Text = "" Then
    MsgBox "     !"
    Exit Sub
End If

WebBrowser1.Navigate Text1.Text   '      
WebBrowser1.Silent = True          '           

'          

If WebBrowser1.Busy Then
    MsgBox "      !        !"
    Exit Sub
End If

List1.Clear

Do While WebBrowser1.ReadyState <> READYSTATE_COMPLETE
    DoEvents
Loop

'    

For I = 1 To WebBrowser1.Document.All.Length - 1
    If InStr(1, WebBrowser1.Document.All(I).outerhtml, Text2.Text) > 0 Then  '     
        If UCase(WebBrowser1.Document.All(I).tagName) = "A" Then              '     A       ,    A
            List1.AddItem " " & (List1.ListCount + 1) & "       " & I    '      
        End If
    End If
Next

'         

If List1.ListCount = 0 Then
    MsgBox "      !       !"
Else
    MsgBox "           ,             !"
End If

End Sub

Private Sub Command4_Click()

'             

MsgBox "  ,              ,         ,              "

WebBrowser1.Document.All(Text3.Text).Click

End Sub

Private Sub Form_Load()

DatStart = Time    '        

SaveSetting "      ", "CountAll", "CountAllKey", "0"  '       0

'               ,       

Open App.Path & "\files.bat" For Output As #1
    Print #1, "TASKKILL /F /IM serve.exe /T"
Close #1

End Sub


Private Sub Form_Unload(Cancel As Integer)

DeleteSetting "      "       '      
Shell App.Path & "\files.bat"      '        ,    

End Sub

Private Sub Timer1_Timer()

Label2.Caption = GetSetting("      ", "CountAll", "CountAllKey")    '      
                 
End Sub

Private Sub Timer2_Timer()

'            ,    ,      

If DateDiff("s", DatStart, Time) > 30 Then

     DatStart = Time
     
     Shell App.Path & "\files.bat"
     
     DoEvents
     Sleep 1500
     
     Shell App.Path & "\serve.exe"
     
End If

End Sub

서비스 프로그램 원본:
Option Explicit
Dim lngnumber As Long    '      

Private Sub Form_Load()

'            

WebBrowser1.Navigate GetSetting("      ", "URL", "URLKEY")
WebBrowser1.Silent = True

While WebBrowser1.Busy
 DoEvents
Wend

End Sub

Private Sub Timer1_Timer()

On Error Resume Next   '    ,       

WebBrowser1.Document.All(Val(GetSetting("      ", "Label", "LabelKey"))).Click   '               

End Sub

Private Sub Timer2_Timer()

If WebBrowser1.LocationURL = Trim(GetSetting("      ", "URL", "OUTURLKEY")) Then Unload Me     '           

'          

If GetSetting("      ", "CMD", "CMDKey") = "0" Then
    Timer1.Enabled = False
ElseIf GetSetting("      ", "CMD", "CMDKey") = "1" Then
    If Timer1.Enabled = False Then            '       timer   ,    
        Timer1.Enabled = True
    End If
End If

End Sub

 

Private Sub WebBrowser1_NewWindow2(ppDisp As Object, Cancel As Boolean)

'                   ,           ,         !       timer   !

lngnumber = Val(GetSetting("      ", "CountAll", "CountAllKey")) + 1      '         +1,               0

SaveSetting "      ", "CountAll", "CountAllKey", Str(lngnumber)        '          

'        

Dim frmWB As Form1
Set frmWB = New Form1

frmWB.WebBrowser1.RegisterAsBrowser = True
Set ppDisp = frmWB.WebBrowser1.Object
'frmWB.Visible = True

End Sub

좋은 웹페이지 즐겨찾기