1 名前:デフォルトの名無しさん [2008/02/22(金) 12:14:02 ] 前スレ VB.NET質問スレ(Part24) pc11.2ch.net/test/read.cgi/tech/1197507828/ テンプレは2〜5くらいまでの間にある予定
133 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 00:57:44 ] VBとは関係ないんですが「自動修復情報の保存」の頻度って変えられないでしょうか? デザイン画面弄ってると頻繁に作業中断させられて困ります
134 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 01:31:05 ] >>133 メニューバーから「ツール」-「オプション」を選択して「環境」-「自動バックアップ」
135 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 01:35:42 ] >>134 ありがとうございました。5分から15分にしてみました。
136 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 09:59:45 ] MonthCalendarの色がVistaで変更されないのはなんで? MonthCalendar.TitleBackColor = System.Drawing.SystemColors.Control MonthCalendar.TitleBackColor = System.Drawing.SystemColors.ControlText MonthCalendar.BackColor = System.Drawing.SystemColors.Control MonthCalendar.ForeColor = System.Drawing.SystemColors.ControlText こんな感じでセットしてもXpでは変更されるがVistaでは変更されない。
137 名前:デフォルトの名無しさん [2008/03/02(日) 13:59:25 ] VS2005の[ツール]-[オプション]の「デバッグ」の設定で、 「出力ウインドウへの出力をすべてイミディエイトウインドウにリダイレクト」 にすると、 Debug.Print("・・・") Console.WriteLine("・・・") TraceSourceオブジェクトのTraceEventなどの出力 も全部イミディエイトウインドウにリダイレクトされていましたが、これを イミディエイトウインドウに出したいものだけを出すようにしたい場合の 設定がありましたら教えてください。
138 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 15:35:34 ] >>136 事故解決しました。 「Xp Visualスタイルを有効にする」を無効にしたらVistaでも変更されました。 なんだよ、コモンコントロールなのにVista未対応かよw
139 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 01:30:12 ] 半月ほど前からプログラミングを勉強し始めてVB2008を使ってるんですが、 iniファイルからの数値の読み取りはできたんですが、 文字列の読み取りが上手くいきません。 ググって出てきた、iniからの読み取り方法を紹介してる いくつかのページとにらめっこしならがら試しているのですが、 コピペしつつ何度試してみても、 読み取れなかった場合のデフォルトの文字列が返されてしまいます。 VB2008だと何か仕様が違うとかなのでしょうか? 参考になりそうなページがあれば教えてもらえると助かります・・・。 ちなみにOSはXPです。
140 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 01:44:52 ] つttp://homepage1.nifty.com/rucio/main/tyukyu/tyukyu8.htm VisualBasic中学校
141 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 01:48:14 ] それかコレ ttp://jeanne.wankuma.com/library/inifile/ iniファイルの読み込みまたは書き込みの提供するクラス
142 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 04:10:50 ] >>140-141 VBプログラミングに関してはVisualBasic中学校で勉強してました。 VB.NET以降でのAPIの扱い方のページがまだ書かれてなかったため、 今回紹介してもらったページも含め各所で調べてたのですが上手くいかなかったので、 今回質問させていただきました。 前置きはこのくらいにして、>>141 で紹介してもらったライブラリを使用したところ、 数値も文字列も問題なく読み込むことに成功しました。 どうもありがとうございました。 ライブラリの使用方法がわからず調べまわってる内に、気付けばこんな時間・・・。
143 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 22:05:20 ] .net 1.1です。 数字のみ入力可能のテキストボックスが20個ある画面で、 その入力値に重複がある場合 重複しているテキストボックスをすべて黄色にする。 というものをつくりたいのですが、 何かスマートなアルゴリズムはありますか? 現在のところ、入力値をキーにハッシュテーブルに格納していき、 重複ができたらそのキーのテキストボックスを黄色にするという案を思いつきましたが、 もっとスマートなのがあれば教えてください。
144 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 22:13:48 ] 入力しているかいないかを判別するための変数を20個作り、 入力されていれば他の入力されているデータと比較してみる手はどうですか? 20個のTextAlignChangedイベントに書いておいたら逐次判断するよ 今すぐに考えたらこんなものしか思い浮かばない・・・
145 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 22:14:57 ] それかバックグラウンドでずっとデータを見張らせるとか そっちの方がお手軽かな
146 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 22:28:44 ] そういえばラッピングってどうやるのですか? Cなどで書いたコードをVB.NETの処理系を用いて実行形式に変換するらしいのですが、 どういう処理をしているのか分かりません。 詳しく知っている方教えてください。
147 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 22:29:00 ] >>143 List(of TextBox)を継承して同じテキストを持つテキストボックスのグループを あらわすクラスをとりあえず作ったら? っていうか「グループ」が複数あっても全部黄色でいいの?w
148 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 22:39:23 ] >>146 ラッピングって言葉自体はサランラップと同じ意味しかない
149 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 11:49:34 ] >>146 言ってることがむちゃくちゃだけどP/Invokeのこと? ヘッダ見ながらひたすらDllImport宣言を書きまくるだけ
150 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 12:08:49 ] そうなんですか Thxです
151 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 00:09:41 ] デザイナの読み込み時に 1 つ以上のエラーが発生しました。エラーは以下に一覧表示されます。 コードの変更が必要なエラーもありますが、プロジェクトを再度ビルドすると解決できるエラーもあります。 VB2005で開発していたら突然このようなエラーが発生しました。 リビルド、再起動と試しましたがダメでした。 検索しても困ってる人は多いということが分かったのですが、 それらしい答えが見付かりませんでした。 デザイナは開けるが実行は出来るという人もありましたが実行も出来ません。 解決方法教えてください。
152 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 00:51:42 ] >>151 情報が足りないからなんともいえんな。 フォーム内のコントロールの種類とか、Designer.vbをいじってないかとか、 継承コントロールを使ったりしてないかとか。 それすらも書けないようなやつはプログラミングやめとけ。 向いてないから。
153 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 01:18:49 ] >>151 それってVB.NETの頃からの致命的なエラーだよ。 2008になっても修正されていないと聞く。
154 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 09:15:37 ] VB.NET 2003なのだが 画面をロードしたときにフォーカスの設定をしたいのだがやり方が解らない。 Me.ActiveControl = Me.フォーカスを移したいコントロール名.Focus をやろうとしても、「Me.」の後に「ActiveControl」が出ない 無視して入れたとしてもエラーになる だれか解る方いらっしゃいます?
155 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 09:27:37 ] Me.フォーカスを移したいコントロール名.Focus だけじゃだめかい?
156 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 09:35:30 ] >>151 経験ある。その時はデザイナ系触ってなくてロジック層のクラスを触ってただけなのにフォームに表示を戻しただけでそうなったんだよな。 どうにもならなかったら新しいプロジェクトを作成して、そこに元のファイルを順に追加するしかないのかな? >>154 Call Me.フォーカスを移したいコントロール名.Focus() でいけると思う。
157 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 09:41:22 ] >>156 「フォーカスを移したいコントロール名」の後にfocusが出てこない。 無理やり入れたとしてもエラーになる 使えないのかな
158 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 09:44:56 ] >>157 そのコントロールはなんですか?
159 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 09:52:48 ] >>157 ボタンです バージョンが古いからできないのかなって思った version.7.1.6030です
160 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 10:07:24 ] そのバージョンのボタンが見つからない、 VB.Net 2008だけど、バージョンは全部2.0になってる
161 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 10:11:03 ] >>159 2003のリファレンス ttp://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/cpref/html/frlrfsystemwindowsformsbuttonmemberstopic.asp Focus メソッドはあるけど、バージョン情報までは分からんな。
162 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 10:15:08 ] フレームワークは framework 1.1 バージョン1.1.4322 SP1 です バージョンの問題か・・・。
163 名前:デフォルトの名無しさん [2008/03/05(水) 19:17:16 ] LINQに挑戦してるんだけど、SqlClientやレコードセット使ってやってたことを実現するのに一苦労です。 まだ時期尚早でしょうか。というかこれから流行るのでしょうか。
164 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 22:35:41 ] LINQの目玉はデータベースじゃなくてコレクション操作
165 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 23:18:19 ] >>151 こんなの日常茶飯事だよ フォームを継承していると多いような気がする たいていの場合はビルドして再表示で直るけどね 直らない場合はdesignerを修正しちゃう 修正しちゃうから日常茶飯事なのかもしれないがw
166 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 23:29:41 ] 日常茶飯事ってこともないけどね。 前にも書いたと思うけど、GUI部品は別のプロジェクトにしとけばまず起こらないわけで。
167 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 00:13:12 ] >>163 一般論として、ver1はバグがたくさんあるとか、次ので仕様変更が、とか あるので、今すぐやる必要がなければ、やらなくていいと思う。
168 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 00:39:23 ] >>164 >>167 なるほど、今無理してやる必要もないですね。 変態SQLいじってるみたいで面白いんだけど、細かい部分が良くわからない。
169 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 01:25:55 ] VB.NETもC#スレのように初心者スレほすいなぁ
170 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 10:14:51 ] いまXMLファイルの書き出しをしているんですが、 10個の設定を書き出すのにシリアル化するべきか、 ドキュメントからXMLへの変換で書き出すか迷っています。 速度的にドキュメント変換の方が断然処理が早いですし、 コードも書きやすいです、 どっちにするべきですか?
171 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 11:44:51 ] >>169 君が立てて告知
172 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 18:09:45 ] >>170 どっちでも好きな方で 設定を格納するための型が既にあるとか値の型が色々あって面倒とかならシリアライズ
173 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 20:25:32 ] シリアル化を挫折してしまったので (見えない格納は意味不明w) ドキュメント変換にしました で、また問題にぶち当たったんですが XMLファイルの要素を指定して、その要素のテキストを読み込むにはどのようにしたらいいのでしょうか? <?xml version="1.0"?> <Microg_Windows_Vista_UAC_RELEASED> <UAC項目> <UAC_Number_0> <Message>OFF</Message> <AD>TEST</AD> </UAC_Number_0> </UAC項目> </Microg_Windows_Vista_UAC_RELEASED> このようなXMLファイルの場合、<UAC_Number_0>の<Message>のテキスト「OFF」のみを読み込みたいんですが、 xmlRoot.ChildNodes(0).InnerText のようにしてしまうと、OFFTESTになってしまって<Message>のテキストと混ざってしまいまいます。
174 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 21:34:16 ] ノード辿ってけば良いじゃん SelectSingleNode で XPath でもいいけど
175 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 22:07:27 ] 辿りかたがちょっとわからなくて・・・ xmlDoc.Load(XMLファイルパス) Dim xmlRoot As XmlElement = xmlDoc.DocumentElement msgbox(xmlRoot.SelectSingleNode("//UAC_Number_0/Message").Value) としたんですがうまくいきませんでした。 (エラーではなく空白NULLが返ってくる) XPathが間違っているのか、構文が間違っているのか全くわからない状態です。 何度もすいません。
176 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 22:15:26 ] SelectSingleNode が XmlNode を返すのは分かるよな? Value プロパティをヘルプで調べてみ
177 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 22:29:17 ] エクセルのすぷれっと見たいにテキストが出てくる物だと思ってました。 (xmlRoot.SelectSingleNode("//UAC_Number_0/Message/text()").Value) これで何とか「OFF」のみ排出されているので成功したと思います。 ありがとうございました!
178 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 14:07:32 ] 悪いこと言わんからシリアライズにしとけ…
179 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 14:10:00 ] プリコンパイルしとけばXmlSerializerはヘタに自分でやるより速いよ
180 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 15:25:13 ] VB.NETでデバイスドライバは書けますでしょうか
181 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 16:56:18 ] >>180 宿題やったらしょんべんして寝ちまえ
182 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 18:59:47 ] >>180 簡単に書けるけどお前には無理
183 名前:デフォルトの名無しさん [2008/03/07(金) 21:38:55 ] >>181-182 自演乙
184 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 21:42:24 ] つwww.xlsoft.com/jp/products/windriver/products-wdcypress.html
185 名前:デフォルトの名無しさん [2008/03/08(土) 13:37:09 ] www.geocities.jp/tor_park/Dlang/byte.html
186 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 13:45:26 ] コピペ君って馬鹿だな、まで読んだ。
187 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 17:17:56 ] WebBrowserで選択状態にする方法、または選択状態を取得する方法がわかりません。 私のほうで引き続き調べていますが、ご存知な方がいらっしゃいましたら、教えていただけると助かります。 よろしくお願いいたします。
188 名前:187 mailto:sage [2008/03/08(土) 17:18:44 ] 追記ですが、 選択状態とは、Webページ内の文字列の選択状態ということです。
189 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 17:20:14 ] WebBrowserで選択状態 だけでも結構Googleに引っかかるようだが
190 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 18:30:21 ] ようするにDOMじゃん
191 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 18:45:20 ] ∧ル∧ ニ= ,, _/-@∀@)__ 〈ヘ_|i Θ) ノ ,, ∧NY∧  ̄=圧|__|ニ(二二(,ニニニ(二(),, _/-@∀@)__ ニニ= ゝ9コア/ {ジ、 ~ .〈ヘ_|i Θ) ノ ,, ∧朝∧ < オオニシ! フィリップ! =‐ ̄-=;/____|_|_〉 圧|__|ニ(二二(,ニニニ(二()_/-@∀@)__ ジェット・ストリーム・アタックをかけるぞ! ( ⌒ヾ,,〉几〈 〉0卩 ゝ9コア/ {ジ、 〈ヘ_|i Θ) ノ ,, (⌒ヾ,,γ/[]ヘ,)r'__/ヾヽ、 -=;;/____|_|_〉 圧|__|ニ(二二(,ニニニ(二()  ̄ ̄  ̄ ̄  ̄ ̄ ̄(⌒ヾ,,〉几〈 〉0卩 ゝ9コア/ {ジ、 ~ (⌒ヾ,,γ/[]ヘ,)r'__/ヾヽ、 -=;;/____|_|_〉  ̄ ̄  ̄ ̄  ̄ ̄ ̄(⌒ヾ,,〉几〈 〉0卩 (⌒ヾ,,γ/[]ヘ,)r'__/ヾヽ、
192 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 01:16:58 ] messagebox.show()と、msgbox()は、同じ動きをしますが、どのように違うのでしょうか?
193 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 01:21:22 ] d.hatena.ne.jp/non_tak/20071029/1193657718#c1193658482
194 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 08:08:21 ] >>193 さんくすこ
195 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 18:11:56 ] アプリケーションの「軽い」「重い」は処理以外に「ソフト自体の容量」も関わりますか? たとえば、フォームロードでは何も行わない「1000KBの*.exe」と「100KBの*exe」にはメモリ使用率などの違いがでるんでしょうか
196 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 18:31:53 ] フォームに3つくらいタブ付けてそれぞれに40個くらいツリーボックス付けてみ ソフト自体の容量はあまり無いが起動に1〜2分くらい掛かる 容量で重くなるって事はあることはあるな
197 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 21:27:41 ] なんとなくわかったような気がしますw ありがとうございました。m(_ _)m
198 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 00:34:34 ] 多分木を視覚的に表現するにはどうしたらいいの?
199 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 01:26:31 ] Console.WriteLineの書式文字列の詳細な仕様はどこに載ってるのか。 標準入力はConsole.ReadLine(とRead)か。 数値を入力する手段は、まず文字列として代入してから、数値に変換する しかないのかな。
200 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 01:34:19 ] >>199 MSDN
201 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 01:46:49 ] >>199 なに言ってのかわかんね
202 名前:sage mailto:sage [2008/03/11(火) 03:42:57 ] >>199 キーボードから文字でなく、数値を入力してみろよ
203 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 06:36:47 ] >>201 >>202 何でお前らは頭が狂ってるのか
204 名前:12 mailto:sage [2008/03/11(火) 10:59:07 ] >>203 >>202 は只の突っ込みだろ? 条件反射レス恥ずかしいぞw プログラミングの前に読解力を鍛えろ。
205 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 12:05:49 ] >>199 msdn2.microsoft.com/ja-jp/library/txafckwd (VS.80).aspx msdn2.microsoft.com/ja-jp/library/427bttx3 (VS.80).aspx Stringから変換するのではなく直接数値型として読み取る方法はないのかという意味だろ ない。
206 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 15:34:48 ] 起動されたアプリケーションを判断したいのですが、 プロセスのネイティブハンドルで判断するのは妥当でしょうか? Dim hProcess As System.Diagnostics.Process System.Diagnostics.Process.Start("メモ帳") のとき hProcess.Handle.ToStringで取ってきた整数で比較する方法で正確に判断できますか?
207 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 15:44:00 ] プロセスハンドルはプロセスが生きてる限り一貫して同じ値 ただしそのプロセスが死んだ後そのハンドルは他のプロセスに再利用されうる
208 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 15:49:57 ] >>207 書き込みありがとうございます。 メモ帳と同じハンドルで存在するアプリケーションは存在しないということでしょうか? アプリケーションの終了を判断したいので、「〜後そのハンドルは他のプロセスに」 は問題ないです。
209 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 15:57:57 ] >>208 ToStringでわざわざ文字列にする必要はないと思われる。 逆にToInt32()でInteger型にして比較するほうが妥当だと思われるが。 まあ、IntPtr型とInteger型(UInt32型)は直接比較することもできる。 Dim pi As New System.Diagnostics.ProcessStartInfo pi.FileName = "c:\windows\notepad.exe" Dim hProcess As IntPtr = System.Diagnostics.Process.Start(pi).Handle Dim pHnd As UInt32 '取得したプロセスハンドル If hProcess = pHnd Then '判断 MsgBox("メモ帳です") Else MsgBox("メモ帳じゃない") End If プロセスハンドルは、OSがそのプロセスを特定するための値なので同じ値は存在しない。
210 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 16:01:00 ] わざわざ、訂正までありがとうございますw 無事解決しました。 ありがとうございました!m(_ _)m
211 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 16:55:50 ] dsofile.dllで拡張情報のコメント読み書きしてみたのだけど、XPで書いたコメントは2000で読めず 2000で書いたものはXPで読めないというワケワカ状態です (これはエクスプローラで見てもそうなので、書き込まれていないとかじゃ無いです) 2000とXPでは違う場所に書き込んでるんですかねえ…
212 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 17:40:43 ] 同じだと思うけど? XPと2000の切り替えはデュアルブートとか?
213 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 21:29:24 ] >>212 2000サーバのファイルを2台のXPマシンと2台の2Kマシンで見てみた エクスプローラで同時に同じファイルのコメント表示してる筈なのに違ってるってもう… 一度iPropertyStorageで試してみるかな
214 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 21:35:08 ] えーっと、ローカルじゃないドライブでもNTFSの機能って使えるんだっけ?
215 名前:210 mailto:sage [2008/03/11(火) 21:38:42 ] またプロセス関係で躓きました。 「起動中のプロセスのハンドルを全て列挙して、 それらから記録していたハンドル整数を検索して見つからなかった場合、それが終了した」 といった風でさせているのですが、もっと簡単な方法があるのでしょうか? >>216
216 名前:210 mailto:sage [2008/03/11(火) 21:41:33 ] 書き込めない
217 名前:210 mailto:sage [2008/03/11(火) 21:45:45 ] 'XMLファイルから読み込んだファイルを監視起動 Public Sub LoadedXML_EXE_MonitorShell() AddHandler hProcess.Exited, AddressOf EXEShell_Exited End Sub '監視対象アプリが終了 Private Sub EXEShell_Exited(ByVal sender As Object, ByVal e As System.EventArgs) '何が終了したか判断するために、今あるアプリケーションのハンドル一覧から、記録しているハンドルと比較する @@@@@@@ここで比較しています@@@@@@@ End Sub できれば、 hProcess.Exitedで終了したハンドルが取得できればスッキリするのですが、 どうすればいいのでしょうか?
218 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 00:31:14 ] ハンドル整数(WIN32のProcessIDのことかな?) からプロセスハンドルを開いて、終了を待てばいいじゃん。
219 名前:210 mailto:sage [2008/03/12(水) 07:50:10 ] Process.Handleです、 非同期でやりたいので、できれば217のプログラム構造を壊さないで 終了したプロセスのハンドルを取りたいのですが、 イマイチ方法がわかりませんでした、 もう少しやってみます。
220 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 08:54:07 ] >>209 IntPtr型のまま比較すべきでは? 64ビットではプロセスハンドルも64ビットなんだから、 pHndだってIntPtrであるべき。
221 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 08:57:16 ] >>219 終了した後にハンドルを得るのは無理に近いから、起動したときに得たハンドルを取っておけ。 Process.HasExitedはだめなの?
222 名前:210 mailto:sage [2008/03/12(水) 09:27:21 ] 監視するアプリケーションは20を超える数になることがあるので、 的確に、何が終了したかをしりたいので |監視対象だった数個の内の、どれかが終了したときに |一体何が終了したのか? を調べたかったんです。 起動したときに、ハンドルは取得できているので 現在のプロセスのハンドルを全て列挙して、記憶している数個のハンドル整数から比較、 消えているもので判断しようと思います。 Process.HasExitedでは一つを対象にした場合なので、 使えませんでした。
223 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 10:12:45 ] 20 程度、Process をコレクションでもっときゃいいじゃん ハンドルも次の新規プロセスで再利用されうるんだから死んだ後使うのは危険
224 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 11:06:45 ] >>220 WindowsAPI使ってプロセスハンドル取得してる場合も少なからず考えられるからさ、 一応、Integer型でも比較できるというのを言いたかったんだ。
225 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 11:37:31 ] はぁ?
226 名前:210 mailto:sage [2008/03/12(水) 11:41:07 ] 一応コレクションは管理していますが、アプリケーションを監視している際にも、 そのアプリに関する情報も管理しないといけないので 膨大になっています。 これ以上増やすことはゴメンなんでw、 「現在のプロセスハンドル比較」の方法で行います。 ありがとうございました。m(_ _)m またお世話になることがあると思うので、そのときも、またよろしくお願いします。
227 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 11:45:48 ] 断る
228 名前:210 mailto:sage [2008/03/12(水) 11:48:24 ] 工エエェェ(´゜д゜`)ェェエエ工
229 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 16:19:28 ] >>222 Process.Exitedイベントとか、 監視用のスレッドを作ってWaitHandle.WaitAnyとかはどう。
230 名前:210 mailto:sage [2008/03/12(水) 18:39:37 ] 出来るだけループ処理は避けたいです、 長期間監視する場合や、スペックが低い場合 単純なタイマー監視などでも予期しないことが起こったりしてしまいそうなのでw '何が終了したか判断するために、今あるアプリケーションのハンドル一覧から、記録しているハンドルと比較する Dim ps As System.Diagnostics.Process() = System.Diagnostics.Process.GetProcesses() '配列から1つずつ取り出す Dim p As System.Diagnostics.Process '全てのプロセスハンドルを取得する Dim All_Process As String = "" For Each p In ps Try 'プロセス名を出力する All_Process = All_Process & (p.Handle.ToString) & vbCrLf Catch End Try Next p '比較開始(正規表現****\r\n)記憶させたキー全てを検索する Dim MoniPro_Count As Integer = nvc.Keys.Count - 1 'カウント数と実際のインデックス数は違うから「-1」 For i = 0 To MoniPro_Count If Not Regex.IsMatch(All_Process, "\b" & nvc.GetKey(i).ToString & "\r\n") Then '正規表現で検索 Dim End_EXE_Pro As String = nvc.Keys(i).ToString '0番目から検索して消えていたハンドル nvc.Remove(End_EXE_Pro) '登録から抹消 MoniPro_Count = nvc.Keys.Count - 1 'カウント調整 MsgBox(nvc.Count) Exit For End If Next 成功しているので張っておきます
231 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 19:01:16 ] >>224 そりゃDeclareが悪い。そっちをIntPtrに直せ。 ところで230はループを避けたいと言いつつ、 そこにあるコードはループして使うしかなさそうに見える件。
232 名前:210 mailto:sage [2008/03/12(水) 19:12:46 ] 監視しているアプリケーションがどれか終了したときだけ10回程度ループします、 秒間隔でループするのではないので、負荷は掛からないと思います。 >>217
233 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 19:13:30 ] >>231 多分なんかのイベント発生のタイミングで検証させたいとかじゃね? 常に回っている必要は確かにないかもね