C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[14]: notepadを行指定で開く


(過去ログ 39 を表示中)

[トピック内 16 記事 (1 - 16 表示)]  << 0 >>

■19763 / inTopicNo.1)  notepadを行指定で開く
  
□投稿者/ 小春 (21回)-(2008/05/29(Thu) 17:22:49)

分類:[C#] 

お世話になっております。

Process hProcess = Process.Start("notepad.exe")
を使用し、行を指定して、notepadを開くようにしたいのですが、
どのような方法があるのでしょうか?

宜しくお願い致します。

引用返信 編集キー/
■19764 / inTopicNo.2)  Re[1]: notepadを行指定で開く
□投稿者/ 鶏唐揚 (173回)-(2008/05/29(Thu) 17:28:15)
No19763 (小春 さん) に返信
> お世話になっております。
>
> Process hProcess = Process.Start("notepad.exe")
> を使用し、行を指定して、notepadを開くようにしたいのですが、
> どのような方法があるのでしょうか?
>
> 宜しくお願い致します。
>
テキストファイルをNotepadで開かせてから、特定行を選択させたいということでしょうか?
それだと、SendMessage等のWinAPIを駆使しないとできないかもしれません。
引用返信 編集キー/
■19766 / inTopicNo.3)  Re[2]: notepadを行指定で開く
□投稿者/ 小春 (23回)-(2008/05/29(Thu) 17:33:30)
No19764 (鶏唐揚 さん) に返信
> ■No19763 (小春 さん) に返信
>>お世話になっております。
>>
>>Process hProcess = Process.Start("notepad.exe")
>>を使用し、行を指定して、notepadを開くようにしたいのですが、
>>どのような方法があるのでしょうか?
>>
>>宜しくお願い致します。
>>
> テキストファイルをNotepadで開かせてから、特定行を選択させたいということでしょうか?
> それだと、SendMessage等のWinAPIを駆使しないとできないかもしれません。

ご返信ありがとうございます。
特定行を選択させられれば理想ですね。
でも、とりあえずはProcessクラスからnotepadを開いた時点で、
指定した行が初期表示されるといった感じでいいです。

notepad の引数があるのか調べてますけど、notepad の引数が書いてあるページまで
たどり着けません…。
引用返信 編集キー/
■19767 / inTopicNo.4)  Re[3]: notepadを行指定で開く
□投稿者/ bad14mg (5回)-(2008/05/29(Thu) 17:50:20)
> notepad の引数があるのか調べてますけど、notepad の引数が書いてあるページまで
> たどり着けません…。

行指定で開くことはできないのでは。
というか、第一引数(ファイルパス)しかないのではないでしょうか。
テキスト比較ツールのDFでは、比較中のファイルを外部エディタで
開くことが出来るのですが、設定で外部エディタを指定できるようになっています。
デフォルトではメモ帳となっており
『notepad.exe %p』 と設定されています。

注意書きとして以下のように記載されています。
起動時の引数として
ファイルパスは %P , ファイルの行は %L で指定できます。
( 例:秀丸: C:\..\Hidemaru.exe /j%L %P )

引用返信 編集キー/
■19770 / inTopicNo.5)  Re[4]: notepadを行指定で開く
□投稿者/ 小春 (24回)-(2008/05/29(Thu) 18:06:45)
No19767 (bad14mg さん) に返信
>>notepad の引数があるのか調べてますけど、notepad の引数が書いてあるページまで
>>たどり着けません…。
>
> 行指定で開くことはできないのでは。
> というか、第一引数(ファイルパス)しかないのではないでしょうか。
> テキスト比較ツールのDFでは、比較中のファイルを外部エディタで
> 開くことが出来るのですが、設定で外部エディタを指定できるようになっています。
> デフォルトではメモ帳となっており
> 『notepad.exe %p』 と設定されています。
>
> 注意書きとして以下のように記載されています。
> 起動時の引数として
> ファイルパスは %P , ファイルの行は %L で指定できます。
> ( 例:秀丸: C:\..\Hidemaru.exe /j%L %P )

ご返信ありがとうございます。
秀丸では、
Process hProcess = Process.Start(@"C:\\..\\Hidemaru.exe", "/j50 C:\\..\\hoge.txt")
で実現できました。
notepadでは、無理っぽいですね。
もう少し調べてから解決済みにします。

引用返信 編集キー/
■19794 / inTopicNo.6)  Re[5]: notepadを行指定で開く
□投稿者/ ま (44回)-(2008/05/29(Thu) 23:13:23)
究極のnotepad というページに書かれていましたが、
秀丸.exe を notepad.exe に名前変更して本物を削除し
てしまうってのはどーですか?

notepad 行指定

で検索したら、VB.NET と C# で SendMessage を利用して
ジャンプする仕掛けのどこかの掲示板のログが見つかりま
したよ。

背景が黒い掲示板です。


引用返信 編集キー/
■19806 / inTopicNo.7)  Re[6]: notepadを行指定で開く
□投稿者/ 小春 (26回)-(2008/05/30(Fri) 09:26:39)
No19794 (ま さん) に返信
> 究極のnotepad というページに書かれていましたが、
> 秀丸.exe を notepad.exe に名前変更して本物を削除し
> てしまうってのはどーですか?
>
> notepad 行指定
>
> で検索したら、VB.NET と C# で SendMessage を利用して
> ジャンプする仕掛けのどこかの掲示板のログが見つかりま
> したよ。
>
> 背景が黒い掲示板です。
>
>

ご返信ありがとうございます。
SendMessageを利用する方法を見つけました。
ちょっとやってみます。
引用返信 編集キー/
■19810 / inTopicNo.8)  Re[7]: notepadを行指定で開く
□投稿者/ 小春 (27回)-(2008/05/30(Fri) 10:12:27)
2008/05/30(Fri) 10:12:56 編集(投稿者)
No19806 (小春 さん) に返信
> ■No19794 (ま さん) に返信
>>究極のnotepad というページに書かれていましたが、
>>秀丸.exe を notepad.exe に名前変更して本物を削除し
>>てしまうってのはどーですか?
>>
>>notepad 行指定
>>
>>で検索したら、VB.NET と C# で SendMessage を利用して
>>ジャンプする仕掛けのどこかの掲示板のログが見つかりま
>>したよ。
>>
>>背景が黒い掲示板です。
>>
>>
> 
> ご返信ありがとうございます。
> SendMessageを利用する方法を見つけました。
> ちょっとやってみます。

単純ですが、以下の方法で回避しようかと思います。
ちょっとかっこわるいですけど…。

using (Process hProcess = Process.Start("notepad", "C:\\..\\hoge.txt"))
{
    //優先順位を上げる
    hProcess.PriorityClass = ProcessPriorityClass.RealTime;

    //メモ帳起動までの待機時間
    System.Threading.Thread.Sleep(100);

    //指定行にまで↓キーを送信
    for (int i = 1; i < Convert.ToInt32(500); i++)
    {
        //下へ下へ下へ…!
        SendKeys.Send("{Down}");
    }
}

また時間に余裕ができたら改良していきます。
返信頂いた皆様ありがとうございました。

解決済み
引用返信 編集キー/
■19816 / inTopicNo.9)  Re[8]: notepadを行指定で開く
□投稿者/ 囚人 (301回)-(2008/05/30(Fri) 11:26:30)
どういう環境で何をしたいのかに依りますけど、プロセスのプライオリティをそんなに強烈に上げないほうが良いとおもいますよ。

Process.MainWindowHandle で、起動した notepad.exe のメインウィンドウのハンドルがとれるので、そのウィンドウハンドルに対してメッセージを送信した方がよいのでは?
引用返信 編集キー/
■19819 / inTopicNo.10)  Re[9]: notepadを行指定で開く
□投稿者/ Jitta on the way (106回)-(2008/05/30(Fri) 12:03:55)
No19816 (囚人 さん) に返信
> どういう環境で何をしたいのかに依りますけど、プロセスのプライオリティをそんなに強烈に上げないほうが良いとおもいますよ。
>
> Process.MainWindowHandle で、起動した notepad.exe のメインウィンドウのハンドルがとれるので、そのウィンドウハンドルに対してメッセージを送信した方がよいのでは?

賛成
最低でも、Normal にもどしましょう。
あと、[ctrl]+[G] とか。
ウィンドウ名を探せば、起動したかどうか分かります。
引用返信 編集キー/
■19820 / inTopicNo.11)  Re[9]: notepadを行指定で開く
□投稿者/ 渋木宏明(ひどり) (771回)-(2008/05/30(Fri) 12:38:05)
渋木宏明(ひどり) さんの Web サイト
あと、GUI アプリが起動してメッセージ受信を開始するまでの待ち合わせは、Sleep() じゃなくて Process.WaitForInputIdle() の方がよろしんじゃないかと。

引用返信 編集キー/
■19843 / inTopicNo.12)  Re[10]: notepadを行指定で開く
□投稿者/ 小春 (28回)-(2008/05/30(Fri) 21:20:10)
2008/05/30(Fri) 21:21:02 編集(投稿者)
皆様のご指摘ありがとうございます。

少し改良致しました。

[DllImport("user32.dll", CharSet = CharSet.Unicode)]
public static extern bool SetForegroundWindow(IntPtr hWnd);

・・・

using (Process hProcess = Process.Start("notepad", "C:\\..\\hoge.txt"))
{
    //アイドル状態になるまで待機
    hProcess.WaitForInputIdle();

    //NOTEPADのウィンドウをアクティブにする
    SetForegroundWindow(hProcess.MainWindowHandle);

    //Ctrl + Gがうまく送信されません…。
    //SendKeys.Send("^G");

    //指定行にまで↓キーを送信
    //下へ下へ下へ…!
    SendKeys.Send("{Down 500}");
}

「//下へ下へ下へ…!」のところを、Ctrl + Gを送信し、5、0、0を送信し、Enterキーを送信したい!
と思ったのですが、Ctrl + Gがうまく送信されません…。
MSDNの通りだと思うのにぃ(T_T)

ご教示の程、宜しくお願い致します。

引用返信 編集キー/
■19846 / inTopicNo.13)  Re[11]: notepadを行指定で開く
□投稿者/ 魔界の仮面弁士 (750回)-(2008/05/30(Fri) 21:44:40)
2008/05/30(Fri) 21:52:11 編集(投稿者)

No19843 (小春 さん) に返信
> 「//下へ下へ下へ…!」のところを、Ctrl + Gを送信し、5、0、0を送信し、Enterキーを送信したい!
> と思ったのですが、Ctrl + Gがうまく送信されません…。

大文字だと、Shift が送信されてしまうかも知れないので、
 SendKeys.Send("^G");
ではなく、
 SendKeys.Send("^g");
だとどうでしょう。


それで駄目なら、Ctrl + G のかわりに
 hProcess.WaitForInputIdle(500);
 SendKeys.Send("%EG500{Enter}");
のようにしてみるとか。
引用返信 編集キー/
■19922 / inTopicNo.14)  Re[12]: notepadを行指定で開く
□投稿者/ 小春 (29回)-(2008/06/02(Mon) 12:39:08)
2008/06/02(Mon) 12:39:46 編集(投稿者)
No19846 (魔界の仮面弁士 さん) に返信
> 2008/05/30(Fri) 21:52:11 編集(投稿者)
> 
> ■No19843 (小春 さん) に返信
>>「//下へ下へ下へ…!」のところを、Ctrl + Gを送信し、5、0、0を送信し、Enterキーを送信したい!
>>と思ったのですが、Ctrl + Gがうまく送信されません…。
> 
> 大文字だと、Shift が送信されてしまうかも知れないので、
>  SendKeys.Send("^G");
> ではなく、
>  SendKeys.Send("^g");
> だとどうでしょう。
> 
> 
> それで駄目なら、Ctrl + G のかわりに
>  hProcess.WaitForInputIdle(500);
>  SendKeys.Send("%EG500{Enter}");
> のようにしてみるとか。

ご返信ありがとうございます。

SendKeys.Send("^g");
でうまくいきました。小文字なのですね・・・。

SendKeys.Send("%EG500{Enter}");
でもうまくいきましたが、Alt+E分、画面のちらつきが発生しました。

SendKeys.Send("^g500{Enter}");
でもちらつきが発生しますが、気にならない範囲だと思います。

最終的に、以下の数行で行ジャンプが実現できました。

[DllImport("user32.dll", CharSet = CharSet.Unicode)]
public static extern bool SetForegroundWindow(IntPtr hWnd);

・・・

using (Process hProcess = Process.Start("notepad", "C:\\..\\hoge.txt"))
{
    //アイドル状態になるまで待機
    hProcess.WaitForInputIdle();

    //NOTEPADのウィンドウをアクティブにする
    SetForegroundWindow(hProcess.MainWindowHandle);

    //Ctrl + Gで行ジャンプダイアログを表示し、行数指定後、Enterキー押下
    SendKeys.Send("^g500{Enter}");
}

魔界の仮面弁士 さん及び、ご助言頂いた皆様ありがとうございました。
今度こそ、解決致しました。

※SendKeys.Sendメソッドで小文字だとうまく行くところが納得いきませんが、
 今後、大小の両方で試してみたいと思います。

解決済み
引用返信 編集キー/
■19924 / inTopicNo.15)  Re[13]: notepadを行指定で開く
□投稿者/ 鶏唐揚 (177回)-(2008/06/02(Mon) 13:42:49)
No19922 (小春 さん) に返信
No19846 (魔界の仮面弁士 さん) に返信
>>大文字だと、Shift が送信されてしまうかも知れないので、
>> SendKeys.Send("^G");
>>ではなく、
>> SendKeys.Send("^g");
>>だとどうでしょう。

> SendKeys.Send("^g500{Enter}");
> でもちらつきが発生しますが、気にならない範囲だと思います。

> ※SendKeys.Sendメソッドで小文字だとうまく行くところが納得いきませんが、
>  今後、大小の両方で試してみたいと思います。

CapsLockがONになってると挙動が逆になりません?
"g"および"G"指定はやめたほうがいいかもしれません。
解決済み
引用返信 編集キー/
■20149 / inTopicNo.16)  Re[14]: notepadを行指定で開く
□投稿者/ 小春 (30回)-(2008/06/06(Fri) 17:58:30)
No19924 (鶏唐揚 さん) に返信
> ■No19922 (小春 さん) に返信
> ■No19846 (魔界の仮面弁士 さん) に返信
> >>大文字だと、Shift が送信されてしまうかも知れないので、
> >> SendKeys.Send("^G");
> >>ではなく、
> >> SendKeys.Send("^g");
> >>だとどうでしょう。
>
>>SendKeys.Send("^g500{Enter}");
>>でもちらつきが発生しますが、気にならない範囲だと思います。
>
>>※SendKeys.Sendメソッドで小文字だとうまく行くところが納得いきませんが、
>> 今後、大小の両方で試してみたいと思います。
>
> CapsLockがONになってると挙動が逆になりません?
> "g"および"G"指定はやめたほうがいいかもしれません。

ご返信ありがとうございます。
及び、私の返信が遅くなりまして、申し訳ございません。

CapsLockがON、OFFともに大丈夫でした。

しかし、ごく稀(1/50ぐらい)に
・Notepadのショートカット画面がでて数値が入力されて止まってる。
・Ctrl+Gすらできていないときもある。
という現象があります。

遅い端末では、1/10ぐらいの確立になります。
Notepadの起動に時間がかかる場合がこの現象に当てはまるのかもしれません。

Notepad・・・、もうちょっとなんとかならないかなぁ。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -