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í.

Diskuze: AttachThreadInput + SetFocus + SendInput

V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Zelená Veverka:19.5.2019 11:05

Dobrý den,
operuji s těmito třemi funkcemi. Výsledkem by mělo býti zasílání kláves do zvolené aplikace, jenž bude na pozadí, tedy nikoliv otevřena jako hlavní okno.
Nicméně pořád se mi nedaří a SendInput stále zasílá jen do právě otevřeného okna.
Ze zdrojáku:
void odeslaniKlaves(int volba)
{
INPUT ip;
ip.type = INPUT_KEYBOARD;
ip.ki.time = 0;
ip.ki.dwFlags = KEYEVENTF_SCANCODE;
ip.ki.wVk = 0;
ip.ki.dwExtraInfo = 0;
if (volba == 1)
ip.ki.wScan = 0x3B;
if (volba == 2)
ip.ki.wScan = 0x3C;
SendInput(1, &ip, sizeof(INPUT));
Sleep(500);
ip.ki.dwFlags = KEYEVENTF_SCANCODE | KEYEVENTF_KEYUP;
SendInput(1, &ip, sizeof(INPUT));
}
int main()
{
Úsek programu
HWND hwnd = FindWindowA(0, ("nazev programu"));
program_Thread = GetWindowThre­adProcessId(hwnd, &pID);
attached = AttachThreadIn­put(GetCurren­tThreadId(), program_Thread, true);
SetFocus(hwnd);
while(true)
čtení paměti a fce přiřazené k hodnotám z paměti co ovládají klávesnici.....
}
Ještě mě napadlo to zkusit vyřešit přes injekci .dll. V tom znalý nicméně vůbec nejsem.
Vše co vás napadne pište. Díky

Odpovědět
19.5.2019 11:05
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:19.5.2019 13:36

Pro vkládání kódu tu existuje blok [ c o d e ] [ / c o d e ] (bez mezer), kterým vložený kód uděláš mnohem přehlednější, než když jej sem prostě "plácneš".

Většina funkcí Windows API má nějakou návratovou hodnotu, ze které se obvykle dozvíš, zda funkce proběhla úspěšně (o pokud ne, tak obvykle použitím GetLastError se dozvíš, proč selhala). Je OPRAVDU dobré ty návratové hodnoty kontrolovat. Jasně, na internetu najdeš drtivou většinu zdrojových kódu, které tak nečiní, ale nikdo také nemůže tvrdit, že drtivá většina kódu, co se povaluje na internetu, je kvalitní :-).

Pokud třeba cílová aplikace třeba má administrátorská práva (prošla UAC) a tvoje aplikace ne, tě pravděpodobně zablokoval mechanismus User Interface Privilege Isolation (UIPI). Ale těch možností je samozřejmě mnohem více.

Nahoru Odpovědět
19.5.2019 13:36
2 + 2 = 5 for extremely large values of 2
Avatar
Zelená Veverka:19.5.2019 14:07

K té hodnotě -> něco podobného jsem použil u fce "AttachThreadIn­put". Pokud se zadaří tak vrátí jedničku. Připojení k vláknu je OK. Spíš mi šlo, zda-li je vůbec možné skrze fci SendInput vkládat nějak jinam nežli do ForegroundWindow. SendInput je totiž jediná fce, která mi fakčí.
Debuggovat dinput8.dll bych nechtěl. A kdybych se do toho pustil tak by mi to zas trvalo... Jsem skrz toto špatnej. Nikdy jsem to nedělal a proto z 99% neznám fce knihovny windows... Co si pamatuji tak ani v knížkách krom mistroství se neuvádí a to je škoda.

Nahoru Odpovědět
19.5.2019 14:07
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 3 zpráv z 3.