Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Alle 20 Sec Aktion ausführen - Aktion geht nur bedingt

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
23.07.2004, 14:33 Uhr
~Irrlicht
Gast


Hallo an alle,

ich wollte das alle X Sekunden die Taste 1 gedrückt wird. Das funktioniert auch Mein Programm funzt im Notepad, Word - Windows Explorer nur wollte ich das die Taste 1 in nem Spiel (Dark Age of Camelot) gedrückt wird.

jedoch da gehts nich obwohl das programm läuft (hab die TastaturLED´s blinken lassen zur Kontrolle)

muss man da irgendwas angeben wenn man ne Anwenung wie n Spiel Startet, oder kann ich das durch evtl kleine Änderungen ausgleichen.

MfG

ein kleines Irrlicht.

Zum Runterladen: www.daoc.dark-empire.net/Testprogramm.rar

Hier der Quelltext:


#include <windows.h>

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

const char szAppName[] = "Uebung 1: Timer programmieren"; // Global, da in WndProc benutzt

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
MSG msg;
HWND hWnd;
WNDCLASS wc;

wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hbrBackground = (HBRUSH) GetStockObject(LTGRAY_BRUSH);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hInstance = hInstance;
wc.lpfnWndProc = WndProc;
wc.lpszClassName = szAppName;
wc.lpszMenuName = NULL;
wc.style = CS_HREDRAW | CS_VREDRAW;

RegisterClass(&wc);

hWnd = CreateWindow( szAppName,
szAppName,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL);

ShowWindow(hWnd, iCmdShow);
UpdateWindow(hWnd);

while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}

return msg.wParam;
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
const UINT TimerID = 1;
const int iDelay = 2000; // = Zeit einstellen

switch (message)
{
case WM_CREATE:
{
SetTimer(hWnd, TimerID, iDelay, NULL); // Timer setzen
return 0;
}
case WM_TIMER: // WM_TIMER
{
keybd_event(0x31, 0, 0, NULL); // '1' drücken
keybd_event(0x31, 0, KEYEVENTF_KEYUP, 0); // '1' loslassen
keybd_event(144, 0, 0, 0); // Num Lock
keybd_event(144, 0, 0x02, 0); // an
Sleep(1000);
keybd_event(144, 0, 0, 0); // Num Lock
keybd_event(144, 0, 0x02, 0); // aus
Sleep(500);
keybd_event(20, 0, 0, 0); // Caps Lock
keybd_event(20, 0, 0x02, 0); // an
Sleep(1000);
keybd_event(20, 0, 0, 0); // Caps Lock
keybd_event(20, 0, 0x02, 0); // aus
Sleep(500);
keybd_event(145, 0, 0, 0); // Scroll Lock
keybd_event(145, 0, 0x02, 0); // an
Sleep(1000);
keybd_event(145, 0, 0, 0); // Scroll Lock
keybd_event(145, 0, 0x02, 0); // aus
Sleep(500);

return 0;

}
case WM_DESTROY:
{
KillTimer(hWnd, TimerID); // nicht vergessen: Timer löschen
PostQuitMessage(0);
return 0;
}
}
return DefWindowProc(hWnd, message, wParam, lParam);
}
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
23.07.2004, 16:38 Uhr
~Flapsi
Gast


Hallo,

Dark Age of Camelot läuft gewiss unter DIRECTX. Spiele unter DIRECTX hebeln normalerweise die Windows Nachrichtenschleife aus, um so volle Kontrolle über das System zu erhalten und implementieren eine eigene (nicht event gesteuerte). Ich denke somit nicht, dass Du mit einem anderen Programm da reinkommst...

Gruß

Flapsi
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
23.07.2004, 16:42 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


das einfachste ist sich einen kleinen adapter für die tastatur zu basteln, welcher die bestimmte taste drückt

Dark Age Of Camelot lässt sich nicht so einfach knacken (btw falls denen sowas bekannt wird kannste dir deinen account abschreiben)
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
24.07.2004, 00:57 Uhr
~Irrlicht
Gast


Hallo,

danke für die Antworten.

Also es geht um folgendes: ich bin Schneider und benutz das Gold, das ich von creepen hab um zu powercraften.

Jedoch muss ich da die ganze Zeit so ca 20 Stück von irgend nem Handschuh machen. (alle 35 sec maustaste oder ne zahl drücken)

wenn ich aber für 20 stück die Sachen einkaufen kann und dann mal so einfach 20 stück herstellen kann, heisst das für mich ich kann 2 min vom rechner weg.

Ich persöhnlich seh das nicht so direkt als bot den ich einschalt und kann den die ganze nacht laufen lassen, da ich ja alle 2 min die sachen verkaufen, neue einkaufen und aus der crafting liste ein gelbes Item raussuchen muss.

MfG

Ein kleines Irrlicht
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
24.07.2004, 07:54 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


evtl hilft es, mal einen Disassembler drüber laufen zu lassen, dann zeigt er dir die Funktionen an welche das Programm benutzt. Falls es dann DirectInput benutzt, wirds schwer etwas am InputBuffer zu manipulieren. (evtl muss man dann "Function-Hooking" benutzen, d.h man ersetzt z.b eine der DirectInput-funktionen durch eine eigene, welche zwar auch die "original"-DXI-Funktion aufruft, aber eben auch noch etwas anderes tut Dies ist jedoch ein ziemlich kompliziertes Thema dann)
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
25.07.2004, 11:28 Uhr
~Irrlicht
Gast


mit mouseevent klappts :-)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: