NPPM_DOOPEN: wrong return value

  • The message NPPM_DOOPEN is declared as:

    #define NPPM_DOOPEN (NPPMSG + 77)
    // BOOL NPPM_DOOPEN(0, const TCHAR *fullPathName2Open)
    // fullPathName2Open indicates the full file path name to be opened.
    // The return value is TRUE (1) if the operation is successful, otherwise FALSE (0).

    The return value is correct when fullPathName2Open is a file (path)name.
    If, however, the fullPathName2Open is a folder, Notepad++ does open all the files from this folder, but NPPM_DOOPEN returns 0 !

  • I can at least confirm I am seeing the same behavior as you.

    As a side note: the “documentation” in that file has more than a few errors if you actually compare them to the code :)

  • OK, I’ve found how to deal with it. At least, it’s one of possible solutions:

    int nFiles = (int) SendNppMsg(NPPM_GETNBOPENFILES, 0, 0);
    if ( !SendNppMsg(NPPM_DOOPEN, (WPARAM) 0, (LPARAM) params.c_str()) )
        nCmdResult = CMDRESULT_FAILED;
        DWORD dwAttr = ::GetFileAttributes(params.c_str());
        if ( (dwAttr != INVALID_FILE_ATTRIBUTES) &&
            // NPPM_DOOPEN unexpectedly returns 0 when a folder is specified
            // as its argument, though in fact it does open all the files
            // from that folder.
            int nFilesNow = (int) SendNppMsg(NPPM_GETNBOPENFILES, 0, 0);
            if ( nFilesNow != nFiles )
                nCmdResult = CMDRESULT_SUCCEEDED;

Log in to reply