paulsk8 Posted July 1, 2012 Report Posted July 1, 2012 SalutAm niste probleme cu sendmessage..doresc de exemplu sa trimit butonul ESC la programul principal.Declar sendmessage-ulprivate const int HWND_BROADCAST = 0xffff; [DllImport("user32.dll")] public static extern int SendMessage( int hWnd, // unde se trimite uint Msg, // ce se trimite long wParam, // parametru .. long lParam // parametru ); uint VK_ESCAPE = 0x1B; // escDaca dau SendMessage(HWND_BROADCAST, VK_ESCAPE, 0, 0);imi da eroare..ce am gresit? parametrii ? Quote
Nytro Posted July 1, 2012 Report Posted July 1, 2012 La programul principal?Eu am folosit keybd_event function cu WM_KEYUP si WM_KEYDOWN sau SendInput function .Am avut ceva probleme cu SendMessage, daca incerci sa trimiti unui program mai "prioritar" nu o sa poti, sunt anumite restrictii. Oricum, si cu SendMessage cu WM_KEYDOWN/UP ar trebui sa mearga. Quote
paulsk8 Posted July 1, 2012 Author Report Posted July 1, 2012 (edited) Nu obligatoriu la cel principal..keybd am incercat dar nu merge in jocuri ( ceea ce incerc eu )As dori la procesul gta_sa, dar nu mi-am dat seama cum...Cat despre sendinput nu am inteles absolut deloc care e treaba cu el..Cum pot face sa trimit niste taste unui proces ales de mine? hwnd=Procces("notepad.exe") ? Edited July 1, 2012 by paulsk8 Quote
Nytro Posted July 1, 2012 Report Posted July 1, 2012 E cam aiurea daca vrei sa gasesti fereastra in functie de proces.Poti face asta: folosesti EnumWindows function (Windows) pentru a gasi toate ferestrele, ce necesita crearea unei functii callback EnumWindowsProc callback function (Windows) si pentru fiecare fereastra cauti process ID-ul cu GetWindowThreadProcessId function (Windows) , pe acesta fiind usor sa il afli GetProcessId function .Dar NU se procedeaza asa. Trebuie sa gasesti direct fereastra cu functiile FindWindow function si FindWindowEx function . Foloseste un program ca Spy++ sau WinspectorSpy pentru a descoperi clasele si numele/titlurile ferestrelor (proprietati ale ferestrelor dupa care poti face cautarea cu aceste functii) si astfel vei avea handler-ul ferestrei.Apoi vei putea folosi SendMessage pentru a trimite KEYDOWN/UP:SendMessage(hWnd, WM_KEYDOWN, buton, 0);SendMessage(hWnd, WM_KEYUP, buton, 0);Cu keybd_event function sau SendInput function e mai simplu in sensul ca nu ai nevoie de nicio fereastra, functiile pur si simplu simuleaza apasarea unor taste, mesajele acestea ajungand la fereastra activa. Adica pui codul sa apeleze in timp ce te afli in joc, poti cauta intr-un Timer/cu un Sleep() fereastra de joc cu GetForegroundWindow function .Folosirea lui SendInput function poate fi putin greoaie, dar e foarte practica functia. Uite aici un exemplu de folosire: Google Answers: Using SendInput to send a numberAi grija cu C#-ul, e posibil sa ai foarte multe probleme, cu Pointeri sau dimensiunea parametrilor cu care apelezi functiile API, e posibil sa trebuiasca sa folosesti functiile din clasa Marshal Class (System.Runtime.InteropServices) . Quote
halucin0g3n Posted July 2, 2012 Report Posted July 2, 2012 paulsk8, ideea este in felul urmator, jocurile sunt renderizate prin directx. pentru a reusi ce vrei tu sa faci, trebuie directx hook.mai multe detalii nu pot sa-ti dau dar un search google te rezolva. Quote
parazitul29 Posted July 3, 2012 Report Posted July 3, 2012 Pentru ce vrei tu sa faci mai bine incerci cu un autoit sau visual basic cu C te complici prea multIn Autoit chestia asta nu i-a mai mult de o linie de cod Quote