Text und Count einer Listbox in einem anderen Programm.. LBox geschützt?
-
Hallo :D,
ich möchte von meinem Programm aus den Inhalt der Listbox in einem anderen Programm angezeigt bekommen.
CONTROL "", 1244, LISTBOX, LBS_NOTIFY | LBS_USETABSTOPS | LBS_NOINTEGRALHEIGHT | LBS_NOSEL | WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP, 7, 88, 227, 95 , 0x00020000
Bei einem Label funktioniert das auch mit WM_GETTEXT, aber LB_GETTEXT / LB_GETCOUNT bei einer Listbox nicht
HWND SERVERWINDOW; HWND LISTBOX; char szBuffer[1024]; SERVERWINDOW = FindWindow(NULL,"Vietcong v1.60 : .:TOU:. Public Server : 5425"); LISTBOX = GetDlgItem(SERVERWINDOW, 1244); SendMessage(LISTBOX,LB_GETTEXT,(WPARAM)sizeof(szBuffer),(LPARAM)&szBuffer); Memo1->Lines->Add(szBuffer);
Das einzigste was hier leider passiert ist, dass dem Memo eine neue LEERE Zeile angefügt wird... Vielleicht ist die Listbox je Disabled=true, dann müsste man das ändern, wie das het weiss ich aber leider nicht
Wäre super, wenn mir Jemand weiterhelfen könnte!
-
[Edit] falsch gelesen :-S
-
aber jetzt (hoffe ich mal)
würde behaupten dein (WPARAM) hast du falsch verstanden.
es ist nicht die grösse des Buffers, sondern der Index (ListBox1->Items->Strings[x])
die grösse für den Buffer kannst du mit LB_GETTEXTLEN herausfindenungetestet sieht das ungefähr so aus..
int iIndexVonLB = 0; int iBuffer = SendMessage(LISTBOX,LB_GETTEXTLEN,(WPARAM)iIndexVonLB,NULL); char *szBuffer = new char[iBuffer]; SendMessage(LISTBOX,LB_GETTEXT,(WPARAM)iIndexVonLB,(LPARAM)&szBuffer); Memo1->Lines->Add(szBuffer); delete[] szBuffer;
[Edit]MSDN-Link[/Edit]
-
Hey, danke, dass du so "früh" antworten konntest
Werde mein Script schnell mal umschreiben
DjDaPle
-
Ich kann mein PÖrogramm starten, aber dann zeig er mir, wenn ich auf die Listbo zugreifen will:
Information: Project C:\... faulted with message: 'access violation at 0x77f50b6f: write of adress 0x00030fc8'. Process Stopped. Use Step or Run to continue.
Ich weiss leider nciht, woran das liege könnte...
-
Aso so zeigt er mir zumindest die Länge an:
int iIndexVonLB = 0; int iBuffer = SendMessage(LISTBOX,LB_GETTEXTLEN,(WPARAM)iIndexVonLB,NULL); //char *szBuffer = new char[iBuffer]; //SendMessage(LISTBOX,LB_GETTEXT,(WPARAM)iIndexVonLB,(LPARAM)&szBuffer); Memo1->Lines->Add(IntToStr(iBuffer)); //delete[] szBuffer;
Was mri aber nicht viel nützt...
-
Hmm so geht das ganze auch (nur die Länge):
HWND hICQ = FindWindow(NULL,"Vietcong v1.60 : .:TOU:. Public Server : 5425"); HWND LISTBOX = GetDlgItem(hICQ, 1244); int iIndexVonLB = 0; int iBuffer = SendMessage(LISTBOX,LB_GETTEXTLEN,(WPARAM)iIndexVonLB,NULL); char *szBuffer = new char[iBuffer]; SendMessage(LISTBOX,LB_GETTEXT,0,0); Memo1->Lines->Add(IntToStr(iBuffer)); delete[] szBuffer;
-
Das heißt, HIER:
SendMessage(LISTBOX,LB_GETTEXT,(WPARAM)iIndexVonLB,(LPARAM)&szBuffer);
muss ihrgendetwas falsch sein hmm
-
SendMessage(LISTBOX,LB_GETTEXT,iIndexVonLB,szBuffer); // WAS IST HIER FALSCH??? O.o
[C++ Error] test.cpp(26): E2034 Cannot convert 'char *' to 'long'
Hmm weiss aber nicht ob es daran liegt, dass er char nicht nach long holen kann kA...
-
JUHUUUUUU
Habs selbst geschaft: Einfach das & rausnehmen:
SendMessage(LISTBOX,LB_GETTEXT,(WPARAM)iIndexVonLB,(LPARAM)HIER WAR DAS & ZEICHENszBuffer);
Mein kompletter code sieht dass so aus:
HWND SERVERWINDOW = FindWindow(NULL,"Vietcong v1.60 : .:TOU:. Public Server : 5425"); HWND LISTBOX = GetDlgItem(SERVERWINDOW, 1244); int iIndexVonLB = 0; int iBuffer = SendMessage(LISTBOX,LB_GETTEXT,(WPARAM)iIndexVonLB,NULL); char *szBuffer = new char[iBuffer]; SendMessage(LISTBOX,LB_GETTEXT,(WPARAM)iIndexVonLB,(LPARAM)szBuffer); Memo1->Lines->Add(szBuffer); delete[] szBuffer;
Aber:
-Er liest nur eine (die Erste) Zeile
-Wenn ich das Programm schließe kommt wieder son komischer Fehler
-
Okay, habs nun hinbekommen jetzt geht alles weiss aber nciht was ich gemacht habe hab den code nur in ein anderes programm geholt hmm naja Danke fr die Antworten!
-
achja, etwas habe ich vergessen. du musst
char *szBuffer = new char[iBuffer+1];
DjDaPle schrieb:
-Er liest nur eine (die Erste) Zeile
überlege dir mal, was iIndexVonLB ist und bewirkt.
DjDaPle schrieb:
-Wenn ich das Programm schließe kommt wieder son komischer Fehler
meine Kristalkugel funktioniert bei regen leider nicht. was für ne fehlermeldung kommt?
-
BigNeal schrieb:
achja, etwas habe ich vergessen. du musst
char *szBuffer = new char[iBuffer+1];
Von einem sehr empfohlenen memset(szBuffer, '\0', iBuffer+1); ganz zu schweigen (o;
-
Okay, nun geht alles die Fehlermeldung ging nach ner zeit (neustart) von alleine Weg!(Meine Kritallkugel funktioniert ^^)
Danke an alle