private void Application_Startup(object sender, StartupEventArgs e) { // 設定ファイルの読み込み Item.Data = new BindingData(); // Ctrlを押しながら実行した場合、別アプリケーションで実行 if ((Keyboard.GetKeyStates(Key.LeftCtrl) & KeyStates.Down) == KeyStates.Down || (Keyboard.GetKeyStates(Key.RightCtrl) & KeyStates.Down) == KeyStates.Down) { AlternateApplication.Execute(e.Args.Length > 0 ? e.Args[0] : ""); Application.Current.Shutdown(); } // すでに起動しているプロセスに名前付きパイプを送信 mutex = new Mutex(false, "GazoView.exe"); if (!mutex.WaitOne(0, false)) { PipeMessage.Send(e.Args); Application.Current.Shutdown(); } // 引数から画像ファイル読み込み Item.ImageStore = new ImageStore(); Item.ImageStore.SetItems(e.Args); }
/// <summary> /// キー押下時イベント /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Window_PreviewKeyDown(object sender, KeyEventArgs e) { switch (e.Key) { case Key.Escape: // アプリケーション終了 Application.Current.Shutdown(); break; case Key.Left: // 一つ前の画像へ e.Handled = true; UpdateImage(-1); break; case Key.Right: // 一つ後ろの画像へ e.Handled = true; UpdateImage(1); break; case Key.Delete: // ファイルを削除 bool isShiftDown = (Keyboard.GetKeyStates(Key.LeftShift) & KeyStates.Down) == KeyStates.Down || (Keyboard.GetKeyStates(Key.RightShift) & KeyStates.Down) == KeyStates.Down; MessageBoxResult delRet = MessageBox.Show( "File Delete OK?\r\n" + Item.ImageStore.CurrentPath, "GazoView", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.Yes); if (delRet == MessageBoxResult.Yes) { DeleteImage(forceDelete: isShiftDown); } break; case Key.F: // 外部アプリケーションで画像を開く AlternateApplication.Execute(Item.ImageStore.CurrentPath); break; case Key.D: // 画像情報を表示 if (imageInfoPanel.Visibility == Visibility.Hidden) { imageInfoPanel.Visibility = Visibility.Visible; imageInfoPanel2.Visibility = Visibility.Visible; } else { imageInfoPanel.Visibility = Visibility.Hidden; imageInfoPanel2.Visibility = Visibility.Hidden; } UpdateImageInfo(); break; case Key.C: // 画像ファイルをコピー if ((Keyboard.GetKeyStates(Key.LeftCtrl) & KeyStates.Down) == KeyStates.Down || (Keyboard.GetKeyStates(Key.RightCtrl) & KeyStates.Down) == KeyStates.Down) { var clipFiles = new StringCollection(); clipFiles.Add(Item.ImageStore.CurrentPath); Clipboard.SetFileDropList(clipFiles); } break; case Key.O: // 画像ファイルの場所を開く if ((Keyboard.GetKeyStates(Key.LeftCtrl) & KeyStates.Down) == KeyStates.Down || (Keyboard.GetKeyStates(Key.RightCtrl) & KeyStates.Down) == KeyStates.Down) { using (var proc = new System.Diagnostics.Process()) { proc.StartInfo.FileName = "explorer.exe"; proc.StartInfo.Arguments = "/select, \"" + Item.ImageStore.CurrentPath + "\""; proc.Start(); } } break; case Key.R: // 拡縮モード if (Item.Data.State.ScalingMode) { ChangeScalingMode(false); ChangeTrimmingMode(false); } else if (mainImage.Source != null) { ChangeScalingMode(true); } break; case Key.T: // トリミングモード if (Item.Data.State.TrimmingMode) { ChangeTrimmingMode(false); } else if (mainImage.Source != null) { ChangeScalingMode(true); ChangeTrimmingMode(true); } break; case Key.G: // トリミング開始 if (Item.Data.State.TrimmingMode) { string trimmedPath = ImageTrimming.Cut((BitmapSource)Item.ImageStore.CurrentImageSource, Item.ImageStore.CurrentPath, lineV_left.X1 + 2, lineH_top.Y1 + 2, lineV_right.X1 - lineV_left.X1 - 4, lineH_bottom.Y1 - lineH_top.Y1 - 4); MessageBox.Show("Trim.\r\n" + trimmedPath, "GazoView", MessageBoxButton.OK, MessageBoxImage.Information); } break; } }