Exemplo n.º 1
0
		/**
		 * 監視・変換処理を開始する
		 */
		public async void Start() {
			NotifyIcon icon = ShowNotificationIcon();
			String path = ChooseTargetFilePath();
			if (path == null) {
				icon.Visible = false;
				System.Threading.Thread.CurrentThread.Abort();
				return;
			}

			// クリスタが起動していない場合は起動を待つ
			// (クリスタの終了をトリガにしてGIFを作成するため)
			System.Diagnostics.Process.Start(path);
			while (!IsClipStudioPaintRunning()) System.Threading.Thread.Sleep(1000);

			String tmpDir = path + "$" + APP_NAME + @"\";
			Directory.CreateDirectory(tmpDir);

			// 画像の更新日時が変わっていたらプレビュー画像を書き出す(クリスタが終了するまで繰り返し)
			String lastImageSize = "";
			while (IsClipStudioPaintRunning()) {
				String imageSize = "";
				try {
					imageSize = new FileInfo(path).LastWriteTime.ToString();
				} catch (Exception e) { }
				if (imageSize != "" && imageSize != lastImageSize) {
					byte[] pngBytes = new byte[0];
					try {
						pngBytes = GetPNGDataFromLIP(path);
					} catch (Exception e) {
					}
					if (pngBytes.Length != 0) {
						File.WriteAllBytes(tmpDir + @"\" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".png", pngBytes);
						icon.Icon = GenerateCounterIcon(Directory.GetFiles(tmpDir).Length);
						lastImageSize = imageSize;
					}
				}
				System.Threading.Thread.Sleep(1000);
			}

			// GIFアニメーションを生成
			icon.Visible = false;
			ProcessDialog dialog = new ProcessDialog();
			String dstPath = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), APP_NAME + "_" + DateTime.Now.ToString("yyyyMMdd_HHmmss") + ".gif");
			dialog.Show();
			await Task.Run(() => {
				GenerateAnimationGIF(tmpDir, dstPath);
			});
			dialog.Hide();

			// キャッシュを削除
			foreach (String file in Directory.GetFiles(tmpDir)) {
				File.SetAttributes(file, FileAttributes.Normal);
				File.Delete(file);
			}
			Directory.Delete(tmpDir);

			if (File.Exists(dstPath)) {
				System.Diagnostics.Process.Start("explorer.exe", "/select, " + dstPath);
			}
			Application.Exit();
		}
Exemplo n.º 2
0
        /**
         * 監視・変換処理を開始する
         */
        public async void Start()
        {
            NotifyIcon icon = ShowNotificationIcon();
            String     path = ChooseTargetFilePath();

            if (path == null)
            {
                icon.Visible = false;
                System.Threading.Thread.CurrentThread.Abort();
                return;
            }

            // クリスタが起動していない場合は起動を待つ
            // (クリスタの終了をトリガにしてGIFを作成するため)
            System.Diagnostics.Process.Start(path);
            while (!IsClipStudioPaintRunning())
            {
                System.Threading.Thread.Sleep(1000);
            }

            String tmpDir = path + "$" + APP_NAME + @"\";

            Directory.CreateDirectory(tmpDir);

            // 画像の更新日時が変わっていたらプレビュー画像を書き出す(クリスタが終了するまで繰り返し)
            String lastImageSize = "";

            while (IsClipStudioPaintRunning())
            {
                String imageSize = "";
                try {
                    imageSize = new FileInfo(path).LastWriteTime.ToString();
                } catch (Exception e) { }
                if (imageSize != "" && imageSize != lastImageSize)
                {
                    byte[] pngBytes = new byte[0];
                    try {
                        pngBytes = GetPNGDataFromLIP(path);
                    } catch (Exception e) {
                    }
                    if (pngBytes.Length != 0)
                    {
                        File.WriteAllBytes(tmpDir + @"\" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".png", pngBytes);
                        icon.Icon     = GenerateCounterIcon(Directory.GetFiles(tmpDir).Length);
                        lastImageSize = imageSize;
                    }
                }
                System.Threading.Thread.Sleep(1000);
            }

            // GIFアニメーションを生成
            icon.Visible = false;
            ProcessDialog dialog  = new ProcessDialog();
            String        dstPath = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), APP_NAME + "_" + DateTime.Now.ToString("yyyyMMdd_HHmmss") + ".gif");

            dialog.Show();
            await Task.Run(() => {
                GenerateAnimationGIF(tmpDir, dstPath);
            });

            dialog.Hide();

            // キャッシュを削除
            foreach (String file in Directory.GetFiles(tmpDir))
            {
                File.SetAttributes(file, FileAttributes.Normal);
                File.Delete(file);
            }
            Directory.Delete(tmpDir);

            if (File.Exists(dstPath))
            {
                System.Diagnostics.Process.Start("explorer.exe", "/select, " + dstPath);
            }
            Application.Exit();
        }