Ahoj
Chcel by som sa spytat ci je mozne urobit v C++ program, ktory by dokazal zobrat text z ineho beziaceho programu, a zapisat ho do textoveho suboru
Dakujem
Určite to možné je, ale záleží jak to myslíš.
Například lze jednoduše získat přes Win API handle cizího procesu třeba notepadu, a můžeš měnit obsah, či obash notepad zkopírovat do proměnné.
#include <windows.h>
#define WINDOW_TITLE "Untitled - Notepad"
int main()
{
HWND hwNotepad;
HWND hwNotepadEdit;
char szTextBox[255];
hwNotepad = FindWindow(NULL, WINDOW_TITLE);
if(!hwNotepad)
{
MessageBox(NULL, "Okno notepadu je fuc", "Argh", MB_OK);
return -1;
}
hwNotepadEdit = FindWindowEx(hwNotepad, NULL, "Edit", NULL);
if(!hwNotepadEdit)
return -1;
SendMessage(hwNotepadEdit, WM_GETTEXT, (WPARAM)1024, (LPARAM)szTextBox);
OutputDebugStringA(szTextBox);
}
Další možnost je zásah do aplikace pomocí assembleru, a vložit mezi určité instrukce kde probíhá nějaké zpracování výstupního textu, vložit (spíše upravit EXE je) jump instukci která přesměruje kod na tvůj vlastní kde bys provedl zalogování výstupního textu, a poté po zpracování vloženého kodu opět navrátil na nadcházející instukce abyse nenarušil chod aplikace. Ale tento způsob je pro zkušené mistry.
.... Sekvence zpracování textu
-- jmp mujUsek (push eax)
Navrat
.......
mujUsek:
mov Zasobnik, Text
call FceZapis
push eax
jmp Navrat
to "odskočení jinam" se v assembleru nejlépe udělá jako volání podprogramu. Instrukce mívá tvar CALL addr nebo CALL rel. addr. Návrat pak pomocí RET.
hu
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku