• 締切済み

processコンポーネントの使用方法

VB.NET2003/1.1FrameWork 現在MSDNライブラリ(プロセスが応答しているかどうかを確認する)を実際に動作させてみようと思っていますが、波線が2箇所にでて困っています。 ご存知の型がいればご教授下さい。 http://msdn2.microsoft.com/ja-jp/library/aykwfbdh(VS.80).aspx 手順:破線部は「」でくくりました 1、フォームにButton1を作成 2、processコンポーネントをForm1に貼付け(process1) 3、Button1_Click(...) ~ 内に以下を記述 Dim myProcesses() As 「process」 myProcesses = 「Process.GetProcessesByName」("notepad.exe") If myProcesses(0).Responding Then myProcesses(0).CloseMainWindow() Else myProcesses(0).Kill() End If ?? 一つ目が"型が必要です。" 二つ目が"'Process.GetProcessesByName'は'プロセス'のメンバーではありません" process を System.Diagnostics.process に変えると波線はでなくなりますが、違うような気がするのです。 メモ帳(notepad.exe)を起動している状態で本プログラムを実行すればmyProcesses(0)に値が入ると想像しているのですが、length=0となり「インデックスが配列の境界外です」とエラーになります。 根本的な事で申し訳ありませんが、よろしくお願いいたします。

  • a-k-a
  • お礼率43% (77/176)

みんなの回答

  • AlexSuns
  • ベストアンサー率67% (78/115)
回答No.2

>Importsが使えない?場合、指定方法ってあるのでしょうか? ? 名前空間について調べてみることをお勧めします Imports ステートメント http://msdn2.microsoft.com/ja-jp/library/7f38zh8x(VS.80).aspx MSDN Home > .NET Framework > VB .NET プログラミングリファレンス 3-8 名前空間 (Namespace) http://www.microsoft.com/japan/msdn/net/vbnetref/vbnetref3-8.aspx

  • AlexSuns
  • ベストアンサー率67% (78/115)
回答No.1

>現在MSDNライブラリ(プロセスが応答しているかどうかを確認する)を実際に動作させてみようと思っていますが、波線が2箇所にでて困っています。 >process を System.Diagnostics.process に変えると波線はでなくなりますが、違うような気がするのです。 違うような気がするのではありません あっています 毎回記述するのが面倒であれば、コードの先頭に Imports System.Diagnostics と記述してください あと、MSDNを参照してそうなのですが、「Process.GetProcessesByName メソッド (String)」は参照されましたでしょうか? そのヘルプの中に下記のような一文がありました Process.GetProcessesByName メソッド (String) http://msdn2.microsoft.com/ja-jp/library/z3w4xdc9(VS.80).aspx プロセス名は、Outlook など、拡張子 .exe やパスを含まないプロセスの表示名です。GetProcessesByName は、同じ実行可能ファイルに関連付けられたすべてのプロセスの取得および操作に役立ちます。たとえば、実行可能ファイル名を processName パラメータとして渡し、その実行可能ファイルのすべての実行中インスタンスをシャットダウンできます。 このことを踏まえると下記のようにすれば良いのでは? ×myProcesses = Process.GetProcessesByName("notepad.exe") ↓ ○myProcesses = Process.GetProcessesByName("notepad")

a-k-a
質問者

お礼

ありがとうございます。 Process.GetProcessesByName メソッドについてはMSDNの記述をそのまま流用して確認していませんでした。 "noteped"と指定することで期待する実行結果になりました。 一点質問なのですが、 Imports System.Diagnostics にしても Dim myProcesses() As 「Process」と打っても が process に変わり波線が出てしまいます。 そのため、違うのかな?と思ったのですが、Importsが使えない?場合、指定方法ってあるのでしょうか? 別レスにすべきなのかもしれませんが、ご存知でしたらご教授下さい。

関連するQ&A

  • 常駐し他のプロセスの起動を取得する方法

    test.exeというプログラムを作ります。 実行すると特定のプロセスの起動を待ちます。 特定のプロセスをnotepad.exeとします。 メモ帳(notepad.exe)が起動されたらtest.exeは何かします。 例えばMessageBox()とかで何か表示します。 どうやればいいのでしょうか? ・特定のプロセスが起動するまで待つ ・起動を検知する というところを教えてください。 VC++です。MFC,ATLなどは使いません。 特にウインドウなどはいらないので数行でできてしまうのであれば winmain()からお願いします。

  • メモ帳を開いて最大化するには?

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles cmd_ボタン.Click System.Diagnostics.Process.Start("notepad.exe") End Sub これでメモ帳を開くことはできたのですが、最大化するにはどうすればいいでしょうか? System.Diagnostics.Process.Start("notepad.exe") ,vbMaximizedFocus にすると エラーステートメントの終わりを指定してください。 になってしまいます。

  • VC#2008の動作について

    VC#2008について、下記の場合、button1をクリックし、 その次に、button2をクリックしても全く反応しません。 どのように改良すれば反応しますか? 処理が重く止まったと感じた時、メッセージを表示した後、 アプリケーションを終了したいと思っています。 どなたかご存知の方、教えていただけないでしょうか? 宜しくお願い致します。 namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1(){ InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { System.Threading.Thread.Sleep(10000000); } private void button2_Click(object sender, EventArgs e) { MessageBox.Show("close"); System.Diagnostics.Process[] p = System.Diagnostics.Process.GetProcessesByName("myapp"); foreach (System.Diagnostics.Process k in p) { k.Kill(); } } } }

  • C# 他のアプリケーションを優先度「高」で起動したい

    例えば、notepadを起動したいなら、以下のようにやればいいと思います。 System.Diagnostics.Process.Start("notepad.exe"); このnotepadを優先度「高」で起動させるにはどのようにすれば良いのでしょうか?

  • プロセスの情報取得

    vb.netで開発しています。 あるexe(仮にwatch_p.exeとします)のプロセスの情報(CPU時間)を取得し、一定時間以上(30分以上)だった場合強制終了するプログラムを作成しようとしています。 以下のようにCPU時間の取得する方法までは見えていますが、取得した 時間を比較する方法が見えていません。 忙しいことと思いますが、回答をお願いします。 Dim ps As System.Diagnostics.Process() = _ System.Diagnostics.Process.GetProcesses() '配列から1つずつ取り出す Dim p As System.Diagnostics.Process For Each p In ps Try If p.ProcessName="watch_p" then '合計プロセッサ時間 Console.WriteLine(p.TotalProcessorTime) End if Catch End Try Next p

  • 実行中の他のアプリのパスの取得方法

    実行中の他のアプリのパスを取得する方法を教えてください。 プロセスの一覧の取得はできるんですが、インストールされている場所が取得できません。 例えば「エクセル」だとプロセス名の「EXCEL」は取得できるんですが、「C:\Program Files\Microsoft Office\Office\EXCEL.EXE」も取得したいのです。 例えば「メモ帳l」だとプロセス名の「notepad」は取得できるんですが、「C:WINDOWS\system32\notepad.exe」も取得したいのです。 検索してみてるんですが、ありそうでないんです。 OSはWindowsXP、VisualBasic2008で取得したいのです。 よろしくお願いします。

  • 重複起動の抑止

    お世話になっています。 Visual Basic.Netにて開発を行っております。 アプリケーションの重複起動を抑止するため、下記のようなコードを作成しました。 '自アプリプロセス名取得 Dim strProcName As String = System.Diagnostics.Process.GetCurrentProcess.ProcessName 'プロセスコンポーネントにリソースを関連付け procName = System.Diagnostics.Process.GetProcessesByName(strProcName) If UBound(procName) > 0 Then '重複起動 End If 上記コードにて重複起動チェックが行えていたのですが、 急に自アプリのプロセス名の取得時にエラーが発生するようになってしまいました。 (1行目で文字列を直接渡した場合、2行目で同様のエラーが発生します) エラーが発生する直前に行っていたことからエラー要因の確定ができると思うのですが、 今回は、まったく思い当たる節がございません。 エラー内容を見るとマシンの設定が変更されてしまっているようにも見えるのですが、 どこの設定値を変更すればよいのかご存知の方、または 他の重複起動チェックをご存知の方がいらっしゃいましたら、 申し訳ないのですがご教授頂けないでしょうか? Message "プロセス パフォーマンス カウンタは無効にされているため、要求された情報を実行できません。" StackTrace at System.Diagnostics.NtProcessManager.GetProcessInfos(PerformanceCounterLib library) at System.Diagnostics.NtProcessManager.GetProcessInfos(String machineName, Boolean isRemoteMachine) at System.Diagnostics.ProcessManager.GetProcessInfos(String machineName) at System.Diagnostics.Process.EnsureState(State state) at System.Diagnostics.Process.get_ProcessName() at Sample.Sample.Main() in *** Windows 2000 Pro SP3

  • 開いているアプリをactivateするFindWindowの戻り値について

    FindWindow のreturnValue が、開いているNotePad の場合はちゃんと、0以外の値が戻ってきますが、他のアプリで試しても0しか戻ってきません。はて、どうしてなのでしょうか?MsPaint,WordPad、あるいは自作のアプリ.exe どれもだめです。御教示をお願いいたします。Delphi 6, Windows98 procedure TForm1.Button1Click(Sender: TObject); var hMemo:HWND; begin hMemo := FindWindow('Notepad',nil); if hMemo <> 0 then SetForegroundWindow(hMemo) else ShowMessage('メモ帳が見つかりません'); end;

  • 親プロセスの切り離し?

    USBメモリ内で動作するプログラムから、パソコンにインストールされているプログラムを起動後、USBメモリ内にあるプログラムは自動的に終了するようにしています。 この状態で、"ハードウェアの安全な切り外し"で、USBメモリを停止できるようにしたいのですが、何かいい方法はないでしょうか? 試しにメモ帳を利用する、次のコンソールプログラムを作って、USBメモリ内で起動したところ、やはりUSBメモリを停止することができませんでした。 -- #include <windows.h> int main(int argc, char* argv[]) { BOOL bRes; STARTUPINFO si={0}; PROCESS_INFORMATION pi={0}; si.cb = sizeof(STARTUPINFO); if(CreateProcess(NULL, "C:\\Windows\\notepad.exe C:\\a.txt", NULL,NULL,FALSE,0,NULL,NULL,&si,&pi)) { CloseHandle(pi.hProcess); CloseHandle(pi.hThread); bRes=TRUE; } return 0; } -- ※C:\\a.txtは適当なテキストファイルを作成して置いてます。 普段、秀丸エディタを使っているので、試しに "C:\\Windows\\notepad.exe C:\\a.txt" を "C:\\Program Files\\Hidemaru\\Hidemaru.exe C:\\a.txt" に変更した試したところ、USBメモリを停止することができました。 秀丸エディタだとUSBメモリを停止することができるので、起動される側のプログラムで何かすれば停止できるようになるとは思いますが、何をすればいいのかさっぱりわからず困っています。

  • c# 他プロセス起動 リダイレクト(入力) バイナリファイルの場合

    現在、c#で他プロセスを起動させるプログラムを組んでいるのですが、リダイレクトでつまづいています。 (コンパイルが出来ない->どう記述すれば良いのか分からない。) ファイルストリームのReadはデータをByteの配列に格納しますが、リダイレクト入力のwriteはcharの配列を引数としているみたいで、どう記述すれば良いのか分かりません。 記述方法または参考URLを教えていただけないでしょうか? --source--  System.IO.Stream retstream = new FileStream(wkPath, FileMode.Open, FileAccess.Read, FileShare.Read);  System.Diagnostics.Process myProcess = new System.Diagnostics.Process();  myProcess.StartInfo.FileName = "C:\\Program Files\\proc\\process.exe";  myProcess.StartInfo.UseShellExecute = false;  myProcess.StartInfo.RedirectStandardInput = true;  myProcess.StartInfo.RedirectStandardOutput = true;  if (strmInput.Length > 0) {   int num = 0;   byte[] bufWk = new byte[65536];   while (true) {    num = strmInput.Read(bufWk, 0, bufWk.Length);    if (num == 0) {     break;    }    myProcess.StandardInput.Write(bufWk, 0, num); //←コンパイルエラー   }  } --エラー内容-- System.IO.TextWriter.Write(char[], int, int)' に最も適しているオーバーロード メソッドには無効な引数がいくつか含まれています。 引数 '1': 'byte[]' から 'char[]' に変換できません。

専門家に質問してみよう