
Delphi help
Zdravím.
S delphi znám jen základy co do mně hustili ve škole ale to co potřebují je nad rámec mých znalostí.
Půjde to?
Mam spuštěný exe soubor.
Spustím winhex - memory - a najdu si ho a načtu.
Vidím tam všechny řetězce co jsou v programu.
Půjde v delphi najít ten můj exe v pamětí a nahradí nějaký řetězec?
Hm, jde vidět že jsem už dlouho nepoužíval.
Co je špatně?
notepad mam spuštěný a vidím ho v pamětí a Nenalezeno
V tom parametru neni jmeno EXE souboru, ale trida okna. Tu si musis zjistit nejakym inspectorem.
Zkus jako parametr pouzit jen 'notepad'
To jsem také zkoušel a nenalezeno.
WndHandle := FindWindow(Nil,'notepad');
WndHandle := FindWindow('notepad', nil); //prehoď si parametre a bude Ti to fungovať...
http://www.swissdelphicenter.ch/en/showcode.php?id=327
Dotaz.
Ono to funguje tak jak jste poradil ale jen u toho notepadu.
Když to zkouším na jakykolív jiný prográmek, co mam v počítači tak to nefunguje.
GetLastError "neplatný popisovač okna"
Co to je jakykoli jiny programek a co konkretne nefunguje? Finkcia vrati co presne? Testujes vobec navratovu hodnotu na NULL? Ten string mas vo formate TSTR? Je to unicode aplikacia? Preco znasilnujes delphi co tam ani svaty nevie co to je CTSTR a nerobis to normalne v C++?
https://msdn.microsoft.com/en-us/library/windows/desktop/ms633499(v=vs.85).aspx
P.S. ten prvy parameter je class name a ne meno okna. Pouzi napr. spy++ apod aby si videl co to je okno a class okna. Class okna normalne nevidis, takze netusiom co do tej funkcie strkas, ale evidentne tam strkas blby string.
Koukam že me znalostí jsou dost mizerne.
Se snažím o to co poradil pan Fiala.
Je exe program.
najít proces, treba pomoci FindWindow apod. a získat Handle.
A pak změnít nějaký řetězec.
Je tam třeba řetězce 38-Roof Electronics
https://postimg.org/image/2i0xmrvn6j/
Což by mělo jít pomocí WriteBytes
writeprocessmemory(Handle, Pointer($523328), [$CC, $90, $03]);
A proč to nerobím v C++.
, ktere je jednodušší.
Bo jsem lama a nedavám to v delphi
Jako parametr FindWindows se zadava TRIDA okna. Pro Delphi aplikace treba TMainForm1, pro cizi aplikace si to musis najit nejakym inspektorem.
Koukal jsi se na ten priklad pro Delphi, na ktery jsem daval odkaz? Ten by mel delat vse, co potrebujes.
Muzes to udelat i tak, ze si vypises seznam vsech procesu, z nich si vyberes, ten ktery chces a provedes, co potrebujes.
FindWindow nehlada proces, ale okno. Vyplyva to uz z nazvu. Okno neni proces a proces neni okno.
Aplikacia X nema pristup k pamati inej aplikacie Y, je to tak schvalne.
writeprocessmemory potrebuje handle na process memory objekt. Vsetko je v MSDN. https://msdn.microsoft.com/en-us/library/windows/desktop/ms681674(v=vs.85).aspx
Delphi neni jednoduchsie.
To co chces nedas, nechaj to. Ked budes par rokov studovat windows a MSDn tak mozno potom das.
https://www.unknowncheats.me/forum/programming-for-beginners/52562-simple-write-process-memory-function-explained.html
Pochopiteľne, že to nie je "univerzálne". Tak ako tu už bolo napísané musíš vedieť meno triedy okna...
Robí sa to takto:
1. Zistiť či je daná aplikácia spustená (existuje proces, ktorého názov exe súboru hľadám?)
ak je aplikácia spustená potom si uložiť do nejakej premennej PID hľadanej aplikácie
2. Zistiť handle hlavného okna na základe PID (Process ID) - tu môže nastať problém, pokiaľ má aplikácia hlavné main okno, ktoré je minimalizované atď. a prípadne ešte ďalšie child okná, preto sa hľadá PID hlavného okna ...
3. Vieme handle hlavného okna môžeme sa hrať...