2012-12-07 6 views
8

C#から、任意のエディタでテキストファイルを開き、カーソルを特定の行番号に自動的に移動するプロセスを起動したいとします。どのエディタでテキストファイルを開き、カーソルを特定の行番号に自動的に移動するプロセスを起動するには?

私は

Process.Start(@"c:\myfile.txt"); 

を使用してファイルを開くことができますが、私は、そのファイル内の特定の場所にカーソルを移動する方法がわかりません。ソースコード付き


回答:

はい、私は非常に重く

private void openLog() { 
      try { 
       // see if notepad++ is installed on user's machine 
       var nppDir = (string)Registry.GetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\Notepad++", null, null); 
       if (nppDir != null) { 
        var nppExePath = Path.Combine(nppDir, "Notepad++.exe"); 
        var nppReadmePath = Path.Combine(yourDirectory,fileName); 
        var line = 20; 
        var sb = new StringBuilder(); 
        sb.AppendFormat("\"{0}\" -n{1}", nppReadmePath, lineNo); 
        Process.Start(nppExePath, sb.ToString()); 
       } else { 
        string newPath = @"\\mySharedDrive\notpad++\bin\notepad++.exe"; 
        Process.Start(newPath, @"\\" + filePath + " -n" + lineNo); // take exe from my shared drive 
       } 
      } catch (Exception e) { 
       Process.Start(@"\\" + FilePath); // open using notepad 
      } 
     } 
+2

私はこれが可能かもしれないと思う唯一の方法は、キーボードドライバ入力のレベルでの自動化で、エディタが押し下げられた矢印ごとに1行下がると仮定しています。そのためには、http://www.autohotkey.com/をご覧ください。 –

+1

メモ帳が無効になっている限り、メモ帳には「go to line」機能があります。それでも、キーボード入力を処理に送る必要があります。もしあなたがnotepad ++を使ってOKならば、http://superuser.com/questions/290409/opening-a-text-file-at-a-certain-line-shortcutをチェックしてください。 Notepad ++は特定の行でそれを開くコマンドライン引数を持っているようです。 –

+0

完全なソースコードを含む最終的なソリューションですか?たぶんNotepad ++とUltraEditを使っているかもしれません。 – Kiquenet

答えて

10

は、あなたがこれを行うことができ、その後、メモ帳++を取得しますカーソルを20行目にします。 StringBuilderを使用する方が、複数の追加(SOのどこかの説明)を使用するより効率的です。

+0

偉大な、これは多くのおかげで動作します。ところで、これを知っていたので、 "メモ帳++"を見つける方法も知っていると思います。exe "の場所を動的にすばやく見つけることができますか? –

+0

インストーラを使用してインストールした場合は、レジストリから取得できます:var path = Registry.GetValue(" HKEY_LOCAL_MACHINE \\ SOFTWARE \\ Notepad ++ "、null、null); –

2

++ソリューションをメモ帳を使用するプロセス/編集者がシステム上で開いているに依存します。そのエディタには、範囲の設定やカーソル位置の変更などの機能にアクセスするために使用できる開発者APIが必要です。たとえば、開いているエディタがMicrosoft Wordの場合は、Word Interop APIを使用して特定の位置に選択範囲を設定します。各エディタには独自のAPIがある(または外向きのAPIがない)ため、「任意のエディタ」でこれを行う普遍的な方法はありません。

+0

はい、おそらく魔法を求めています。 Word Interop APIをありがとう。私はそれを試してみましょう。私はラインナンバーに大きく依存しているので。私はMSWordでファイルを開くことがうまくいかないのだろうか。 –

1

おそらく、あなたは間違った方向に向かっているでしょう。私はあなたが達成しようとしているかどうかは分かりませんが、私はと思っています。は、アプリケーションにが属するエディタでテキストファイルを開くだけです。おそらく、WYSIWYGエディターコントロールを備えた別のフォーム。そうすれば、そのエディタでカーソルがどこに置かれるかを完全に制御することができます。さもなければ、実行可能なものについてはあまりにも多くの未知数があります。独自のreadme.txtファイルを開き、exeファイルとreadme.txtファイルへのパスを構築し、この例では

var nppDir = (string)Registry.GetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\Notepad++", null, null); 
    var nppExePath = Path.Combine(nppDir, "Notepad++.exe"); 
    var nppReadmePath = Path.Combine(nppDir, "readme.txt"); 
    var line = 20; 
    var sb = new StringBuilder(); 
    sb.AppendFormat("\"{0}\" -n{1}", nppReadmePath, line); 
    Process.Start(nppExePath, sb.ToString()); 

我々はレジストリからのn ++のインストールパスを取得する:

+0

すべてのネットワークサーバーのログから検索できる小さなキーワード検索ユーティリティツールを作成しています。ユーザーの要求に応じて、そのログファイルを@specific行番号で開きたいとします。私はアプリケーションを細かくして埋め込まれたコントロールの大きなログをレンダリングするのには不十分です。エレガントですか? –

+1

ログは(通常は)読み取り専用なので、関連する行(およびXを囲む行)を抽出してアプリケーションにローカルに表示することができます。テキストエディタを開くと、過度の攻撃のように聞こえます。 –

関連する問題