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

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

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

Re[7]: UBound?


(過去ログ 77 を表示中)

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

■45520 / inTopicNo.1)  UBound?
  
□投稿者/ らんどくるうざあ (1回)-(2010/01/14(Thu) 14:14:24)

分類:[C#] 

初めまして。らんどくるうざあと申します。
分からない事があったので質問をさせていただきます。どなたかご教授の方よろしくお願いいたします。

Visual Basic2005で、

Function PrevInstance() As Boolean

If UBound(Diagnostics.Process.GetProcessesByName(Diagnostics.Process.GetCurrentProcess.ProcessName)) > 0 Then
Return True
Else
Return False
End If

End Function

という処理をしている部分があるのですが、これをC#ではどのように書けばよろしいのでしょうか?

申し訳ありませんが、よろしくお願いいたします。
引用返信 編集キー/
■45526 / inTopicNo.2)  Re[1]: UBound?
□投稿者/ .SHO (1119回)-(2010/01/14(Thu) 14:24:49)
No45520 (らんどくるうざあ さん) に返信

Diagnostics.Process.GetProcessesByName(Diagnostics.Process.GetCurrentProcess.ProcessName)

ココの質問?

引用返信 編集キー/
■45527 / inTopicNo.3)  Re[2]: UBound?
□投稿者/ ぽぴ王子 (473回)-(2010/01/14(Thu) 14:25:19)
ぽぴ王子 さんの Web サイト
No45520 (らんどくるうざあ さん) に返信
> 初めまして。らんどくるうざあと申します。
> 分からない事があったので質問をさせていただきます。どなたかご教授の方よろしくお願いいたします。
> 
> Visual Basic2005で、
> 
> Function PrevInstance() As Boolean
> 
> If UBound(Diagnostics.Process.GetProcessesByName(Diagnostics.Process.GetCurrentProcess.ProcessName)) > 0 Then
>             Return True
>     Else
>         Return False
>     End If
> 
> End Function
> 
> という処理をしている部分があるのですが、これをC#ではどのように書けばよろしいのでしょうか?
> 
> 申し訳ありませんが、よろしくお願いいたします。

「書き方そのものがわからないので、おまいら代わりに書いてくれ」という質問でしたら、お断りしますが。
そうではないんですよね?
わからないところは明確にしないと、答える側も答えられないです。

と、それはそれとして。
タイトルに「UBound?」とあるので、UBoundが何かわからないのであろう、という前提で話を進めます。
まずは、MSDNでUBoundを調べます。いくつかありますが、この場合はこれだと思います。

UBound 関数
http://msdn.microsoft.com/ja-jp/library/cc437658%28VS.71%29.aspx

つまり、GetProcessByNameメソッドが返すProcess型の配列の中身が0個より多い(=1個以上)場合に
処理を行うという書き方になります。
だとすれば、C#で書くとしたら(VBでも同じように書けますが)

public bool PrevInstance()
{
    if (Diagnostics.Process.GetProcessesByName(Diagnostics.Process.GetCurrentProcess.ProcessName).Length > 0)
    {
        return true;
    }
    else
    {
        return false;
    }
}

という感じになるかと思います。

引用返信 編集キー/
■45536 / inTopicNo.4)  Re[3]: UBound?
□投稿者/ 魔界の仮面弁士 (1450回)-(2010/01/14(Thu) 15:01:13)
No45527 (ぽぴ王子 さん) に返信
> つまり、GetProcessByNameメソッドが返すProcess型の配列の中身が0個より多い(=1個以上)場合に
> 処理を行うという書き方になります。

「添字の最大値が 0 よりも大きい」なので、「2個以上」だと思います。
(要素数 0 の配列に対しては、UBound は -1 を返します)


今回の PrevInstance は恐らく、「自分と同じ exe が既に起動されていたか」を調べる物なので、
自分自身を除外して、「2個以上なら true」「1個(以下)ならば false」を返そうとしているのかと。
引用返信 編集キー/
■45546 / inTopicNo.5)  Re[4]: UBound?
□投稿者/ かたぎり (14回)-(2010/01/14(Thu) 15:47:42)
Ubound関数は、引数の配列の最大インデックスを返す

なので、どうすればいいかは、もうおわかりなのではないかなとw

Diagnostics.Process.GetProcessesByName(Diagnostics.Process.GetCurrentProcess.ProcessName))

の最大インデックスが取れればいいんですもん
引用返信 編集キー/
■45550 / inTopicNo.6)  Re[5]: UBound?
□投稿者/ ぽぴ王子 (474回)-(2010/01/14(Thu) 16:32:18)
ぽぴ王子 さんの Web サイト
No45536 (魔界の仮面弁士 さん) に返信
> ■No45527 (ぽぴ王子 さん) に返信
>>つまり、GetProcessByNameメソッドが返すProcess型の配列の中身が0個より多い(=1個以上)場合に
>>処理を行うという書き方になります。
> 
> 「添字の最大値が 0 よりも大きい」なので、「2個以上」だと思います。
> (要素数 0 の配列に対しては、UBound は -1 を返します)

なるほど。UBoundの動きを勘違いしていました。

> 今回の PrevInstance は恐らく、「自分と同じ exe が既に起動されていたか」を調べる物なので、
> 自分自身を除外して、「2個以上なら true」「1個(以下)ならば false」を返そうとしているのかと。

PrevInstance という名前から察するに、そういうことなのでしょうね。
とすると、こんな感じになるかな。

public bool PrevInstance()
{
    if (System.Diagnostics.Process.GetProcessesByName(System.Diagnostics.Process.GetCurrentProcess().ProcessName)).Length >= 2)
    {
        return true;
    }
    else
    {
        return false;
    }
}

※テストはしていません

引用返信 編集キー/
■45551 / inTopicNo.7)  Re[6]: UBound?
□投稿者/ みきぬ (709回)-(2010/01/14(Thu) 16:42:01)
PrevInstance でぐぐってみたよ!

http://dobon.net/vb/dotnet/vb6/previnstance.html
引用返信 編集キー/
■45553 / inTopicNo.8)  Re[7]: UBound?
□投稿者/ 渋木宏明(ひどり) (1263回)-(2010/01/14(Thu) 17:11:37)
渋木宏明(ひどり) さんの Web サイト
そもそもでゆーと、たまたま実行ファイル名が同じ名前の別プログラムが起動していると、期待通りの動作をしないと思うんですが、その辺大丈夫なんでしょうか?

引用返信 編集キー/
■45565 / inTopicNo.9)  Re[8]: UBound?
□投稿者/ たくボン (317回)-(2010/01/14(Thu) 19:10:21)
No45553 (渋木宏明(ひどり) さん) に返信
> そもそもでゆーと、たまたま実行ファイル名が同じ名前の別プログラムが起動していると、期待通りの動作をしないと思うんですが、その辺大丈夫なんでしょうか?

前にも似たようなのありましたね。

http://bbs.wankuma.com/index.cgi?mode=al2&namber=25435&KLOG=47

.NETのフレームワークを使わないならmutexかな。
引用返信 編集キー/
■45589 / inTopicNo.10)  Re[9]: UBound?
□投稿者/ 渋木宏明(ひどり) (1264回)-(2010/01/15(Fri) 10:41:29)
渋木宏明(ひどり) さんの Web サイト
> .NETのフレームワークを使わないならmutexかな。

.NET 標準ライブラリの Mutex クラスを使ってください。
引用返信 編集キー/
■45591 / inTopicNo.11)  Re[7]: UBound?
□投稿者/ みきぬ (713回)-(2010/01/15(Fri) 11:09:42)
> PrevInstance でぐぐってみたよ!
>
> http://dobon.net/vb/dotnet/vb6/previnstance.html

質問者に読んでもらえたかわからないので、↑のリンク先から1行引用しておきます。

> 二重起動を禁止する方法については、「二重起動を禁止する」をご覧ください。
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -