EAccess Violation
-
Hallo ich bekomme bei meinem Programm immer eine EAccess Violation

Dies passiert aber nur dann wenn das Programm einen Fenstertitel findet ansonsten lässt es sich normal beenden.
Es werden halt kurz die Werte ausgeben und sobald ich dann die Enter Taste drück kommt dieser Fehler.
Was ist da falsch?
#include <windows> #include <iostream> using namespace std; void test(); int main(int argc, char* argv[]) { test(); system("PAUSE"); } //--------------------------------------------------------------------------- void test() { HWND handle; POINT mause_coord ; // Die POINT Struktur definiert die x- und y- Koordinaten von einem Punkt LPTSTR fenster_text; int max_text_length = 200; system("CLS"); GetCursorPos ( & mause_coord ); cout<<"Mausposition X: " <<mause_coord.x <<endl <<endl ; cout<<"Mausposition Y: "<<mause_coord.y <<endl <<endl ; handle = WindowFromPoint ( mause_coord ); // WindowFromPoint fragt die koordinaten ab welche mit der // funktion GetCursorPos ermittelt wurden cout<<"Fenster handle: "<<handle <<endl <<endl ; // handle eines fensters ausgeben GetWindowText ( handle , // handel von dem fenster WindowFromPoint ermittelt das handel fenster_text , // puffer in welchem der name von dem text fenster gespeichert wird max_text_length // maximale text länge ); cout<<"Fenstername: "<<fenster_text<<endl; }
-
LPTSTR ist nen typedef auf char*
und zeigt bei dir also iwo ins nirwana...richtig wäre:
const int length = 100; LPTSTR text = new LPTSTR [length]; GetWindowText ( handle, text, length-1); //weiß nich genau, ob das -1 gebraucht wird - musst du ma gucken, was in der msdn dazu steht (ob nullterminierung mit eingeschlossen ist oder nicht)oder was meinst du, wofür du sonst ne länge angeben sollst?
bb
-
So ging es leider auch nicht

Aber ich habs doch noch hinbekommen

#include <windows> #include <iostream> using namespace std; void test(); int main(int argc, char* argv[]) { test(); system("PAUSE"); } //--------------------------------------------------------------------------- void test() { HWND handle; POINT mause_coord ; // Die POINT Struktur definiert die x- und y- Koordinaten von einem Punkt const int length = 200; char text[200]; system("CLS"); GetCursorPos ( & mause_coord ); cout<<"Mausposition X: " <<mause_coord.x <<endl <<endl ; cout<<"Mausposition Y: "<<mause_coord.y <<endl <<endl ; handle = WindowFromPoint ( mause_coord ); // WindowFromPoint fragt die koordinaten ab welche mit der // funktion GetCursorPos ermittelt wurden cout<<"Fenster handle: "<<handle <<endl <<endl ; // handle eines fensters ausgeben GetWindowText ( handle, text, length ); cout<<"Fenstername: "<<text<<endl; }
-
access schrieb:
Aber ich habs doch noch hinbekommen

Das wundert mich bei deinem Codestil (von Fehlern mal ganz abgesehen).
1. Gewöhn dir eine sinnvolle Einrückung an, gerade wenn dir auch andere helfen sollen (Dein Code ist unnötig schwer zu lesen). Zudem solltest du unnötige Leerzeilen im Code entfernen wenn du im Forum postest.2. #include <windows> kenne ich nicht. Wenn du den WinAPI-Header meinst, lautet das #include <windows.h> (Das h wird bei den Headern der C++ Standardbibliothek weggelassen, nicht aber bei der WinAPI).
3. Warum legst du eine Konstante an, wenn du sie nicht auch gleich verwendest?
const int length = 200; char text[200]; // Besser: const int length = 200; char text[length];4. Und zu weiteren Fragen solltest du zudem das richtige Unterforum wählen, hier vermutlich das WinAPI-Forum.
cu André
-
ok - ich hatte es falsch gesagt - sry... doofe 1000de typedefs + (vor allem) makros:
void test() { POINT mause_coord; GetCursorPos ( & mause_coord ); HWND handle = WindowFromPoint ( mause_coord ); const int length = 200; char text[length]; int real_length = GetWindowText ( handle, text, length ); if (real_length == -1) {//fehler 0; } }bb