winapi: un modo standard per recuperare il testo dall'editor di testo in esecuzione
Esiste un messaggio standard che può essere inviato a una finestra di un editor di testo o una determinata chiamata WinApi , che recupererà il contenuto del testo attualmente modificato?
Ad esempio, per recuperare il contenuto corrente di una finestra del Blocco note . (si presume che il testo più aggiornato non sia stato ancora scritto su un file)
Ho provato a recuperare il testo tramite l' SendMessage
utilizzo WM_GETTEXT
, WM_GETTEXTLENGTH
ma sono riuscito a recuperare solo il testo del titolo.
Risposte
In generale no, non esiste un messaggio standard per questo.
Ma il Blocco note di Windows ha un figlio "Modifica" che risponde ai messaggi WM_GETTEXT
e WM_GETTEXTLENGTH
- normalmente usati per recuperare il testo dai controlli di input.
Ecco un PoC che dimostra l'idea:
#include <iostream>
#include <vector>
#include <string.h>
#include <Windows.h>
BOOL CALLBACK enumProc(HWND hwnd, LPARAM) {
std::vector<char> buf(100);
GetClassNameA(hwnd, buf.data(), 100);
if (strcmp(buf.data(), "Notepad")) return TRUE;
hwnd = FindWindowEx(hwnd, NULL, "Edit", NULL);
if (!hwnd) return TRUE;
int textLength = SendMessageA(hwnd, WM_GETTEXTLENGTH, 0, 0) + 1;
if (textLength <= 0) return TRUE;
buf.resize(textLength);
SendMessage(hwnd, WM_GETTEXT, textLength, (LPARAM)buf.data());
std::cout << buf.data() << "\n";
return TRUE;
}
int main() {
EnumWindows(&enumProc, 0);
}
Funziona su Windows 10:
