static void abc() { int nTickCount = 0; while (true) { System.Threading.Thread.Sleep(30); HmPromptForm.form.timer_Tick(null, null); nTickCount++; if (nTickCount % 10 == 0) { if (!HidemaruWindowInfo.IsFindWindow()) { break; } } } }
void TimerEventProcessor(Object o, EventArgs e) { // 秀丸が無いなら、終わる if (HidemaruWindowInfo.IsFindWindow()) { ; } else { string mapfilename = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + @"\HmNodeProxy.txt"; try { System.IO.File.Delete(mapfilename); } catch (Exception ex) { System.Diagnostics.Trace.WriteLine(ex.Message); } myTimer.Stop(); this.Close(); } }
public static void Main(string[] args) { // 引数が2つ必要。1番目のIPで、2番目がnodeに引き渡す.jsのファイル名 if (args.Length < 3) { return; } // 常駐秀丸以外が何も起動していなければ、何もしない。(hideの秀丸も起動しているものとする) if (!HidemaruWindowInfo.IsFindWindow()) { return; } try { // 1番めの引数にはIPが入っている50000~65535の範囲あたりを想定 int IP = int.Parse(args[0]); bool bShowWindow = int.Parse(args[2]) > 0; // 1ならtrue, 0ならfalse // IPCサーバーチャンネルの生成. serverChannel = new IpcChannel("localhost:" + IP); // リモート用として、サーバーチャンネルを登録 System.Runtime.Remoting.Channels.ChannelServices.RegisterChannel(serverChannel, false); // チャンネル名の表示. Console.WriteLine("チャンネルの名前は {0}.", serverChannel.ChannelName); // チャンネルの優先度. Console.WriteLine("チャンネルの優先度は {0}.", serverChannel.ChannelPriority); // 該当のチャンネルデータの取得. System.Runtime.Remoting.Channels.ChannelDataStore channelData = (System.Runtime.Remoting.Channels.ChannelDataStore)serverChannel.ChannelData; // チャンネルの場所表示 foreach (string uri in channelData.ChannelUris) { Console.WriteLine("チャンネルのURIは {0}.", uri); } // リモート呼び出しのため、オブジェクトを登録し、公開。サーバータイプ。シングルトン。 System.Runtime.Remoting.RemotingConfiguration.RegisterWellKnownServiceType( typeof(HmNodeRemoteObject), HmNodeRemoteObject.Name + IP + ".rem", System.Runtime.Remoting.WellKnownObjectMode.Singleton ); // チャンネルの URI を分析. string[] urls = serverChannel.GetUrlsForUri(HmNodeRemoteObject.Name + IP + ".rem"); if (urls.Length > 0) { string objectUrl = urls[0]; string objectUri; string channelUri = serverChannel.Parse(objectUrl, out objectUri); Console.WriteLine("オブジェクトの URI は {0}.", objectUri); Console.WriteLine("チェンネルの URI は {0}.", channelUri); Console.WriteLine("オブジェクトの URL は {0}.", objectUrl); } // ユーザーの入力待ち // Console.WriteLine("サーバー終了には、リターンキーを入力"); // Node.JSを、ファイル名やIPを指定して起動 ProcessNodeJS.Start(args[1], IP, bShowWindow); // ShowDialogにすることで、一種モーダルとする。(常駐秀丸以外の)秀丸が無ければ、Close()してくる。 // 外アプリからClose()した時に、正当な処理が行われるように(nodeもCloseできるように)、Formにしている。 var f = new HmNodeProxyForm(IP, bShowWindow); f.ShowDialog(); // Node.JSの終了 ProcessNodeJS.Close(); // チャンネルの解除 System.Runtime.Remoting.Channels.ChannelServices.UnregisterChannel(serverChannel); HmNodeIPCServerListManager.UpdateProcessMap(); // Console.WriteLine("サーバーを終了します。"); } catch (Exception e) { MessageBox.Show(e.Message + "ううう"); } }