Screenshot machen, klappt zwar aber nicht dauernd....
-
hi,
ich hab mal ne frage: ich will nen programm machen, das jede sekunde per timer nen screeny macht und dann weiterverarbeitet. naja es klappt auch super! nur nach 1,5 stunden bis 3 stunden, erhalte ich mächtige fehler

das programm frisst pro sek. etwa 4 kb speicher. bei ca: 5-6 mb kommt dann dieser fehler.
"device context not found" (o.ä)
und
"canvas does not allow drawing"ich delete die bitmap aus dem speicher und alles "sollte" in ordnung sein, es gibt keine variable die sich immer weiter vergrößert!
HWND hWnd; hWnd = FindWindow(0,"Fenster"); //Screeny machen Graphics::TBitmap *einbild = new Graphics::TBitmap(); einbild->Handle = CreateCompatibleBitmap(GetDC(hWnd), Screen->WorkAreaWidth, Screen->WorkAreaHeight); BitBlt(einbild->Canvas->Handle, 0, 0, einbild->Width, einbild->Height,GetWindowDC(0), 0, 0, SRCCOPY); ReleaseDC(hWnd,GetDC(hWnd));ich vermute den fehler beim ReleaseDC - ich denke das klappt nicht richtig.
kann mir jemand helfen? evt. hab ich irgendwas vergessen???
thx :xmas1:
-
Da du zweimal GetDC(hWnd) aufrufst, wirst du wohl jedesmal ein neues Handle zurückbekommen - das vom 2. Aufruf gibst du sofort wieder frei, aber das Erste nie... Also das Handle vom ersten Aufruf zwischenspeichern, damit du es nachher für die Freigabe noch zur Verfügung hast.
-
Hi, da es in etwa zum Thema passt stell ich hier auch mal ne Frage.
Wollt wegen so ner kleinen Frage ned extra einen Thread aufmachen.Also in der FAQ gibts ja nen Source um Screenshots zu machen, nur wie bekomm ich da einen screenie vom Desktop?
Lg
-
danke für die antwort. ich will mal versuchen das umzusetzen...
okay also sieht mein code dann erstmal so aus?HWND hWnd; hWnd = FindWindow(0,"Fenster"); HDC speicher; speicher=GetDC(hWnd); //Screeny machen Graphics::TBitmap *einbild = new Graphics::TBitmap(); einbild->Handle = CreateCompatibleBitmap(speicher, Screen->WorkAreaWidth, Screen->WorkAreaHeight); BitBlt(einbild->Canvas->Handle, 0, 0, einbild->Width, einbild->Height,speicher, 0, 0, SRCCOPY); ReleaseDC(hWnd,speicher);meintest du das so?
thx

-
Genau - so hatte ich das gemeint. Ob du aber z.B. einbild auch wieder richtig freigibst, ist nicht zu sehen, aber davon gehe ich mal aus...
-
ja ich mach das mit
delete einbild;ich versuchs dann mal damit - thx
-
thx@flenders
hat super gefunst! programm rennt schon seit über 24 stunden ohne probs
:xmas2: -test bestanden