[VB | Internet Explorer]

memphis.2000

Cadet
Mitglied seit
05.02.2004
Beiträge
34
Renomée
0
Vorhaben:

ich schreibe mir ein kleines Programm dass die Url des geöffneten (!) Internet Explorers ändert.

Kenne mich mit VB nicht unbedingt gut aus ... habe auch nur den Code gefunden dass man ein neues Fenster öffnet und dann da die Url bestimmt .. aber für ein geöffnetes Fenster nicht.

weiß jemand Rat? :(
 
Na du könntest ja auch mal etwas detaillierter werden.

Bei einer Frage frei nach dem Motto "Hilfäää, wie geht das?" ist es schwierig eine passende Antwort zu finden ;).


Also fangen wir mal ganz langsam an: Du willst den IEh steuern. Wie? Mit einer HTML Seite oder mit einem 2. Prog/Skript?

Bei ersterem kannst du VB Skript vergessen. Der IE versteht das zwar auch in Webseiten, aber das ist schlicht Müll - nimm lieber Javascript.

Bei letzterem wird es auch schwierig, weil man den IE eben nicht mit einem anderen Programm mal so eben steuern kann. Vor allem nicht mit VB Skript, also wie du es drehst - VB Skript ist Mist.


Viel einfacher wäre es wenn du einfach sagen würdest wozu du das brauchst...
 
ok *g*

also eine bestimmte Seite benutzt Sessions .. d.h. wenn ich mit dem Steuerelement von VB die Adresse aufruf dann bin ich bei der Seite ausgeloggt.

d.h. ich muss mich manuell einloggen und dann brauch ich ein Tool das dann Variablen über die geöffnete Seite schickt damit ich halt noch eingeloggt bin.

und nicht mit html sondern mit ner EXE .. mit C++ dürfte das ja auch gehen? aber davon hab ich überhaupt keine Ahnung und auch keinen Compiler ..

ich öffne eine Seite.. logge mich ein .. und dann muss das Tool die Adresse oben ändern damit die session noch gültig is (.. und keine neue seite öffnen)

verstanden?`o_O is nich so toll erklärt *g*
 
VBScript ist nicht VB ;) Außerdem ist VBScript nicht per se Müll, es kommt vielmehr auf das Einsatzgebiet an. Javascript ist für Internetsachen, VBScript ist eher der Nachfolger der guten alten Batchdateien (*.bat) und da ist es gar nicht mal übel.

@Topic:
Hab's quick and dirty in VB6 gelöst. Es gibt sicher einen besseren Weg.
Code:
Option Explicit

  Private Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" (ByVal hWndParent As Long, ByVal hWndChildAfter As Long, ByVal lpszClass As String, ByVal lpszWindow As String) As Long
  Private Declare Function SendMessageAsLong Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal MSG As Long, ByVal wParam As Long, ByVal lParam As Long) As Long


Private Sub Command1_Click()
  Const EM_SETSEL = &HB1
  Const WM_KEYDOWN = &H100
  Const WM_KEYUP = &H101
  Dim hWnd_IE As Long
  Dim hWnd_tmp As Long
  Dim hWnd_URLEdit As Long
  Dim url As String

  url = "http://www.planet3dnow.de"

  ' Adressleiste finden
  hWnd_IE = FindWindowEx(0, 0, "IEFrame", vbNullString)
  If hWnd_IE Then
    hWnd_tmp = FindWindowEx(hWnd_IE, 0, "WorkerW", vbNullString)
    If hWnd_tmp Then
      hWnd_tmp = FindWindowEx(hWnd_tmp, 0, "RebarWindow32", vbNullString)
      If hWnd_tmp Then
        hWnd_tmp = FindWindowEx(hWnd_tmp, 0, "ComboBoxEx32", vbNullString)
        If hWnd_tmp Then
          hWnd_tmp = FindWindowEx(hWnd_tmp, 0, "ComboBox", vbNullString)
          If hWnd_tmp Then
            hWnd_URLEdit = FindWindowEx(hWnd_tmp, 0, "Edit", vbNullString)
            If hWnd_URLEdit Then
              ' aktuelle Adresse entfernen
              SendMessageAsLong hWnd_URLEdit, EM_SETSEL, 0, 2 ^ 31 - 1
              SendMessageAsLong hWnd_URLEdit, WM_KEYDOWN, vbKeyDelete, 0
              SendMessageAsLong hWnd_URLEdit, WM_KEYUP, vbKeyDelete, 0
              ' neue Adresse senden
              sendText hWnd_URLEdit, url
              ' Enter "drücken"
              SendMessageAsLong hWnd_URLEdit, WM_KEYDOWN, vbKeyReturn, 0
              SendMessageAsLong hWnd_URLEdit, WM_KEYUP, vbKeyReturn, 0
            End If
          End If
        End If
      End If
    End If
  End If
End Sub


Private Sub sendText(ByVal hWnd As Long, ByVal txt As String)
  Const WM_CHAR = &H102
  Dim char As String
  Dim iChar As Long

  If hWnd Then
    ' jedes Zeichen einzeln senden, da SetWindowText() Pointer verwendet und diese nur innerhalb
    ' eines Prozesses gültig sind
    For iChar = 1 To Len(txt)
      char = Mid(txt, iChar, 1)
      SendMessageAsLong hWnd, WM_CHAR, Asc(char), 0
    Next iChar
  End If
End Sub

/e: Da fehlte noch was.
 
Zuletzt bearbeitet:
eine kleine modifikation wär noch schöner ..


kann man das auch so machen:

wenn die neue Url dem Browser übergeben wurde und die nun läd, dass dann das VB-Prog warten bis die Seite fertig geladen ist und dann den Vorgang wiederholt?
 
Ich wüsste nicht wie. Man könnte evt. nachschauen, ob es in der Statusleiste ("msctls_statusbar32") einen Fortschrittsbalken ("msctls_progress32") gibt. Aber das ist a) genausowenig eine schöne Lösung wie obiger Code und b) unzuverlässig, da man bspw. die Statusleiste ausblenden kann.
 
Zurück
Oben Unten