VB 5/6-Tipp 0079: ListBox per API auslesen
von ActiveVB
Beschreibung
Für die eigene Anwendung albern, aber wenn man das Handle einer anderen besitzt läßt sich von dort der Inhalt einer ListBox auslesen.
Schwierigkeitsgrad: | Verwendete API-Aufrufe: | Download: |
'Dieser Quellcode stammt von http://www.activevb.de 'und kann frei verwendet werden. Für eventuelle Schäden 'wird nicht gehaftet. 'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum. 'Ansonsten viel Spaß und Erfolg mit diesem Source! '------------- Anfang Projektdatei Porject1.vbp ------------- '--------- Anfang Formular "Form1" alias Form1.frm --------- ' Steuerelement: Textfeld "Text1" ' Steuerelement: Listen-Steuerelement "List1" ' Steuerelement: Listen-Steuerelement "List2" ' Steuerelement: Schaltfläche "Command1" ' Steuerelement: Beschriftungsfeld "Label1" Option Explicit Private Declare Function SendMessage Lib "user32" Alias _ "SendMessageA" (ByVal hWnd As Long, ByVal wMsg _ As Long, ByVal wParam As Long, lParam As Any) _ As Long Const LB_GETCOUNT = &H18B Const LB_GETTEXT = &H189 Const LB_GETTEXTLEN = &H18A Const LB_GETCURSEL = &H188 Private Sub Form_Load() List1.AddItem "Bohnen" List1.AddItem "Erbsen" List1.AddItem "Möhren" List1.AddItem "Mais" List1.AddItem "Kartoffeln" List1.AddItem "Gurken" List1.AddItem "Tomaten" End Sub Private Sub Command1_Click() Dim lCnt&, X&, L&, Buffer$, Item$, LBidx& List2.Clear lCnt = SendMessage(List1.hWnd, LB_GETCOUNT, 0, 0) If lCnt > 0 Then For X = 0 To lCnt - 1 List2.AddItem GetListBoxEntry(List1.hWnd, X) Next X End If LBidx = SendMessage(List1.hWnd, LB_GETCURSEL, 0, 0) If LBidx <> -1 Then Text1.Text = GetListBoxEntry(List1.hWnd, LBidx) Else Text1.Text = "" End If End Sub Private Function GetListBoxEntry(hWnd&, LbItem&) As String Dim L&, Buffer$ L = SendMessage(hWnd, LB_GETTEXTLEN, LbItem, 0) Buffer = Space$(L + 1) L = SendMessage(hWnd, LB_GETTEXT, LbItem, ByVal Buffer) GetListBoxEntry = Left$(Buffer, L) End Function '---------- Ende Formular "Form1" alias Form1.frm ---------- '-------------- Ende Projektdatei Porject1.vbp --------------
Tipp-Kompatibilität:
Windows/VB-Version | Win32s | Win95 | Win98 | WinME | WinNT4 | Win2000 | WinXP |
VB4 | |||||||
VB5 | |||||||
VB6 |
Ihre Meinung
Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.
Archivierte Nutzerkommentare
Klicken Sie diesen Text an, wenn Sie die 3 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.
Kommentar von Kowalski am 07.03.2009 um 22:29
Ich möchte gerne eine Listbox eines fremden Programmes auslesen. Die Anzahl der Zeilen wird zwar noch richtig ermittelt, also stimmt auch das ermittelte Handle. Bei der Ermittlung der Textlänge einer Zeile wird jedoch immer "4" ermittelt. Und beim Auslesen der Textzeile kommen auch nur 4 kryptische Zeichen. Ich habe mal ein bißchen rumgesucht und gefunden, dass es mit den Style der Listbox zu tun hat. Kann man mit irgendwelchen Tricks trotzdem fremde Listboxen auslesen ??
Gruß Kowalski !
Kommentar von DKuyken am 26.07.2005 um 09:18
unter XP wird beim Klick auf den Command Button der Fehler
Methode oer Datenobjekt nicht gefunden erzeugt.
Verwiesen wird auf folgende Zeile:
lCnt = SendMessage(List1.hWnd, LB_GETCOUNT, 0, 0)
Kommentar von Schorsch am 10.03.2004 um 18:47
Das klappt ja für eigene Listen ganz gut, aber ich habe Probleme, andere Listen aus anderen Anwendungen auszulesen. Hat da jemand n Rat??