Diskuze: Delphi

Člen

Zobrazeno 14 zpráv z 14.
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 |


Pokud hledáš okno podle jeho názvu (titulku), specifikuj jej jako druhý parametr funkce FindWindows. První parametr je interpretován jako třída okna. Čirou náhodou má Poznámkový blok tu třídu takto pojmenovanou.
Viz dokumentace
https://msdn.microsoft.com/…=vs.85).aspx
Neřeším poznámkový blok, ten to najde.
Nenajde to ten VCDS
Takto nenajde paní ten notepad.
WndHandle := FindWindow(Nil,'NOTEPAD');
http://www.swissdelphicenter.ch/en/showcode.php?…
procedure TForm1.Button4Click(Sender: TObject);
var
hWordWindow: HWND;
begin
hWordWindow := FindWindow ('NOTEPAD', nil);
ShowWindow(hWordWindow, SW_HIDE);
Sleep(2000);
ShowWindow(hWordWindow, SW_SHOW);
end;
procedure TForm1.Button5Click(Sender: TObject);
var
hWordWindow: HWND;
begin
hWordWindow := FindWindow ('VCDS', nil);
ShowWindow(hWordWindow, SW_HIDE);
Sleep(2000);
ShowWindow(hWordWindow, SW_SHOW);
end;
Oba dva programy mam spuštěne a v pamětí je vidím.
Notepad jde do hide a ten druhý ne.
Proč?
No a jakou tedy vrací FindWindow v tom negativním případě chybu (GetLastError)? Je to dané okno vlastněno programem s vyššími nebo stejnými právy oproti tomu, který volá FindWIndow?
FindWindow vrací "neplatný popisovač okna", nebo tuto chybu vrací ShowWindows?
A zkoušel jsi hledat i podle titulku okna (což je ten druhý parametr FindWIndow), nejen podle třídy? Jistě, pak to nenajde přímo notepad, protože titulek jeho okna může být různý (závisí mj. na souboru, který je v něm otevřený), a proto jej v tom odkazovaném článku hledají prostě tak, že projdou všechna okna aplikace a dívají se na okna, co v titulku obsahují řetězec notepad.
Vypadá to že se v tom pořádně zaplavávám. 
Poradite?
O co mi jde.
Je exe program, spustím ho.
winhex - memory - a najdu si ho a načtu.
Jsou tam řetězce.
Třeba 38-Roof Electronics
Chtěl bych aby můj program tento řetězec vyhledal a přepsal.
Pokud to chceš celé automatizovat (a jen případně zadávat řetězce, které chceš přepsat), tak postup je následunící:
Tak fungovat to funguje.
Ještě by byl dotaz.
Mam 2 verze stejného programu (32 a 64 bit)
U 32 bit je to ok.
U 64 bit mi to nedovolí přepsat.
Důvod je že resource je úplně na jiné adrese a vyhodí mi to system error
code 998 (nepřestupný přístup k paměťovému místu).
Jde to nějak pořešít?
Z 32bitového procesu se rozumně nedá přepisovat paměť 64bitového (opačně to lze). Myslím, že existuje nějaká málo dokumentovaná (pokud vůbec) funkce, jak může 32bitový proces číst paměť 64bitového, ale to je asi tak všechno.
Řešení je jednoduché – prostě budeš mít dvě binárky tvé aplikace, jednu pro 32bitová a jednu pro 64bitová Windows.
Ale nejsem si úplně jistý, zda jsem pochopil, na co se ptáš, je to tak
trošku výzva
.
Ano. Otázka je, jaké zpravy toho exe souboru máš na mysli (tzn. jak moc bude potřeba v paměti měnit strukturu).
Pokud bys strukturu měnit moc nepotřeboval, můžeš ten soubor namapovat za pomoci OS (tzn. oddře za tebe většinu práce) skrz CreateFile -> CreateFIleMapping se SEC_IMAGE*** --> MapViewOfFile. Pokud budeš chtít měnit oblasti, který jsou mapovány jen pro čtení, tak bude třeba použít VirtualProtect pro změnu oprávnění (stálo by za pokus ale zkusit WriteProcessMemory na tyto oblasti ve vlastním procesu).
Pokud se jedná o větší modifikace, tak si asi budeš muset provést celé načítání toho EXE souboru sám (tzn. většinu úprav, kterou systém dělá, když načítá spustitelný soubor do paměti – protože tyhle soubory vypadají v paměti jinak než na disku).
Zobrazeno 14 zpráv z 14.