[C++]Handle > Text > Handle

Pagina: 1
Acties:

  • PKP B-Man
  • Registratie: November 2002
  • Laatst online: 19-07-2023
Hallo,

Ik heb momenteel problemen om een handle om te zetten naar tekst dat ik op het display kan tonen. Die tekst wil ik later weer kunnen gebruiken als handle, dus dan moet ie weer worden omgezet naar een handle. Het stuk code waar het om gaat staat hieronder (Borland C++ Builder):
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    HWND handler;
    char windowText[100];

    handler = Form1->Handle;
    handler = GetWindow(handler,GW_HWNDFIRST);
    while(handler)
    {   GetWindowText(handler, windowText,100);
        if(strcmp(windowText,""))
        {   ListItem = Form1->ListView1->Items->Insert(0);
            ListItem->Caption = windowText;
            //Code waarvan ik wou dat ie werkte:
            //ListItem->SubItems->Add((AnsiString)handle);
        }
        handler = GetWindow(handler,GW_HWNDNEXT);
    }
    delete handler;
en terug casten door bijvoorbeeld (in de editbox is de juiste handle getypt):
C++:
1
2
3
        //Werkt waarschijnlijk niet:
        HWND handler = Edit1->Text.c_str();
        FlashWindow(handler,TRUE);
Bedankt alvast voor jullie hulp!

B-Man

  • PKP B-Man
  • Registratie: November 2002
  • Laatst online: 19-07-2023
Het is mezelf na een lange tijd proberen uiteindelijk toch gelukt. Voor degenen die nieuwsgierig zijn hoe ik het nu precies voor elkaar heb gekregen, hier de juiste code:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
HWND handler;
char windowText[100];
TListItem  *ListItem;

ListView1->Clear();
handler = Form1->Handle;
handler = GetWindow(handler,GW_HWNDFIRST);
while(handler)
{   GetWindowText(handler, windowText,100);
     if(strcmp(windowText,""))
     {    ListItem = Form1->ListView1->Items->Insert(0);
          ListItem->Caption = windowText;
          ListItem->SubItems->Add((AnsiString)IntToHex((int)handler,8));
          //Onderstaande code kan uiteraard ook (met char hexHandle[10])
          //sprintf(hexHandle,"%.8X",handler);
          //ListItem->SubItems->Add((AnsiString)hexHandle);
     }
     handler = GetWindow(handler,GW_HWNDNEXT);
}
delete handler;
delete windowText;
En om de handle weer terug te zetten naar een "echte" handle:
C++:
1
2
3
HWND handler;
handler = (HWND)StrToInt("$" + Edit1->Text);
FlashWindow(handler,TRUE);

Het lijkt achteraf zo simpel... Maar het is en blijft altijd een ontzettend geklooi voordat je zoiets voor elkaar hebt...

Misschien is dit zelfs wel een applausje waard, mede omdat ik het toch zelf heb kunnen oplossen ;) :P

B-Man

  • Rotjeknor
  • Registratie: April 2001
  • Laatst online: 03-02 15:29
offtopic:
Hmm een uur == lang? Nou ja, je hebt het iig zelf opgelost (-:

Ook Knor is aangestoken met het ligfietsvirus!


  • SWfreak
  • Registratie: Juni 2001
  • Niet online
Hier hebben we toch FindWindow voor?
Wel interessant dat die StrToInt ook werkt :?

  • PKP B-Man
  • Registratie: November 2002
  • Laatst online: 19-07-2023
FindWindow werkt perfect, maar ik niet voor mijn doel, namelijk:
The FindWindow function retrieves a handle to the top-level window whose class name and window name match the specified strings. This function does not search child windows.
Het kan alleen worden gebruikt met window name's en die weet ik niet altijd, daarnaast wil ik het ook gaan gebruiken voor windows zonder naam. En naast de daarnaast nog eens ( ;) ) wil ik het ook gaan gebruiken voor childwindows en dergelijke...

En dat StrToInt -> dat was ook niet het eerste waar ik aan dacht :/