Diskuze: Divné chování funkce SendInput() [Win32 API]
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.


Zobrazeno 7 zpráv z 7.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.


Osobně jsem pro tenhle účel kdysi používal funkci keybd_event.
Fajn, díky za tip, zkusím to s tím
I když MSDN tvrdí, že je zastaralá a nahrazená právě fcí
SendInput. Co s druhým parametrem, bScanCode? Prý to aplikace většinou
ingnorují, mám spy-nout LPARAM eventu příchozího z fyzického stisku
klávesy a předat ho, nebo je to zbytečný a opravdu se to ignoruje (takže
předaná prostá nula bude stačit)?. Jak jsi to používal?
Navíc - tam nepošlu všechny keyeventy naráz jako při sendinput, takže ve smyčce? "nezaspamuju" vstupní frontu? Těch stisků je kolem 20 (max) párů press/release, takže 40 eventů, je rozumný to hodit do smyčky? Někde jsem četl, že práve sendinput tohle nemá úplně nejradši kvůli "spamu" smyčky událostí, že je pak ochotný mi některé eventy zahodit, resp. nezpracovat
Dám vědět, zda pomohlo
Zkus to a uvidíš. Nepamatuju si přesně jak se ta funkce používá, najdi si dokumentaci.
Tak jsem to zkusil s tím keybd_eventem a stále stejný problém.
Zkusil jsem to ještě se C#ovým SendKeys.SendWait z Sys.Win.Forms, a chová se to taky stejně - u mně jo, ale jinde ne.
Ještě mně napadla podstatná maličkost: já si sice forcuju okno kam
potřebuju psát na topmost
pomocí ShowWindow, resp. SetWindowPos (viz ten C# úsek kódu jak si tam
schovávám a ukazuju okno prohlížeče), ale přijde mi, jako by to psal do
okna konzole programu. To by i vysvětlovalo, proč ta SendInput (původní),
ale i všechny další pokusy. Kliknutí je správně, ten combo se rozjede na
browseru (ale taky to je správně, protože na SendClicks předávám handler),
ale úhozy vypadá, že zadává jinam - ty ENTERy na konci si totiž provede
konzolovka sama, nepočká, až je dostane na vstupu.
Nějaký nápad, jak vynutit, aby ten SendInput/keybd_event, whatever se směroval správně?
S těmihle věcmi jsem si nikdy moc nehrál, ale zdá se mi, že tam u posílání proudu klávesových událostí nikde nespecifikuješ okno, kterému se mají doručit (žádné SetForegroundWindows třeba).
Teoreticky by také mohl být problém v tom, že integrity level procesu prohlížeče je vyšší než IL tvého programu (ať už kvůli UI Privilege Isolation nebo proto, že prohlížeč prošel UAC dialogem a tvoje aplikace ne). Ale to je taková hodně teoretická možnost a nepředpokládám, že v ní tkví tvůj problém.
Jo, chybějící SetForegroundWindow(HWND), tam chybí, dopsal jsem ho tam
a opravdu se to začíná posílat kam je potřeba (ještě to není dokonalý,
prý to hýbe vertikálním posuvníkem stránky a a ne opšnama v comboboxu,
ale už snad má správnou cestu). Měl jsem za to, že si ten focus vynutí
právě kliknutí na combo, ale tak jsem si to myslel BLBĚ
Ještě není úplně dokonale
zřejmý, zda je potřeba ten SetForegroundWindow hodit na handler zobrazené
karty nebo na jeho rodiče (nemám to jak otestovat, nemám náhradní stroj
dneska, ale tak snad se metodou pokusů a omylů konečně (snad po deseti
dnech, co tady řeším takovouhle "blbost") dojdeme k funčnímu řešení.
Díky oběma za čas a nápady.
Zobrazeno 7 zpráv z 7.