Screenshot machen?! - Fehler :-(
-
Was habe ich falsch gemacht?? Ich möchte ein Screenshot programm machen. Mir ist klar, dass es im Load steht.
Helft mir bitte!
#Anfänger#
Danke!
#pragma once namespace fgjfgjfgjrj { using namespace System; using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data; using namespace System::Drawing; /// <summary> /// Zusammenfassung für Form1 /// /// Warnung: Wenn Sie den Namen dieser Klasse ändern, müssen Sie auch /// die Ressourcendateiname-Eigenschaft für das Tool zur Kompilierung verwalteter Ressourcen ändern, /// das allen RESX-Dateien zugewiesen ist, von denen diese Klasse abhängt. /// Anderenfalls können die Designer nicht korrekt mit den lokalisierten Ressourcen /// arbeiten, die diesem Formular zugewiesen sind. /// </summary> public ref class Form1 : public System::Windows::Forms::Form { public: Form1(void) { InitializeComponent(); // //TODO: Konstruktorcode hier hinzufügen. // } protected: /// <summary> /// Verwendete Ressourcen bereinigen. /// </summary> ~Form1() { if (components) { delete components; } } private: /// <summary> /// Erforderliche Designervariable. /// </summary> System::ComponentModel::Container ^components; #pragma region Windows Form Designer generated code /// <summary> /// Erforderliche Methode für die Designerunterstützung. /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden. /// </summary> void InitializeComponent(void) { this->SuspendLayout(); // // Form1 // this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; this->ClientSize = System::Drawing::Size(284, 262); this->Name = L"Form1"; this->Text = L"Form1"; this->Load += gcnew System::EventHandler(this, &Form1::Form1_Load); this->ResumeLayout(false); } #pragma endregion private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) { //Hook einbauen, um F7 Taste abzufangen // Hook fehlt //Bitmap erstellen void ScreenShotDesktop() { int nWidth = GetSystemMetrics(SM_CXSCREEN); int nHeight = GetSystemMetrics(SM_CYSCREEN); HWND hWnd = ::"C:\ordner\"; HDC hdc = ::GetDC(hWnd); HDC memDC = ::CreateCompatibleDC(hdc); HBITMAP hbm = ::CreateCompatibleBitmap(hdc, nWidth, nHeight); HBITMAP hbmOld = (HBITMAP)::SelectObject(memDC, hbm); char sError[128]; if(!::BitBlt(memDC,0,0,nWidth,nHeight,hdc,0,0,SRCCOPY)) { //ERROR } BITMAPINFO bmi; ZeroMemory(&bmi, sizeof(bmi)); bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); bmi.bmiHeader.biWidth = nWidth; bmi.bmiHeader.biHeight = nHeight; bmi.bmiHeader.biBitCount = 24; bmi.bmiHeader.biPlanes = 1; bmi.bmiHeader.biCompression = BI_RGB; bmi.bmiHeader.biSizeImage = 32 * nWidth * nHeight / 8; BYTE *pbBits = new BYTE[bmi.bmiHeader.biSizeImage]; if(!::GetDIBits( memDC,hbm,0,bmi.bmiHeader.biHeight,pbBits,&bmi,DIB_RGB_COLORS)) { //ERROR } BITMAPFILEHEADER bfh; bfh.bfType = ('M' << 8) + 'B'; bfh.bfSize = sizeof(BITMAPFILEHEADER) + bmi.bmiHeader.biSizeImage + sizeof(BITMAPINFOHEADER); bfh.bfReserved1 = 0; bfh.bfReserved2 = 0; bfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER); if(!SetDIBits(memDC,hbm,0,bmi.bmiHeader.biHeight,pbBits,&bmi,DIB_RGB_COLORS)) { wsprintf(sError,"Error: SetDIBits (Code %i)\r\n",GetLastError()); OutputDebugString(sError); } // BitBlt(*hDC, 0, 0, GetSystemMetrics(SM_CXSCREEN)-1,GetSystemMetrics(SM_CYSCREEN)-1,memDC, 0, 0, SRCCOPY); HANDLE hfile = CreateFile( "__TMP__SCRNSHOT__2357__.BMP", GENERIC_WRITE, 0, 0, CREATE_ALWAYS, 0, 0 ); if(hfile==INVALID_HANDLE_VALUE) { //ERROR } DWORD dwWritten; WriteFile(hfile,&bfh, sizeof(bfh), &dwWritten, NULL); WriteFile(hfile,&bmi.bmiHeader, sizeof(BITMAPINFOHEADER), &dwWritten, NULL); WriteFile(hfile,pbBits, bmi.bmiHeader.biSizeImage, &dwWritten, NULL); CloseHandle(hfile); ::SelectObject(memDC, hbmOld); ::DeleteDC(memDC); ::ReleaseDC(hWnd,hdc); ::DeleteDC(hdc); ::DeleteObject(hbm); ::DeleteObject(hbmOld); ::DeleteObject(hWnd); hbm=NULL; hbmOld=NULL; delete[] pbBits; } // Ende im Gelände } }; }
-
Mischung von C++/CLI und C++ -> Also mindestens falsches Unterforum
~OT: Endlich mal ein Ausgleich für die ganzen C++ Posts in C++/CLI~Nach dem Syntaxhighlighting solltest du nochmal nachscauen was Escapesequenzen sind.
'::"C:\ordner\"
' geht glaube ich nicht - bzw. sollte man so nicht schreiben.
Außerdem ist es nicht möglich funktionen zu verschalteln.Außerdem: "Geht nicht - gibts nicht"
Was sind deine Fehlermeldungen - was passiert genau - genau nicht? "Geht nicht" ist keine genaue Fehlerbeschreibung.Außerdem hast du vermutlich nicht die Header eingebunden.
Edit: +++Du brauchst nicht extra darauf hinweisen, dass du Anfänger bist, das demotiviert einen potentiellen Helfer.
-
Falsch:
HWND hWnd = ::"C:\ordner\";
Besser:
HWND hWnd = ::"C:\\ordner\\";
Ob es richtiger in dem Sinne ist, weiß ich nicht. Du bist im falschen Unterforum. Wir sprechen nur reines C++ ohne CLI-Zeugs.
-
Danke,
ich möchte hier nicht alle 130 Fehler posten, da es Stunden dauern würde, alle zu übertragen und sauber zu schreiben.
Ich möchte auch nicht den Forenmitliedern den Mut nehmen zu schreiben. Es sollte nur als Hinweis gedacht sein, dass ich nicht 30000 Fachbegriffe brauche, da reichen mir auch simple Erklärungen (müssen aber nicht alzuweit ausgeholt werden, da ich andere Programmiersprachen auch kann).
Gruß
PS: Ich hoffe, dass irgendein Mod oder auch Admin den Thread verschieben könnte.
Schon mal Danke dafür
-
Dieser Thread wurde von Moderator/in pumuckl aus dem Forum C++ in das Forum C++/CLI mit .NET verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Du musst nicht alle Fehler posten. Wenn du so viele hast, sind das meist nur Folgefehler des ersten.
Und abschreiben musst du die Fehler auch nicht - Copy & Paste ist eine nette Erfindung.
-
- grundlagen -
keyboard-freak schrieb:
ich möchte hier nicht alle 130 Fehler posten, da es Stunden dauern würde, alle zu übertragen und sauber zu schreiben.
davon sind ca. 20% brauchbar - der Rest sind Folgefehler weil sich der Compiler verrannt hat
- ersten Fehler nehmen
- analysieren
- korregieren
- compilieren
das Ganze so lange wiederholen bis kein Fehler mehr da ist
-
hi,
lokale Funktionen sind nicht zulässig (in dieser Konstellation), diese müssen (sollten) in der Form als "public" generiert werden
dazu würde ich mal auf ein Mischung von MFC und CLI tippen