Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem 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?

Předmět Autor Datum
Základem jsou API funkce ReadProcessMemory/Write processMemory 1. najít process, treba pomoci FindWi…
Jan Fiala 04.10.2017 07:44
Jan Fiala
Děkují moc ;-)
Marek.12 04.10.2017 07:55
Marek.12
Hm, jde vidět že jsem už dlouho nepoužíval. Co je špatně? uses ShellApi var WndHandle : HWND; begin…
Marek.12 04.10.2017 16:14
Marek.12
V tom parametru neni jmeno EXE souboru, ale trida okna. Tu si musis zjistit nejakym inspectorem. Zku…
Jan Fiala 04.10.2017 16:34
Jan Fiala
To jsem také zkoušel a nenalezeno. WndHandle := FindWindow(Nil,'notepad');
Marek.12 04.10.2017 16:54
Marek.12
WndHandle := FindWindow('notepad', nil); //prehoď si parametre a bude Ti to fungovať... http://www.…
pme 04.10.2017 20:03
pme
Dotaz. Ono to funguje tak jak jste poradil ale jen u toho notepadu. Když to zkouším na jakykolív jin…
Marek.12 05.10.2017 14:37
Marek.12
Co to je jakykoli jiny programek a co konkretne nefunguje? Finkcia vrati co presne? Testujes vobec n…
MM.. 05.10.2017 15:03
MM..
Koukam že me znalostí jsou dost mizerne. Se snažím o to co poradil pan Fiala. Je exe program. najít…
Marek.12 05.10.2017 16:34
Marek.12
Jako parametr FindWindows se zadava TRIDA okna. Pro Delphi aplikace treba TMainForm1, pro cizi aplik…
Jan Fiala 05.10.2017 21:03
Jan Fiala
FindWindow nehlada proces, ale okno. Vyplyva to uz z nazvu. Okno neni proces a proces neni okno. Ap…
MM.. 05.10.2017 22:34
MM..
https://www.unknowncheats.me/forum/programming-for-beginners/52562-simple-write-process-memory-funct… poslední
MM.. 05.10.2017 22:47
MM..
Pochopiteľne, že to nie je "univerzálne". Tak ako tu už bolo napísané musíš vedieť meno triedy okna.…
pme 05.10.2017 22:12
pme

Základem jsou API funkce ReadProcessMemory/Write processMemory
1. najít process, treba pomoci FindWindow apod. a získat Handle.
2. Pak pouzijes OpanProcess/CreateProcess a pak pomocí výše zmíněných funkcí najít řetězec a přepsat jej.

Zde jsou API funkce, ktere by se ti mohly hodit:
https://msdn.microsoft.com/en-us/library/ms679303.aspx

A tady je zdrojak, ze ktereho muzes vyjít:
http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=386&lngWId=7
Případně zde:
https://sourceforge.net/projects/peepingtom/files/peepingtom/104b%20-%20Delphi/

Hm, jde vidět že jsem už dlouho nepoužíval.
Co je špatně?

uses ShellApi

var
WndHandle : HWND;
begin
WndHandle := FindWindow(Nil,'notepad.exe');
  if WndHandle = 0 then
    begin
     ShowMessage('Nenalezeno');
     Exit;
  end;

notepad mam spuštěný a vidím ho v pamětí a Nenalezeno

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++.
Bo jsem lama a nedavám to v delphi :-D, ktere je jednodušší.

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.

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

Zpět do poradny Odpovědět na původní otázku Nahoru