C# týden November Black Friday
BlackFriday je tu! Využij jedinečnou příležitost a získej až 80 % znalostí navíc zdarma! Více zde
Pouze tento týden sleva až 80 % na e-learning týkající se C#

Diskuze: Inject kláves do procesu, Macro do aplikace

Aktivity (2)
Avatar
Zelená Veverka:15. května 17:18

Zdravím, snažím se naprogramovat macro do jedné aplikace skrze C++. Zkoušel jsem keybd_event, post/sendMessage, ale vypadá to, že to mají "ošéfované". Nicméně jsem zkoušel program zvaný "Macro Recorder"od jitbitu a kupodivu funkce , které měli stisky kláves vynutit, fungovali. Díval jsem se skrze Microsoft Spy++ a odesílané zprávy do daného okna jsou stejné jak u mého programu tak i u macroRecorderu.
Zkoušel jsem i reversovat danou hru skrze debbuger (x32dbg/ cheatengine), ale k vyvolání funkce jsem se prostě nedostal... jaký to jsem, ale amatér.
Někdo nějaký nápad?
Jinak toto je zdojené téma. Přidal jsem ho též do rubriky assembler. Port tématu mi je neznámý. Tak se omlouvám.

Odpovědět
15. května 17:18
Oblíbený Editor: Microsoft NotePad Destructor; HW sestava: AMD Kalašnikov; Literatura: Evžen Oněgin - Linux přichází;...
Avatar
Odpovídá na Zelená Veverka
Radek Chalupa:16. května 6:46

Zkoušel jsi funkci SendInput? Takhle nějak by to mělo fungovat, vstupem je virtuální kód, hodnoty lze dohledat v dokumentaci k WinAPI.

bool simulovat_klavesu(WORD vk) noexcept
{
        INPUT ki[2];
        ZeroMemory(&ki, sizeof(ki));
        ki[0].type = INPUT_KEYBOARD;
        ki[0].ki.wVk = vk;
        ki[1].type = INPUT_KEYBOARD;
        ki[1].ki.wVk = vk;
        ki[1].ki.dwFlags = KEYEVENTF_KEYUP;
        UINT ui = SendInput(2, ki, sizeof(INPUT));
        return (0 != ui)
}

Radek Chalupa
www.radekchalupa.cz

 
Nahoru Odpovědět
16. května 6:46
Avatar
Martin Dráb
Redaktor
Avatar
Odpovídá na Zelená Veverka
Martin Dráb:16. května 9:05

Nebo zkus SetWindowsHookEx s WH_JOURNALPLA­YBACK, ale nebude to úplně snadné řešení.

Nahoru Odpovědět
16. května 9:05
2 + 2 = 5 for extremely large values of 2
Avatar
Odpovídá na Radek Chalupa
Zelená Veverka:16. května 10:16

Děkuji za tip. Zkusím zprovoznit touto cestou. SendInput jsem nezkoušel. Nepřipadal mi zrovna, že by se chtěl se mnou kamarádit =)

Nahoru Odpovědět
16. května 10:16
Oblíbený Editor: Microsoft NotePad Destructor; HW sestava: AMD Kalašnikov; Literatura: Evžen Oněgin - Linux přichází;...
Avatar
Odpovídá na Radek Chalupa
Zelená Veverka:16. května 10:29

Mohu se zeptat v jaká je to knihovně? používám windows.h;
Nevypadá to že by se tomu chtělo fungovat.
Input was not declared in this scope.

Nahoru Odpovědět
16. května 10:29
Oblíbený Editor: Microsoft NotePad Destructor; HW sestava: AMD Kalašnikov; Literatura: Evžen Oněgin - Linux přichází;...
Avatar
Zelená Veverka:16. května 10:37

#define WINVER 0x0500
#include <windows.h>
nefakčí i tak

Nahoru Odpovědět
16. května 10:37
Oblíbený Editor: Microsoft NotePad Destructor; HW sestava: AMD Kalašnikov; Literatura: Evžen Oněgin - Linux přichází;...
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Zelená Veverka:17. května 9:40

někdo nějakou radu?

Nahoru Odpovědět
17. května 9:40
Oblíbený Editor: Microsoft NotePad Destructor; HW sestava: AMD Kalašnikov; Literatura: Evžen Oněgin - Linux přichází;...
Avatar
Martin Dráb
Redaktor
Avatar
Odpovídá na Zelená Veverka
Martin Dráb:17. května 9:44

Napiš sem svůj kód.

Nahoru Odpovědět
17. května 9:44
2 + 2 = 5 for extremely large values of 2
Avatar
Odpovídá na Martin Dráb
Zelená Veverka:17. května 9:46

V zásadě teď řeším jen a pouze funci sendInput. Zkoušel jsem snad všechno na co jsem narazil na internetu. Visual studio 2017 com. verze.
kod:
#define _WIN32_WINNT 0x0400
// bzw. gleich
#define _WIN32_WINNT 0x0501 // WinXP
#define _WIN32_WINNT 0x0500
#include <conio.h> .
#include <windows.h>
#include "pch.h"
#include <iostream>
int main()
{
// This structure will be used to create the keyboard
// input event.
INPUT ip;

// Pause for 5 seconds.
Sleep(5000);

// Set up a generic keyboard event.
ip.type = INPUT_KEYBOARD;
ip.ki.wScan = 0; // hardware scan code for key
ip.ki.time = 0;
ip.ki.dwExtraInfo = 0;

// Press the "A" key
ip.ki.wVk = 0x41; // virtual-key code for the "a" key
ip.ki.dwFlags = 0; // 0 for key press
SendInput(1, &ip, sizeof(INPUT));

// Release the "A" key
ip.ki.dwFlags = KEYEVENTF_KEYUP; // KEYEVENTF_KEYUP for key release
SendInput(1, &ip, sizeof(INPUT));

// Exit normally
return 0;
}

Nahoru Odpovědět
17. května 9:46
Oblíbený Editor: Microsoft NotePad Destructor; HW sestava: AMD Kalašnikov; Literatura: Evžen Oněgin - Linux přichází;...
Avatar
Zelená Veverka:17. května 9:49

Je to tam celkem naprasený.
+Zkoušel jsem kompilovat i v Codeblocks. Input není deklarován. Furt to stejné dokola

Editováno 17. května 9:51
Nahoru Odpovědět
17. května 9:49
Oblíbený Editor: Microsoft NotePad Destructor; HW sestava: AMD Kalašnikov; Literatura: Evžen Oněgin - Linux přichází;...
Avatar
Zelená Veverka:18. května 12:45

Já z toho nemůžu. Ten samý soubor dnes otevřu a najednou funguje. Ono si to žije vlatním životem. No každopádně to najednou fakčí.

Akceptované řešení
+5 Zkušeností
Řešení problému
Nahoru Odpovědět
18. května 12:45
Oblíbený Editor: Microsoft NotePad Destructor; HW sestava: AMD Kalašnikov; Literatura: Evžen Oněgin - Linux přichází;...
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 11 zpráv z 11.