Hilfe bei Fehlersuche!
-
Wenn die Headerdatei Form.h heißt muss das doch so heißen, oder nicht?! Aber ich lasse mich auch eines Besseren belehren. Wenn ich das mit #include <windows.h> mache, ist der C1083 Fehler weg.
Jetzt gibt es aber leider eine neue Fehlermeldung:
Fehler 1 error C3861: "SetNumLock": Bezeichner wurde nicht gefunden.
Das steht in Zeile 30: SetNumLock( TRUE );
Danke für Deine schnelle Antwort!
-
C/C++ ist *Case-Sensitive*
Schau mal wie Du es oben geschrieben hast und wie Du es unten schreibst... da gibt es einen Unterschied... beides muss aber genau gleich sein!
-
Ja! Wenn ich aber die Befehle gleich schriebe (also: SetNumlock bzw. beide SetNumLock - egal), dann bekomme ich wieder andere 5 Fehler:
Fehler 4 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""extern "C" int __stdcall GetKeyboardState(unsigned char *)" (?GetKeyboardState@@$$J14YGHPAE@Z)" in Funktion ""void __clrcall SetNumlock(int)" (?SetNumlock@@$$FYMXH@Z)". Tastendruck-Simulation.obj
Fehler 3 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""extern "C" void __stdcall keybd_event(unsigned char,unsigned char,unsigned long,unsigned long)" (?keybd_event@@$$J216YGXEEKK@Z)" in Funktion ""void __clrcall SetNumlock(int)" (?SetNumlock@@$$FYMXH@Z)". Tastendruck-Simulation.obj
Fehler 1 error LNK2028: Nicht aufgelöstes Token (0A00000A) ""extern "C" void __stdcall keybd_event(unsigned char,unsigned char,unsigned long,unsigned long)" (?keybd_event@@$$J216YGXEEKK@Z)", auf das in Funktion ""void __clrcall SetNumlock(int)" (?SetNumlock@@$$FYMXH@Z)" verwiesen wird. Tastendruck-Simulation.obj
Fehler 2 error LNK2028: Nicht aufgelöstes Token (0A000019) ""extern "C" int __stdcall GetKeyboardState(unsigned char *)" (?GetKeyboardState@@$$J14YGHPAE@Z)", auf das in Funktion ""void __clrcall SetNumlock(int)" (?SetNumlock@@$$FYMXH@Z)" verwiesen wird. Tastendruck-Simulation.obj
Fehler 5 fatal error LNK1120: 4 nicht aufgelöste externe Verweise.
Externe Verweise?
-
Dann bist Du aber immerhin schon mal einen Schritt weiter, da der Compiler keine Fehlermeldung gebracht hat!
Mein Tipp: Lege ein neues Win32 Projekt an! Und kein .NET Projekt... dann beheben sich diese Fehler von alleine... oder füge noch ein
#pragma comment(lib, "user32.lib")
ganz oben ein...
-
Super, er kompiliert alles ohne Probleme! Danke
-
Ich habe noch eine Frage: Wenn ich die obige .exe-Datei im Windows-Explorer öffnen will, dann öffnet sich kein Fenster, jedoch gibt es die Funktion. Die simulierte Taste 3 wird z.B. dann im normalen Editor oder bei Word geschrieben. Wie kann ich aus dem "Programm" (siehe unten) ein richtiges Fenster machen? Ich habe immernoch eine .NET-Datei!
Eine Tastendrucksimulation soll das Ergebnis werden.
#pragma comment(lib, "user32.lib") #include <windows.h> void SetNumlock(BOOL bState) { BYTE keyState[256]; GetKeyboardState((LPBYTE)&keyState); if( (bState && !(keyState[VK_NUMPAD3] & 1)) || (!bState && (keyState[VK_NUMPAD3] & 1)) ) { keybd_event( VK_NUMPAD3, 0x63, KEYEVENTF_EXTENDEDKEY | 0, 0 ); keybd_event( VK_NUMPAD3, 0x63, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0); } } void main() { SetNumlock( TRUE ); }
Danke für alle Antworten!
-
Dann erstelle eine Windows-Forms Anwendung. Dort kannst Du dann einen Button einbauen und in den Event-Handler den Code aus Deiner "SetNumlock" einfügen.
Beachte dabei aber auch: Wenn Du das Programm auf einem anderen Rechner laufen lassen willst, so musst Du diverse Dinge installieren:
http://blog.kalmbach-software.de/de/2010/09/23/ccli-programme-auf-einem-anderen-rechner-ausfuhren-vc2010/
-
LaKo15 schrieb:
Super, er kompiliert alles ohne Probleme! Danke
<klugscheiss>Hat er vorher doch auch schon.. nur gelinkt eben nicht...</klugscheiss>
-
Ich versuch es mal!
@theta: Das sieht mir aus wie HTML...
-
Dort kannst Du dann einen Button einbauen und in den Event-Handler den Code aus Deiner "SetNumlock" einfügen.
================================================================================
Wo soll ich den Code einfügen (habe unten zwei Stellen markiert)?
Ich habe es mal an einigen Stellen probiert (mit (BOOL bState)) aber dann erscheint eine Seite mit Warnungen etc.Und: Welchen Code genau; nur (BOOL bState) oder noch mehr?
Hier steht die "Form1.h"-Datei, die den Button (button1) beinhaltet:
#pragma once namespace TastenSimulator_v10 { using namespace System; using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data; using namespace System::Drawing; 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(33, 116); this->button1->Name = L"button1"; this->button1->Size = System::Drawing::Size(219, 33); this->button1->TabIndex = 0; this->button1->Text = L"Klick mich!"; this->button1->UseVisualStyleBackColor = true; // ~~~In dieser Zeile noch einen EventHandler-Code einfügen? / Wie?~~~ // // 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->ShowIcon = false; this->Text = L"TastenSimulator_v1.0"; this->TopMost = true; this->Load += gcnew System::EventHandler(this, &Form1::Form1::_Load); // ~~~In dieser Zeile?~~~ this->ResumeLayout(false); } #pragma endregion private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) { } }; }
PS: Danke für den Link!