ITnetwork Flashka zdarma C# týden
Akce! Pouze tento týden sleva až 80 % na kurzy C# .NET. Lze kombinovat s akcí 50 % bodů navíc na prémiový obsah!
Brno? Vypsali jsme pro vás nové termíny školení Základů programování a OOP v Brně!
Avatar
Zelená Veverka:19. května 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. května 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
Redaktor
Avatar
Odpovídá na Zelená Veverka
Martin Dráb:19. května 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. května 13:36
2 + 2 = 5 for extremely large values of 2
Avatar
Zelená Veverka:19. května 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. května 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.