繁体   English   中英

C++ - 从 MFC 应用程序启动记事本并将其默认标题从“无标题 - 记事本”更改为其他内容

[英]C++ - Launch Notepad from an MFC application and change its default title from "Untitled - Notepad" to something else

我在 Windows 上使用以下代码成功打开记事本实例。 如何将其默认标题从“无标题 - 记事本”更改为其他内容?

SHELLEXECUTEINFO sei = { 0 };

sei.cbSize = sizeof(SHELLEXECUTEINFO);
sei.fMask = SEE_MASK_NOCLOSEPROCESS;
sei.hwnd = my_hWnd; // this window's handle
sei.lpVerb = L"open";
sei.lpFile = L"notepad.exe";
sei.lpParameters = NULL;
sei.lpDirectory = NULL;
sei.nShow = SW_SHOW;
sei.hInstApp = NULL;

if (ShellExecuteEx(&sei))
{
    // do some other stuff...
}

Notepad.exe 中用于更改默认文件名的命令行选项集有限。 但是您可以像这样指定新文件名,如果它不存在,则会提示您将其作为新文档打开。

sei.lpFile = L"notepad.exe";
sei.lpParameters = L"\"Readme.txt\"";  

使用CreateProcess()创建记事本进程。

使用WaitForInputIdle()等待窗口变为可用。 (注意:此方法可能无法可靠运行,请遵循此建议来实施 WinEvents 方法)。

在主线程 ID(从PROCESS_INFORMATION获得EnumThreadWindows()上使用EnumThreadWindows()来获取记事本窗口句柄。

最后,在窗口句柄上使用带有WM_SETTEXT SendMessage()将窗口标题更改为您喜欢的任何内容。

BOOL CALLBACK EnumThreadWndProc(HWND hWnd, LPARAM lParam)
{
    HWND hWndNp = hWnd; 
    SendMessageW(hWndNp, WM_SETTEXT, 0, (WPARAM)L"Hello");
    return 0; // ...stop enum
}

int main() {

    STARTUPINFOW si;
    PROCESS_INFORMATION pi;
    ZeroMemory(&si, sizeof(si));
    si.cb = sizeof(si);
    ZeroMemory(&pi, sizeof(pi));

    if (!CreateProcessW(
        NULL, _tcsdup(TEXT("notepad")),
        NULL, NULL, FALSE, 0, NULL, NULL,           
        &si, &pi)           
        )
    {
        printf("CreateProcess failed (%d).\n", GetLastError());
        return 0;
    }

    if (0 == WaitForInputIdle(pi.hProcess, 5000))
    {
        EnumThreadWindows(pi.dwThreadId,
            EnumThreadWndProc, NULL);
    }
    WaitForSingleObject(pi.hProcess, INFINITE);

    CloseHandle(pi.hProcess);
    CloseHandle(pi.hThread);

    return 0;
}

这对我有用

CString strFile("C:\\test.txt");
char sz[MAX_PATH];
wsprintf(sz, "Notepad.exe %s", strFile);
WinExec(sz, SW_SHOW);

您也可以设置默认文件名或路径。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM