Sfall-ScriptEditor

Форк
0
/
SingleInstanceManager.cs 
67 строк · 2.3 Кб
1
using System;
2
using System.IO;
3
using System.Runtime.InteropServices;
4

5
namespace ScriptEditor
6
{
7
    /// <summary>
8
    /// Handles enforcing single application instance and interacting with running instance.
9
    /// </summary>
10
    public static class SingleInstanceManager
11
    {
12
        private const int HWND_BROADCAST = 0xffff;
13

14
        private static readonly string CommandLineFile = Path.Combine(Path.GetTempPath(), "commandline.txt");
15

16
        [DllImport("user32")]
17
        private static extern bool PostMessage(IntPtr hwnd, int msg, IntPtr wparam, IntPtr lparam);
18

19
        [DllImport("user32")]
20
        private static extern int RegisterWindowMessage(string message);
21

22
        public static readonly int WM_SFALL_SCRIPT_EDITOR_OPEN = RegisterWindowMessage("WM_SFALL_SCRIPT_EDITOR_4_OPEN");
23

24
        public static void SendEditorOpenMessage()
25
        {
26
            SingleInstanceManager.PostMessage(
27
                    (IntPtr)SingleInstanceManager.HWND_BROADCAST,
28
                    SingleInstanceManager.WM_SFALL_SCRIPT_EDITOR_OPEN,
29
                    IntPtr.Zero,
30
                    IntPtr.Zero);
31
        }
32

33
        /// <summary>
34
        /// Saves command line arguments for use in another instance.
35
        /// </summary>
36
        /// <param name="args"></param>
37
        public static void SaveCommandLine(string[] args)
38
        {
39
            var fullArgs = new string[args.Length];
40
            for (int i = 0; i < args.Length; i++) {
41
                fullArgs[i] = Path.IsPathRooted(args[i])
42
                    ? args[i]
43
                    : Path.GetFullPath(args[i]);
44
                File.AppendAllText(SingleInstanceManager.CommandLineFile, fullArgs[i] + Environment.NewLine);
45
            }
46
        }
47

48
        /// <summary>
49
        /// Loads command line arguments previously saved by another instance.
50
        /// </summary>
51
        /// <returns></returns>
52
        public static string[] LoadCommandLine() 
53
        {
54
            if (File.Exists(SingleInstanceManager.CommandLineFile)) {
55
                string[] read = File.ReadAllLines(SingleInstanceManager.CommandLineFile);
56
                DeleteCommandLine();
57
                return read;
58
            }
59
            return new string[0];
60
        }
61

62
        public static void DeleteCommandLine()
63
        {
64
            File.Delete(CommandLineFile);
65
        }
66
    }
67
}
68

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.