Tastendruck in einem laufenden Prozess
-
Fehler 1 error C2065: 'HWND': nichtdeklarierter Bezeichner
Fehler 4 error C2065: 'NULL': nichtdeklarierter Bezeichner
Fehler 5 error C3861: "FindWindow": Bezeichner wurde nicht gefunden.Muss ich noch was includen?
Haut so nicht hin.
NULL ist doch auch kein C++/CLI.
Bin ich im flaschen Forum?Gruß
Jens
-
Lies was man Dir schreibt. Du musst die windows.h includen.
-
Hast Du den Code getestet? Oder nur so hingeklatscht?
Das ist jetzt mit "Windows.h"Fehler 1 error LNK2028: Nicht aufgelöstes Token (0A000010) ""extern "C" int __stdcall SetForegroundWindow(struct HWND__ *)" (?SetForegroundWindow@@$$J14YGHPAUHWND__@@@Z)", auf das in Funktion ""private: void __clrcall Kaese::Form1::button1_Click(class System::Object ^,class System::EventArgs ^)" (?button1_Click@Form1@Kaese@@$$FAAAVObject@System@@P$AAVEventArgs@4@@Z)" verwiesen wird. Kaese.obj
Fehler 2 error LNK2028: Nicht aufgelöstes Token (0A000011) ""extern "C" struct HWND__ * __stdcall FindWindowW(wchar_t const *,wchar_t const *)" (?FindWindowW@@$$J18YGPAUHWND__@@PB_W0@Z)", auf das in Funktion ""private: void __clrcall Kaese::Form1::button1_Click(class System::Object ^,class System::EventArgs ^)" (?button1_Click@Form1@Kaese@@$$FAAAVObject@System@@P$AAVEventArgs@4@@Z)" verwiesen wird. Kaese.obj
Fehler 3 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""extern "C" int __stdcall SetForegroundWindow(struct HWND__ *)" (?SetForegroundWindow@@$$J14YGHPAUHWND__@@@Z)" in Funktion ""private: void __clrcall Kaese::Form1::button1_Click(class System::Object ^,class System::EventArgs ^)" (?button1_Click@Form1@Kaese@@$$FAAAVObject@System@@P$AAVEventArgs@4@@Z)". Kaese.obj
Fehler 4 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""extern "C" struct HWND__ * __stdcall FindWindowW(wchar_t const *,wchar_t const *)" (?FindWindowW@@$$J18YGPAUHWND__@@PB_W0@Z)" in Funktion ""private: void __clrcall Kaese::Form1::button1_Click(class System::Object ^,class System::EventArgs ^)" (?button1_Click@Form1@Kaese@@$$FAAAVObject@System@@P$AAVEventArgs@4@@Z)". Kaese.obj
Fehler 5 fatal error LNK1120: 4 nicht aufgelöste externe Verweise.
Komm lass, mach ich selber.
So weit war ich auch schon mal.Gruß, der Fischer von Sandro Guan
-
Ja du brauchst noch nen dll import von der user32.dll und musst Findwindow und Setforegroundwindow noch bestimmen.Ich poste gleich mal den gesamten Code.
Aber zurück zu meiner Frage: Warum setzt er das nicht in den Vordergrund?
EDIT: Hier der Code:
public: [DllImport("USER32.DLL")] static IntPtr FindWindow(String^ lpClassName, String^ lpWindowName); public: [DllImport("USER32.DLL")] static bool SetForegroundWindow(IntPtr ^hWnd); private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { IntPtr ^calculatorHandle = FindWindow("notepad", "Unbenannt - Editor"); if (calculatorHandle == IntPtr::Zero) { MessageBox::Show("Calculator is not running."); return; } SetForegroundWindow(calculatorHandle); SetForegroundWindowEx(calculatorHandle); SendKeys::SendWait("111"); SendKeys::SendWait("*"); SendKeys::SendWait("11"); SendKeys::SendWait("="); }
-
Hat sich erledigt Fehler gefunden.
-
Dann teile allen anderen doch bitte mit, wo der Fehler lag.
-
Einfach die Handles von IntPtr wegnehmen
IntPtr calculatorHandle = FindWindow("notepad", "Unbenannt - Editor");
-
Hallo,
Ich arbeite mit Win32Konsole und möchte einen Tastendruck an einen bestimmten Prozess (hl.exe, Counter-Strike) senden. Allgemein funktionierte keybd_event bei verschiedensten Anwendungen wie Notepad oder Firefox recht gut, aber CS scheint sehr immun dagegen zu sein (warum, kann sich wohl jeder denken.)
Bis jetzt habe ich folgenden Code:#include "stdafx.h" #include <windows.h> #include <iostream> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { HWND hwnd = FindWindow(0,L"Counter-Strike"); DWORD dwProcessId = NULL; GetWindowThreadProcessId(hwnd,&dwProcessId); HANDLE hFin = OpenProcess(PROCESS_VM_READ,false,dwProcessId); if(!hwnd || !hFin) { cout << "Error " << hwnd << "," << hFin; getchar(); } else { SetForegroundWindow(hwnd); } while(1) { while(GetAsyncKeyState(VK_F3)) { SendMessage(hwnd,WM_KEYDOWN,VK_SPACE,0); Sleep(100); SendMessage(hwnd,WM_KEYUP,VK_SPACE,0); Sleep(300); } Sleep(100); } return 0; }
Leider habe ich keine Ahnung von WinAPI was wohl für das Scheitern meines Projektes verantwortlich ist.
Nun bin ich mir sicher dass ich den hFin Handle für den Simulierten Tastendruck einbinden muss, nur womit??
PS: Ich habe wirklich nicht vor den Spielspaß zu stören, danke.
-
Versuch mal SendInput oder Hook entsprechende API Funktionen.
-
SendInput
http://msdn.microsoft.com/en-us/library/windows/desktop/ms646310(v=vs.85).aspx
btw. die Funktion kann man schnell "falsch" verwenden so das es scheint als würde es funktionieren aber in wirklichkeit funktioniert es nicht zuverlässig.
Such halt hier im Forum falls deine SendInput Funktion mal funktioniert und mal nicht ... Da kann man seltsame Sachen mit erleben.
-
besten Dank,
hatte es aber noch mit keybd_event hinbekommen.while(1) { while(GetAsyncKeyState(VK_SPACE)) { keybd_event(VK_MBUTTON,0,KEYEVENTF_EXTENDEDKEY,dwProcessId); Sleep(18); keybd_event(VK_MBUTTON,0,KEYEVENTF_EXTENDEDKEY|KEYEVENTF_KEYUP,dwProcessId); Sleep(18); } Sleep(100); }
Da man ja auch von offizieller Seite zu SendInput wechseln soll, teste ich das Programm mal eine Weile sehr genau, ob auch wirklich jeder Befehl reinkommt.