Ваш кастинг и выбор неверного спецификатора формата вызывает неопределенное поведение. Используйте правильные спецификаторы формата в соответствии с типом переменной:
std::sscanf(test, ":CF%04" SCNx16 "%04" SCNx16 "%04" SCNx16,
&value1, &value2, &value3);
Вся проверка ошибок пропущена, но с этого следует начать:
procedure TForm1.Button1Click(Sender: TObject);
var
Rec: TShellExecuteInfo;
const
AVerb = 'open';
AParams = '';
AFileName = 'Notepad.exe';
ADir = '';
begin
FillChar(Rec, SizeOf(Rec), #0);
Rec.cbSize := SizeOf(Rec);
Rec.fMask := SEE_MASK_NOCLOSEPROCESS;
Rec.lpVerb := PChar( AVerb );
Rec.lpFile := PChar( AfileName );
Rec.lpParameters := PChar( AParams );
Rec.lpDirectory := PChar( Adir );
Rec.nShow := SW_HIDE;
ShellExecuteEx(@Rec);
WaitForInputIdle(Rec.hProcess, 5000);
fNotepadHandle := Windows.FindWindow( 'Notepad', nil );
Windows.SetParent( fNotepadHandle, Handle );
Resize;
ShowWindow(fNotepadHandle, SW_SHOW);
end;
procedure TForm1.FormResize(Sender: TObject);
begin
if IsWindow(fNotepadHandle) then begin
SetWindowPos(fNotepadHandle, 0, 0, 0, ClientWidth, ClientHeight,
SWP_ASYNCWINDOWPOS);
end;
end;
Что вам определенно следует сделать, это перечислить окна нового процесса, а не просто использовать любой дескриптор окна, который FindWindow () возвращает.
Это будет сложно, если это вообще возможно.
Я видел подходы, которые будут работать для текстовых приложений - они обычно фиксируют стандартный вывод процесса, как он произойдет и поместит его в текстовый элемент управления.
Но вы говорите о полноценном графическом приложении (Блокнот, несмотря на работу с текстом, отображением пикселей, а не кодов символов).
Так что, если Блокнот не предоставляет интерфейс, где вы можете:
Определенно, это клочок, но одним из вариантов является постоянный мониторинг окон Блокнота и обеспечение его постоянного наложения на область клиента форм. Это довольно ужасно, так как вы должны остановить его перемещение, изменение размера, сворачивание и т. Д., и поддерживают свой z-порядок чуть выше ваших приложений. Я бы не хотел, чтобы эти требования были у моего злейшего врага.
Задумывались ли вы об использовании элемента управления редактора, созданного специально для Delphi (или редактора ActiveX, который вы можете встроить)? Это может быть лучшим подходом.