Notifying a message in Action center.
Revisão | 4e0cef5a53eb07356dfc0c83047cc7a121ddcbb7 (tree) |
---|---|
Hora | 2015-09-11 12:48:47 |
Autor | JeffyTS <JeffyTS@outl...> |
Commiter | JeffyTS |
Enabled GO NoGUI but diplaying an error message and going on running.
@@ -161,6 +161,12 @@ namespace CtrlVix | ||
161 | 161 | { |
162 | 162 | // NOP |
163 | 163 | } |
164 | + // for Player 12.0.0 NOGUI させたとき VIX_E_CANCELLEDはメッセージは表示するがエラーとはしない | |
165 | + else if ((powerOP == Constants.POWEROP.POWER_ON_NOGUI) && | |
166 | + (IVixLib.ErrorCode(err) == VixCOM.Constants.VIX_E_CANCELLED)) | |
167 | + { | |
168 | + ErrMessage(err); | |
169 | + } | |
164 | 170 | else |
165 | 171 | { |
166 | 172 | // Error Handler |
@@ -727,6 +733,109 @@ namespace CtrlVix | ||
727 | 733 | #endif |
728 | 734 | switch (err) |
729 | 735 | { |
736 | +#if !DEBUG | |
737 | + case VixCOM.Constants.VIX_E_FAIL: // 1 | |
738 | + errMsg = "VIX_E_FAIL"; | |
739 | + break; | |
740 | + case VixCOM.Constants.VIX_E_OUT_OF_MEMORY: // 2 | |
741 | + errMsg = "VIX_E_OUT_OF_MEMORY"; | |
742 | + break; | |
743 | + case VixCOM.Constants.VIX_E_INVALID_ARG: // 3 | |
744 | + errMsg = "VIX_E_INVALID_ARG"; | |
745 | + break; | |
746 | + case VixCOM.Constants.VIX_E_FILE_NOT_FOUND: // 4 | |
747 | + errMsg = "VIX_E_FILE_NOT_FOUND"; | |
748 | + break; | |
749 | + case VixCOM.Constants.VIX_E_OBJECT_IS_BUSY: // 5 | |
750 | + errMsg = "VIX_E_OBJECT_IS_BUSY"; | |
751 | + break; | |
752 | + case VixCOM.Constants.VIX_E_NOT_SUPPORTED: // 6 | |
753 | + errMsg = "VIX_E_NOT_SUPPORTED"; | |
754 | + break; | |
755 | + case VixCOM.Constants.VIX_E_FILE_ERROR: // 7 | |
756 | + errMsg = "VIX_E_FILE_ERROR"; | |
757 | + break; | |
758 | + case VixCOM.Constants.VIX_E_DISK_FULL: // 8 | |
759 | + errMsg = "VIX_E_DISK_FULL"; | |
760 | + break; | |
761 | + case VixCOM.Constants.VIX_E_INCORRECT_FILE_TYPE: // 9 | |
762 | + errMsg = "VIX_E_INCORRECT_FILE_TYPE"; | |
763 | + break; | |
764 | +#endif | |
765 | + case VixCOM.Constants.VIX_E_CANCELLED: // 10 | |
766 | + errMsg = "Operation cancelled."; | |
767 | + break; | |
768 | +#if !DEBUG | |
769 | + case VixCOM.Constants.VIX_E_FILE_READ_ONLY: // 11 | |
770 | + errMsg = "VIX_E_FILE_READ_ONLY"; | |
771 | + break; | |
772 | + case VixCOM.Constants.VIX_E_FILE_ALREADY_EXISTS: // 12 | |
773 | + errMsg = "VIX_E_FILE_ALREADY_EXISTS"; | |
774 | + break; | |
775 | + case VixCOM.Constants.VIX_E_FILE_ACCESS_ERROR: // 13 | |
776 | + errMsg = "VIX_E_FILE_ACCESS_ERROR"; | |
777 | + break; | |
778 | + case VixCOM.Constants.VIX_E_REQUIRES_LARGE_FILES: // 14 | |
779 | + errMsg = "VIX_E_REQUIRES_LARGE_FILES"; | |
780 | + break; | |
781 | + case VixCOM.Constants.VIX_E_FILE_ALREADY_LOCKED: // 15 | |
782 | + errMsg = "VIX_E_FILE_ALREADY_LOCKED"; | |
783 | + break; | |
784 | + case VixCOM.Constants.VIX_E_VMDB: // 16 | |
785 | + errMsg = "VIX_E_VMDB"; | |
786 | + break; | |
787 | + case VixCOM.Constants.VIX_E_NOT_SUPPORTED_ON_REMOTE_OBJECT: // 20 | |
788 | + errMsg = "VIX_E_NOT_SUPPORTED_ON_REMOTE_OBJECT"; | |
789 | + break; | |
790 | + case VixCOM.Constants.VIX_E_FILE_TOO_BIG: // 21 | |
791 | + errMsg = "VIX_E_FILE_TOO_BIG"; | |
792 | + break; | |
793 | + case VixCOM.Constants.VIX_E_FILE_NAME_INVALID: // 22 | |
794 | + errMsg = "VIX_E_FILE_NAME_INVALID"; | |
795 | + break; | |
796 | + case VixCOM.Constants.VIX_E_ALREADY_EXISTS: // 23 | |
797 | + errMsg = "VIX_E_ALREADY_EXISTS"; | |
798 | + break; | |
799 | + case VixCOM.Constants.VIX_E_BUFFER_TOOSMALL: // 24 | |
800 | + errMsg = "VIX_E_BUFFER_TOOSMALL"; | |
801 | + break; | |
802 | + case VixCOM.Constants.VIX_E_OBJECT_NOT_FOUND: // 25 | |
803 | + errMsg = "VIX_E_OBJECT_NOT_FOUND"; | |
804 | + break; | |
805 | + case VixCOM.Constants.VIX_E_HOST_NOT_CONNECTED: // 26 | |
806 | + errMsg = "VIX_E_HOST_NOT_CONNECTED"; | |
807 | + break; | |
808 | + case VixCOM.Constants.VIX_E_INVALID_UTF8_STRING: // 27 | |
809 | + errMsg = "VIX_E_INVALID_UTF8_STRING"; | |
810 | + break; | |
811 | + case VixCOM.Constants.VIX_E_OPERATION_ALREADY_IN_PROGRESS: // 31 | |
812 | + errMsg = "VIX_E_OPERATION_ALREADY_IN_PROGRESS"; | |
813 | + break; | |
814 | + case VixCOM.Constants.VIX_E_UNFINISHED_JOB: // 29 | |
815 | + errMsg = "VIX_E_UNFINISHED_JOB"; | |
816 | + break; | |
817 | + case VixCOM.Constants.VIX_E_NEED_KEY: // 30 | |
818 | + errMsg = "VIX_E_NEED_KEY"; | |
819 | + break; | |
820 | + case VixCOM.Constants.VIX_E_LICENSE: // 32 | |
821 | + errMsg = "VIX_E_LICENSE"; | |
822 | + break; | |
823 | + case VixCOM.Constants.VIX_E_VM_HOST_DISCONNECTED: // 34 | |
824 | + errMsg = "VIX_E_VM_HOST_DISCONNECTED"; | |
825 | + break; | |
826 | + case VixCOM.Constants.VIX_E_AUTHENTICATION_FAIL: // 35 | |
827 | + errMsg = "VIX_E_AUTHENTICATION_FAIL"; | |
828 | + break; | |
829 | + case VixCOM.Constants.VIX_E_HOST_CONNECTION_LOST: // 36 | |
830 | + errMsg = "VIX_E_HOST_CONNECTION_LOST"; | |
831 | + break; | |
832 | + case VixCOM.Constants.VIX_E_DUPLICATE_NAME: // 41 | |
833 | + errMsg = "ConVIX_E_DUPLICATE_NAME"; | |
834 | + break; | |
835 | + case VixCOM.Constants.VIX_E_ARGUMENT_TOO_BIG: // 44 | |
836 | + errMsg = "VIX_E_ARGUMENT_TOO_BIG"; | |
837 | + break; | |
838 | +#endif | |
730 | 839 | case VixCOM.Constants.VIX_E_TIMEOUT_WAITING_FOR_TOOLS: // 3000 |
731 | 840 | errMsg = "Power operation has not been able to be completed."; |
732 | 841 | break; |
@@ -27,8 +27,7 @@ namespace VMwPlayerTaskTray | ||
27 | 27 | " " + PROGRAM_NAME + ".exe [opt] \"FullPath.vmx\"\r\n" + |
28 | 28 | "\r\n" + |
29 | 29 | " Option:\r\n" + |
30 | - // for Player 12 " /gui | /nogui | (none)"; | |
31 | - " /gui | (none)\r\n" + | |
30 | + " /gui | /nogui | (none)\r\n" + | |
32 | 31 | " /pos num_left num_top"; |
33 | 32 | private const string MSG_RUN_DUP = PROGRAM_NAME + " has been already running with \r\n" + |
34 | 33 | "same guest OS.\r\n" + |
@@ -78,12 +77,10 @@ namespace VMwPlayerTaskTray | ||
78 | 77 | { |
79 | 78 | VMControl(VMCTRL.GO_GUI); |
80 | 79 | } |
81 | - /**** for Player 12 | |
82 | 80 | else if (Program.startMode == "/nogui") |
83 | 81 | { |
84 | 82 | VMControl(VMCTRL.GO_NOGUI); |
85 | 83 | } |
86 | - ****/ | |
87 | 84 | else |
88 | 85 | { |
89 | 86 | this.timer_MainForm.Enabled = true; // Timerを有効にする |
@@ -101,7 +98,7 @@ namespace VMwPlayerTaskTray | ||
101 | 98 | { |
102 | 99 | this.timer_MainForm.Enabled = false; // Timerを無効にする |
103 | 100 | #if DEBUG |
104 | - Debug.WriteLine("Timer Thread : Start"); | |
101 | + //Debug.WriteLine("Timer Thread : Start"); | |
105 | 102 | #endif |
106 | 103 | ChangeMenuItem(vmxFilePath); // VMwareの動作状態をチェックしMenuItemの表示を切り替える |
107 | 104 | if (vmState == VMSTATE.ERROR) |
@@ -111,7 +108,7 @@ namespace VMwPlayerTaskTray | ||
111 | 108 | Application.Exit(); // アプリケーション終了 |
112 | 109 | } |
113 | 110 | #if DEBUG |
114 | - Debug.WriteLine("Timer Thread : Finish"); | |
111 | + //Debug.WriteLine("Timer Thread : Finish"); | |
115 | 112 | #endif |
116 | 113 | this.timer_MainForm.Enabled = true; // Timerを有効にする |
117 | 114 | } |
@@ -27,8 +27,7 @@ namespace VMwPlayerTaskTray | ||
27 | 27 | " " + PROGRAM_NAME + ".exe [opt] \"FullPath.vmx\"\r\n" + |
28 | 28 | "\r\n" + |
29 | 29 | " Option:\r\n" + |
30 | - // for Player 12 " /gui | /nogui | (none)"; | |
31 | - " /gui | (none)\r\n" + | |
30 | + " /gui | /nogui | (none)\r\n" + | |
32 | 31 | " /pos left top | (none)"; |
33 | 32 | private const string MSG_VIX_ERR = "A fatal error has occured inside VIX.\r\n" + |
34 | 33 | "Exiting " + PROGRAM_NAME + "..."; |
@@ -173,10 +172,14 @@ namespace VMwPlayerTaskTray | ||
173 | 172 | { |
174 | 173 | case VMCTRL.GO_GUI: |
175 | 174 | case VMCTRL.GO_NOGUI: |
176 | - while ((state = Vix.GetVMState(vmxFilePath)) != CtrlVix.Constants.VMSTATE.POWERED_ON) | |
175 | + for(int i = 0; i < 10; i++) | |
177 | 176 | { |
178 | - if (state == CtrlVix.Constants.VMSTATE.ERROR) return false; | |
179 | - System.Threading.Thread.Sleep(3000); | |
177 | + if ((state = Vix.GetVMState(vmxFilePath)) != CtrlVix.Constants.VMSTATE.POWERED_ON) | |
178 | + { | |
179 | + if (state == CtrlVix.Constants.VMSTATE.ERROR) return false; | |
180 | + System.Threading.Thread.Sleep(3000); | |
181 | + } | |
182 | + else break; | |
180 | 183 | } |
181 | 184 | if (mode == VMCTRL.GO_GUI && Program.moveWindow == true) // GO_GUIの時だけPlayer Windowを移動する |
182 | 185 | { |
@@ -193,13 +196,17 @@ namespace VMwPlayerTaskTray | ||
193 | 196 | System.Threading.Thread.Sleep(3000); |
194 | 197 | break; |
195 | 198 | case VMCTRL.GO_SUSPEND: |
196 | - while (((state = Vix.GetVMState(vmxFilePath)) != CtrlVix.Constants.VMSTATE.POWERED_OFF) | |
199 | + for (int i = 0; i < 10; i++) | |
200 | + { | |
201 | + if (((state = Vix.GetVMState(vmxFilePath)) != CtrlVix.Constants.VMSTATE.POWERED_OFF) | |
197 | 202 | && ((pwOff = Vix.CheckPowerOffMode(vmxFilePath)) |
198 | 203 | != CtrlVix.Constants.POWER_OFF_MODE.SUSPENDED)) |
199 | - { | |
200 | - if (state == CtrlVix.Constants.VMSTATE.ERROR) return false; | |
201 | - if (pwOff == CtrlVix.Constants.POWER_OFF_MODE.ERROR) return false; | |
202 | - System.Threading.Thread.Sleep(3000); | |
204 | + { | |
205 | + if (state == CtrlVix.Constants.VMSTATE.ERROR) return false; | |
206 | + if (pwOff == CtrlVix.Constants.POWER_OFF_MODE.ERROR) return false; | |
207 | + System.Threading.Thread.Sleep(3000); | |
208 | + } | |
209 | + else break; | |
203 | 210 | } |
204 | 211 | break; |
205 | 212 | case VMCTRL.GO_ACPI_POWER_OFF: |
@@ -339,12 +346,11 @@ namespace VMwPlayerTaskTray | ||
339 | 346 | |
340 | 347 | aboutToolStripMenuItem.Enabled = true; // Aboutは常に表示 |
341 | 348 | exitToolStripMenuItem.Enabled = true; // Exitは常に表示 |
342 | - ToolStripMenuItem_GoNoGUI.Enabled = false; // GoNoGUIは常に表示しない for Player 12.0 | |
343 | 349 | switch (mode) |
344 | 350 | { |
345 | 351 | case MENU_MODE.RUNNING_GUI: |
346 | 352 | ToolStripMenuItem_GoGUI.Enabled = false; |
347 | - // for Player 12.0 ToolStripMenuItem_GoNoGUI.Enabled = true; | |
353 | + ToolStripMenuItem_GoNoGUI.Enabled = true; | |
348 | 354 | ToolStripMenuItem_GoSuspend.Enabled = true; |
349 | 355 | ToolStripMenuItem_OtherCommand.Enabled = true; |
350 | 356 | this.notifyIcon_MainForm.Text = "Running as GUI - " + vmxName; |
@@ -353,7 +359,7 @@ namespace VMwPlayerTaskTray | ||
353 | 359 | break; |
354 | 360 | case MENU_MODE.RUNNING_NOGUI: |
355 | 361 | ToolStripMenuItem_GoGUI.Enabled = true; |
356 | - // for Player 12.0 ToolStripMenuItem_GoNoGUI.Enabled = false; | |
362 | + ToolStripMenuItem_GoNoGUI.Enabled = false; | |
357 | 363 | ToolStripMenuItem_GoSuspend.Enabled = true; |
358 | 364 | ToolStripMenuItem_OtherCommand.Enabled = true; |
359 | 365 | this.notifyIcon_MainForm.Text = "Running as NoGUI - " + vmxName; |
@@ -362,7 +368,7 @@ namespace VMwPlayerTaskTray | ||
362 | 368 | break; |
363 | 369 | case MENU_MODE.PROCESSING: |
364 | 370 | ToolStripMenuItem_GoGUI.Enabled = false; |
365 | - // for Player 12.0 ToolStripMenuItem_GoNoGUI.Enabled = false; | |
371 | + ToolStripMenuItem_GoNoGUI.Enabled = false; | |
366 | 372 | ToolStripMenuItem_GoSuspend.Enabled = false; |
367 | 373 | ToolStripMenuItem_OtherCommand.Enabled = false; |
368 | 374 | this.notifyIcon_MainForm.Text = "Processing - " + vmxName; |
@@ -371,7 +377,7 @@ namespace VMwPlayerTaskTray | ||
371 | 377 | break; |
372 | 378 | case MENU_MODE.SUSPENDED: |
373 | 379 | ToolStripMenuItem_GoGUI.Enabled = true; |
374 | - // for Player 12.0 ToolStripMenuItem_GoNoGUI.Enabled = true; | |
380 | + ToolStripMenuItem_GoNoGUI.Enabled = true; | |
375 | 381 | ToolStripMenuItem_GoSuspend.Enabled = false; |
376 | 382 | ToolStripMenuItem_OtherCommand.Enabled = false; |
377 | 383 | this.notifyIcon_MainForm.Text = "Suspended - " + vmxName; |
@@ -380,7 +386,7 @@ namespace VMwPlayerTaskTray | ||
380 | 386 | break; |
381 | 387 | case MENU_MODE.POWERED_OFF: |
382 | 388 | ToolStripMenuItem_GoGUI.Enabled = true; |
383 | - // for Player 12.0 ToolStripMenuItem_GoNoGUI.Enabled = true; | |
389 | + ToolStripMenuItem_GoNoGUI.Enabled = true; | |
384 | 390 | ToolStripMenuItem_GoSuspend.Enabled = false; |
385 | 391 | ToolStripMenuItem_OtherCommand.Enabled = false; |
386 | 392 | this.notifyIcon_MainForm.Text = "Powered OFF - " + vmxName; |
@@ -389,7 +395,7 @@ namespace VMwPlayerTaskTray | ||
389 | 395 | break; |
390 | 396 | case MENU_MODE.CANNOT_DEFINE_RUNNING_MODE: |
391 | 397 | ToolStripMenuItem_GoGUI.Enabled = false; |
392 | - // for Player 12.0 ToolStripMenuItem_GoNoGUI.Enabled = false; | |
398 | + ToolStripMenuItem_GoNoGUI.Enabled = false; | |
393 | 399 | ToolStripMenuItem_GoSuspend.Enabled = true; |
394 | 400 | ToolStripMenuItem_OtherCommand.Enabled = true; |
395 | 401 | this.notifyIcon_MainForm.Text = "Running as ether GUI/NoGUI - " + vmxName; |
@@ -399,7 +405,7 @@ namespace VMwPlayerTaskTray | ||
399 | 405 | break; |
400 | 406 | case MENU_MODE.NO_VMXFILE: |
401 | 407 | ToolStripMenuItem_GoGUI.Enabled = false; |
402 | - // for Player 12.0 ToolStripMenuItem_GoNoGUI.Enabled = false; | |
408 | + ToolStripMenuItem_GoNoGUI.Enabled = false; | |
403 | 409 | ToolStripMenuItem_GoSuspend.Enabled = false; |
404 | 410 | ToolStripMenuItem_OtherCommand.Enabled = false; |
405 | 411 | this.notifyIcon_MainForm.Text = "Can't find vmx file - " + vmxName; |
@@ -410,7 +416,7 @@ namespace VMwPlayerTaskTray | ||
410 | 416 | case MENU_MODE.ERROR: |
411 | 417 | default: |
412 | 418 | ToolStripMenuItem_GoGUI.Enabled = false; |
413 | - // for Player 12.0 ToolStripMenuItem_GoNoGUI.Enabled = false; | |
419 | + ToolStripMenuItem_GoNoGUI.Enabled = false; | |
414 | 420 | ToolStripMenuItem_GoSuspend.Enabled = false; |
415 | 421 | ToolStripMenuItem_OtherCommand.Enabled = false; |
416 | 422 | this.notifyIcon_MainForm.Text = "Error - " + vmxName; |
@@ -505,7 +511,7 @@ namespace VMwPlayerTaskTray | ||
505 | 511 | |
506 | 512 | if (pid != 0) |
507 | 513 | { |
508 | - if (move_window(pid, left, top)) // Windowを移動する | |
514 | + if (move_window(pid, left, top, "VMPlayerFrame")) // Windowを移動する | |
509 | 515 | { |
510 | 516 | return true; |
511 | 517 | } |
@@ -535,7 +541,7 @@ namespace VMwPlayerTaskTray | ||
535 | 541 | [System.Runtime.InteropServices.DllImport("user32.dll")] private extern static IntPtr FindWindowEx(IntPtr hWndParent, IntPtr hWndChildAfter, String lpszClass, String lpszWindow); |
536 | 542 | |
537 | 543 | // 指定したPIDのWindowを移動させる |
538 | - private bool move_window(int pid, int left, int top) | |
544 | + private bool move_window(int pid, int left, int top, string classname) | |
539 | 545 | { |
540 | 546 | RECT rect = new RECT(); |
541 | 547 | rect.Left = 0; rect.Top = 0; rect.Right = 0; rect.Bottom = 0; |
@@ -543,7 +549,7 @@ namespace VMwPlayerTaskTray | ||
543 | 549 | IntPtr hWnd = IntPtr.Zero; |
544 | 550 | IntPtr hWndChildAfter = IntPtr.Zero; |
545 | 551 | |
546 | - if ((hWnd = getHwndFromPid(pid)) == IntPtr.Zero) | |
552 | + if ((hWnd = getHwndFromPid(pid, classname)) == IntPtr.Zero) | |
547 | 553 | { |
548 | 554 | return false; |
549 | 555 | } |
@@ -568,15 +574,16 @@ namespace VMwPlayerTaskTray | ||
568 | 574 | } |
569 | 575 | |
570 | 576 | // プロセスID(pid)をウィンドウハンドル(hWnd)に変換する |
571 | - private IntPtr getHwndFromPid(int pid) | |
577 | + private IntPtr getHwndFromPid(int pid, string classname) | |
572 | 578 | { |
573 | 579 | IntPtr hWnd; |
574 | 580 | const int GW_HWNDNEXT = 2; // for GetWindow() |
575 | 581 | // GetAncestor() |
576 | 582 | // const uint GA_PARENT = 1; |
577 | 583 | // const uint GA_ROOT = 2; |
578 | - const uint GA_ROOTOWNER = 3; | |
579 | - IntPtr parent = IntPtr.Zero, root = IntPtr.Zero, rootowner=IntPtr.Zero; | |
584 | + // const uint GA_ROOTOWNER = 3; | |
585 | + // IntPtr parent = IntPtr.Zero, root = IntPtr.Zero, rootowner=IntPtr.Zero; | |
586 | + StringBuilder csb = new StringBuilder(256); | |
580 | 587 | |
581 | 588 | hWnd = FindWindow(null, null); |
582 | 589 | while (hWnd != IntPtr.Zero) |
@@ -585,13 +592,21 @@ namespace VMwPlayerTaskTray | ||
585 | 592 | { |
586 | 593 | if (pid == getPidFromHwnd(hWnd)) |
587 | 594 | { |
588 | - // return hWnd | |
589 | - return rootowner; // 現在のではなくてひとつ前のroot ownerを返す | |
595 | + GetClassName(hWnd, csb, csb.Capacity); | |
596 | + if (0 <= csb.ToString().IndexOf(classname)) | |
597 | + { | |
598 | +#if DEBUG | |
599 | + | |
600 | + Debug.WriteLine("ClassName = " + csb.ToString()); | |
601 | +#endif | |
602 | + return hWnd; | |
603 | + } | |
604 | + //return rootowner; // 現在のではなくてひとつ前のroot ownerを返す | |
590 | 605 | } |
591 | 606 | } |
592 | 607 | // parent = GetAncestor(hWnd, GA_PARENT); |
593 | 608 | // root = GetAncestor(hWnd, GA_ROOT); |
594 | - rootowner = GetAncestor(hWnd, GA_ROOTOWNER); | |
609 | + // rootowner = GetAncestor(hWnd, GA_ROOTOWNER); | |
595 | 610 | hWnd = GetWindow(hWnd, GW_HWNDNEXT); |
596 | 611 | } |
597 | 612 | return IntPtr.Zero; |
@@ -32,5 +32,5 @@ using System.Runtime.InteropServices; | ||
32 | 32 | // すべての値を指定するか、下のように '*' を使ってビルドおよびリビジョン番号を |
33 | 33 | // 既定値にすることができます: |
34 | 34 | // [assembly: AssemblyVersion("1.0.*")] |
35 | -[assembly: AssemblyVersion("1.1.4.*")] | |
36 | -[assembly: AssemblyFileVersion("1.1.4.0")] | |
35 | +[assembly: AssemblyVersion("1.1.5.*")] | |
36 | +[assembly: AssemblyFileVersion("1.1.5.0")] |
@@ -49,6 +49,7 @@ Rlease & modify | ||
49 | 49 | Visual Studio Community 2015 |
50 | 50 | Windows10 Professional 64bit. |
51 | 51 | 2015/09/10 1.1.4 Add /pos option, changed Icons. |
52 | + 2015/09/11 1.1.5 Enabled GO NoGUI but diplaying an error message and going on running. | |
52 | 53 | |
53 | 54 | |
54 | 55 |