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 herausfinden

    ungetestet 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


Log in to reply