IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Zelená Veverka:15.5.2019 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.5.2019 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.5.2019 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.5.2019 6:46
Avatar
Martin Dráb
Tvůrce
Avatar
Odpovídá na Zelená Veverka
Martin Dráb:16.5.2019 9:05

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

Nahoru Odpovědět
16.5.2019 9:05
2 + 2 = 5 for extremely large values of 2
Avatar
Odpovídá na Radek Chalupa
Zelená Veverka:16.5.2019 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.5.2019 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.5.2019 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.5.2019 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.5.2019 10:37

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

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

někdo nějakou radu?

Nahoru Odpovědět
17.5.2019 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
Tvůrce
Avatar
Odpovídá na Zelená Veverka
Martin Dráb:17.5.2019 9:44

Napiš sem svůj kód.

Nahoru Odpovědět
17.5.2019 9:44
2 + 2 = 5 for extremely large values of 2
Avatar
Odpovídá na Martin Dráb
Zelená Veverka:17.5.2019 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.5.2019 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.5.2019 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.5.2019 9:51
Nahoru Odpovědět
17.5.2019 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.5.2019 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.5.2019 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.