2

Notepad ++で現在開いているファイルの最終変更の日付と時刻を表示することは可能ですか?ステータスバーなどに、その情報が常に表示されていると便利です。

WindowsXPSP3でNotepad++v5.9.3(UNICODE)を使用しています。

4

1 に答える 1

1

C#コンソールアプリ; 私が持っているのはそれだけで、これが欲しいので、私はこれを5分で書きました。かわいくないですが、今のところ私ができる限り良いです。それは少なくとも出発点です。

Notepad++の最終更新日

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Notepadd___DateModified
{
    class Program
    {
        [DllImport("user32.dll", SetLastError = true)]
        static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);

         [DllImport("user32.dll", EntryPoint = "SendMessage", CharSet = System.Runtime.InteropServices.CharSet.Auto)] 
        public static extern bool SendMessage(IntPtr hWnd, uint Msg, int wParam, StringBuilder lParam);

        [DllImport("user32.dll", SetLastError = true)]
        public static extern IntPtr SendMessage(int hWnd, int Msg, int wparam, int lparam);

        [DllImport("user32.dll")]
        public static extern int SendMessage(IntPtr hWnd, int msg, int Param, string s);

        const int WM_GETTEXT = 0x000D;
        const int WM_SETTEXT = 0x000c;
        const int WM_GETTEXTLENGTH = 0x000E;

        static void Main(string[] args)
        {
            while (true)
            {

                foreach (Process p in Process.GetProcessesByName("Notepad++"))
                {
                    if (p.Id != Process.GetCurrentProcess().Id)
                    {
                        try
                        {
                            DateTime LastModified = Directory.GetLastWriteTime(p.MainWindowTitle.Replace(" - Notepad++", ""));

                            IntPtr childHandle;
                            childHandle = FindWindowEx(p.MainWindowHandle, IntPtr.Zero,  "msctls_statusbar32", null);

                            StringBuilder subtitle = new StringBuilder();
                            Int32 subsize = SendMessage((int)childHandle, WM_GETTEXTLENGTH, 0, 0).ToInt32();

                            if (subsize > 0)
                            {
                                subtitle = new StringBuilder(subsize + 1);
                                SendMessage(childHandle, (int)WM_GETTEXT, subtitle.Capacity, subtitle);
                            }

                            if (!subtitle.ToString().Contains(" - Last Modified: " + LastModified.ToString()))
                            {
                                SendMessage(childHandle, WM_SETTEXT, 0, subtitle.ToString().Split(new string[] { " - Last Modified: " },StringSplitOptions.None)[0] + " - Last Modified: " + LastModified.ToString());
                                Console.Out.WriteLine(subtitle + " - Last Modified: " + LastModified.ToString());
                            }
                        }
                        catch
                        {
                            break;
                        }
                    }
                    else return;
                }
                Thread.Sleep(1000);
            }
        }
    }
}
于 2012-12-11T18:31:12.707 に答える