Hej gott folk!
Då satt man än en gång här med något man bara inte lyckas lösa. Jag sitter och bygger en applikation i Qt som bl.a nyttjar <windows.h>. I applikationen anropar jag "EnumWindowsProc(HWND hwnd, LPARAM lParam)". Information om de fönster jag hittar lagrar jag då i en vector innehållandes min klass "WindowsWindow". Bl.a. fönstertiteln lagrar jag för enkelhetens skull i en "const char*" då det blir smidigast i andra delar av applikationen.
Så till problemet. När jag sedan loopar igenom denna vector och skriver ut innehållet i t.ex. variabeln "const char* windowText" så upptäcker jag till min förskräckelse att alla fönster levererar fönstertiteln från det sista fönstret jag lägger till i vectorn. Fenomenet uppstår med alla variabler av "const char*" typ. T.ex. en "bool" däremot har rätt värde.
Det är inga problem att via mina get och set-metoder ändra variabeln och skriva ut det rätta.
OBS! I nedan har jag skalat bort väldigt mycket som inte är relevant så ni slipper se det. Är kanske inte ens relevant att nämna det men whatever..
Klassen:
class WindowsWindow
{
public:
WindowsWindow(const char* windowText);
static BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam);
const char* getWindowText();
void setWindowText(const char* windowText);
static vector<WindowsWindow>* windows;
private:
const char* windowText;
};
Så här ser min callback ut:
BOOL CALLBACK WindowsWindow::EnumWindowsProc(HWND hwnd, LPARAM lParam)
{
BOOL isVisible = IsWindowVisible(hwnd);
if(isVisible) {
char title[300];
GetWindowTextA(hwnd, title, sizeof(title));
cout << "HWND: " << hwnd << endl;
cout << "Window title: " << title << endl;
WindowsWindow window = WindowsWindow(title);
windows->push_back(window);
}
return TRUE;
}
Såhär loopar jag igenom:
for(vector<WindowsWindow>::iterator it = WindowsWindow::windows->begin(); it != WindowsWindow::windows->end(); ++it)
{
cout << it->getWindowText() << endl;
}
Loopar jag däremot igenom och skriver ut något värde till, kanske en "int" så skriver getWindowText ut något skumt i stil med "ProgÃ)" där det istället skulle stått "Program manager":
for(vector<WindowsWindow>::iterator it = WindowsWindow::windows->begin(); it != WindowsWindow::windows->end(); ++it)
{
cout << it->getWindowText() << endl;
cout << it->getPosX() << endl;
}
Antar att det har något med pekare/referens att göra men jag är helt enkelt inte hajj nog på det för att lista ut vad jag gör för fel. Har självklart försökt googla men vet inte riktigt vad jag ska googla på för just detta.
Idéer?? Hoppas det är något löjligt enkelt som någon av er därute ser med en gång!