damos 0 Posted April 14 I am running ShellExecute(0, 'open', 'ms-paint:', PChar(FilePath), nil, SW_SHOWNORMAL) , Paint 3D is open but the file is missing ??? , with mspaint is working or other painting program What is the correct command ??? Thank you Vagelis Bekyros Share this post Link to post
David Hoyle 68 Posted April 14 A couple of things to check: 1) are you providing the full path to the file? 2) If there are any spaces in the path, it needs to be enclosed in double-quotes. You should also be able to check the return value to understand if there are errors. Share this post Link to post
David Heffernan 2330 Posted April 14 Why are you using ShellExecute. That's a deprecated function that used to be used to execute shell actions, but has been replaced by ShellExecuteEx. If you want to execute a specific program why aren't you using CreateProcess? Share this post Link to post
damos 0 Posted April 14 procedure OpenImageWithPaint3D(const FilePath: string); var StartupInfo: TStartupInfo; ProcessInfo: TProcessInformation; AppName: string; CreateOK: Boolean; begin // ShellExecute(0, 'open', 'ms-paint:', PChar(FilePath +' /ForceBootstrapPaint3D'), nil, SW_SHOWNORMAL); // ShellExecute(0, 'open', 'mspaint', PChar(FilePath), nil, SW_SHOWNORMAL); AppName := 'mspaint'; ZeroMemory(@StartupInfo, SizeOf(TStartupInfo)); StartupInfo.cb := SizeOf(TStartupInfo); StartupInfo.dwFlags := STARTF_USESHOWWINDOW; StartupInfo.wShowWindow := SW_SHOWNORMAL; CreateOK := CreateProcess(nil, PChar(AppName + ' ' + FilePath), nil, nil, False, 0, nil, nil, StartupInfo, ProcessInfo); if CreateOK then begin // Successfully created the process CloseHandle(ProcessInfo.hThread); CloseHandle(ProcessInfo.hProcess); end else begin // Failed to create the process MsgInformation('Failed to open the file with Paint 3D.'); end; end; This function is working for mspaint Paint 3D is a modern app, which doesn't use executables like older classic applications. With var AppName what i use ???? Share this post Link to post
aehimself 391 Posted April 14 Based on this, you can use the old paint.exe to force-launch the new Paint 3D: mspaint "C:\TEMP\A.jpg" /ForceBootstrapPaint3D As far as I know though even "modern" apps have executables they just reside in unimaginable places somewhere under your local appdata folder. Unfortunately though I can not confirm this as Paint 3D is one of the first things I uninstall from a new Windows 🙂 Share this post Link to post