Programm mit Button starten (?)
-
Hallo,
ich versuche seit einiger Zeit das Programm (.cpp-Datei -> unten) mit einem simplen Button zu starten. Wenn ich die .exe-Datei jetzt öffne verschwindet es nach sehr kurzer Zeit! Ich möchte ein Fenster öffnen können, dass dauerhaft bleibt.
Danke für Eure Hilfe.
#pragma comment(lib, "user32.lib") #include <windows.h> #include "Form1.h" void SetNumlock(BOOL bState) { BYTE keyState[256]; GetKeyboardState((LPBYTE)&keyState); if( (bState && !(keyState[VK_NUMPAD3] & 1)) || (!bState && (keyState[VK_NUMPAD3] & 1)) ) { // Drücken keybd_event( VK_NUMPAD3, 0x63, KEYEVENTF_EXTENDEDKEY | 0, 0 ); // Loslassen keybd_event( VK_NUMPAD3, 0x63, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0); } } void main() { SetNumlock( TRUE ); }
Hier noch die Headerdatei "Form1.h":
#pragma once using namespace System; using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data; using namespace System::Drawing; namespace TastendruckSimulation { public ref class Form1 : public System::Windows::Forms::Form { public: Form1(void) { InitializeComponent(); } protected: ~Form1() { if (components) { delete components; } } private: System::Windows::Forms::Button^ button1; protected: private: System::ComponentModel::Container ^components; #pragma region Windows Form Designer generated code void InitializeComponent(void) { this->button1 = (gcnew System::Windows::Forms::Button()); this->SuspendLayout(); // // button1 // this->button1->Location = System::Drawing::Point(112, 211); this->button1->Name = L"button1"; this->button1->Size = System::Drawing::Size(60, 30); this->button1->TabIndex = 0; this->button1->Text = L"Start"; this->button1->UseVisualStyleBackColor = true; this->button1->Click += gcnew System::EventHandler(this, &Form1::Form1_Load); // // Form1 // this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; this->ClientSize = System::Drawing::Size(284, 264); this->Controls->Add(this->button1); 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) { } };
}
-
Wo öffnest Du denn hier irgendwo ein Fenster!?
-
(Eigentlich) gar nicht! Das möchte ich aber . Wenn ich bei MVC++ aber auf "Debugging starten" klicke, dann erscheint gaaaaanz kurz ein Fenster.^^
Das Fenster wird doch in Form1.h unten definiert?!
Wo steckt er denn, der Fehler?
-
Und noch jemand, der keine Ahnung vom Programmieren hat und dann gleich mit C++/CLI und WinForms arbeiten will...
-
Der Thread kann gelöscht werden! Bin selbst auf die Lösung gekommen!
<ignorieren> Den letzten Beitrag. </ignorieren> Obwohl vielleicht was dran ist!
-
Und es gilt immer noch:
http://blog.kalmbach-software.de/de/2010/03/05/ccli-und-winforms-macht-keinen-sinn/
-
Ja, ich weiß. Habe gelesen, dass andere Schwierigkeiten haben wenn sie ihre Prgramme auf anderen PCs laufen lassen!
-
LaKo15 schrieb:
Ja, ich weiß. Habe gelesen, dass andere Schwierigkeiten haben wenn sie ihre Prgramme auf anderen PCs laufen lassen!
Das hat damit aber nichts zu tun...
-
Nicht? Womit dann? Diesen Link kopiert er vlgw. häufig in Foren. Und zwar auch aus diesem Grund. (?)
-
"Der WinForms-Designer ist miserabel"
"C++/CLI ist primär als InterOp Sprache" man wird dazu verleitet nitroglyzer (c++) und rin (.Net) zu vermischen. Und wenn man nicht vorsichtig ist,
gibt es eine riesen Sauerei.
-
Ja, zur Kenntnis genommen!
Wie kann man es schaffen, dass das Programm (hier der Tastendruck) erst nach z.B. 10 Sekunden nach Öffnen der .exe-Datei (im Windows-Explorer) "greift", startet, anfängt die Funktion auszuführen?
Ich habe es mit
Sleep(10000);
versucht, undzwar an den unterschiedlochsten Stellen - komme aber nicht zum erwünschten Ergebnis.
-
Benutze die Klasse Timer aus System::Windows::Forms.
http://msdn.microsoft.com/en-us/library/system.windows.forms.timer.aspx
-
Danke für deine Antwort!
In welche Datei (Form1.h oder Tastendruck-Simulation.cpp) füge ich was genau ein? Ich komme nicht ganz dahinter, sry!
-
In der Form1.
-
Ich habe es mal so eingetragen, aber ich bekomme einige Fehler beim Kompilieren angeziegt und der "Form1.h [Entwurf]" ist nicht mehr zu sehen. In die .cpp-Datei habe ich nichts Weiteres eingetragen!
#pragma once using namespace System; using namespace System::Threading; using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data; using namespace System::Drawing; namespace TastendruckSimulation { // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ public ref class Timer : public Component { public: Timer() // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ public ref class Form1 : public System::Windows::Forms::Form { public: Form1(void) { InitializeComponent(); } protected: ~Form1() { if (components) { delete components; } } private: System::Windows::Forms::Button^ button1; private: System::Windows::Forms::TextBox^ textBox1; private: System::Windows::Forms::Label^ label1; private: System::ComponentModel::IContainer^ components; protected: private: #pragma region Windows Form Designer generated code // ... // ... // ...
-
Mach einfach ein Member von Typ Timer.
Am besten ziehst Du einfach ein Timer aus der Toolbox auf deine Form!
-
Ich bekomme dann leider einen Fehler angezeigt und ich weiß nicht wie ich das beheben kann!
Fehler 1 error C2872: 'Timer': Mehrdeutiges Symbol
-
Tja, dann zeigmal den relevanten Code.
Edit: Probiers mal mit
System::Windows::Forms::Timer^ timer;
-
Ja, kein Problem!
.cpp-Datei:
// Tastendruck-Simulation.cpp: Hauptprojektdatei. #pragma comment(lib, "user32.lib") #include <windows.h> #include "Form1.h" #include "stdafx.h" using namespace TastendruckSimulation; void SetNumlock(BOOL bState) { BYTE keyState[256]; GetKeyboardState((LPBYTE)&keyState); if( (bState && !(keyState[VK_NUMPAD3] & 1)) || (!bState && (keyState[VK_NUMPAD3] & 1)) ) { Timer; // Simulate a key press keybd_event( VK_NUMPAD3, 0x63, KEYEVENTF_EXTENDEDKEY | 0, 0 ); // Simulate a key release keybd_event( VK_NUMPAD3, 0x63, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0); } } int main() { SetNumlock( TRUE ); // Aktivieren visueller Effekte von Windows XP, bevor Steuerelemente erstellt werden Application::EnableVisualStyles(); Application::SetCompatibleTextRenderingDefault(false); // Hauptfenster erstellen und ausführen Application::Run(gcnew Form1()); return 0; }
Form1.h:
#pragma once using namespace System; using namespace System::Threading; using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data; using namespace System::Drawing; namespace TastendruckSimulation { public ref class Form1 : public System::Windows::Forms::Form { public: Form1(void) { InitializeComponent(); } protected: ~Form1() { if (components) { delete components; } } private: System::Windows::Forms::Button^ button1; private: System::Windows::Forms::TextBox^ textBox1; private: System::Windows::Forms::Label^ label1; private: System::Windows::Forms::Timer^ timer1; private: System::ComponentModel::IContainer^ components; protected: private: #pragma region Windows Form Designer generated code void InitializeComponent(void) { this->components = (gcnew System::ComponentModel::Container()); this->button1 = (gcnew System::Windows::Forms::Button()); this->textBox1 = (gcnew System::Windows::Forms::TextBox()); this->label1 = (gcnew System::Windows::Forms::Label()); this->timer1 = (gcnew System::Windows::Forms::Timer(this->components)); this->SuspendLayout(); // // button1 // this->button1->Location = System::Drawing::Point(202, 87); this->button1->Name = L"button1"; this->button1->Size = System::Drawing::Size(64, 21); this->button1->TabIndex = 0; this->button1->Text = L"Start"; this->button1->UseVisualStyleBackColor = true; this->button1->Click += gcnew System::EventHandler(this, &Form1::Form1_Load); // // textBox1 // this->textBox1->Location = System::Drawing::Point(37, 87); this->textBox1->Name = L"textBox1"; this->textBox1->Size = System::Drawing::Size(148, 20); this->textBox1->TabIndex = 1; // // label1 // this->label1->AutoSize = true; this->label1->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 20, static_cast<System::Drawing::FontStyle>((System::Drawing::FontStyle::Bold | System::Drawing::FontStyle::Underline)), System::Drawing::GraphicsUnit::Point, static_cast<System::Byte>(0))); this->label1->Location = System::Drawing::Point(20, 9); this->label1->Name = L"label1"; this->label1->Size = System::Drawing::Size(250, 31); this->label1->TabIndex = 2; this->label1->Text = L"Tasten-Simulation"; // // timer1 // this->timer1->Interval = 3000; // // Form1 // this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; this->BackColor = System::Drawing::Color::Silver; this->ClientSize = System::Drawing::Size(290, 120); this->Controls->Add(this->label1); this->Controls->Add(this->textBox1); this->Controls->Add(this->button1); this->Name = L"Form1"; this->Text = L"Tasten-Simulation"; this->Load += gcnew System::EventHandler(this, &Form1::Form1_Load); this->ResumeLayout(false); this->PerformLayout(); } #pragma endregion private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) { } }; }
-
Ja, und was ist jetzt das Problem?