1 名前:デフォルトの名無しさん mailto:sage [2006/10/19(木) 18:41:18 ] [前スレ]VB.NET質問スレ (Part17) pc8.2ch.net/test/read.cgi/tech/1155292844/
684 名前:666 mailto:sage [2006/12/18(月) 07:07:48 ] みなさんありがとうございます。 元データの商品マスタと部門マスタはあります。 それぞれ列6要素ぐらいで行100〜1000ぐらいです。 初心者なんで理解しきれてないのですが、マスタの一要素ごとに一次元配列を作ってそれをコレクションとかにいれて使うっていうことでしょうか? あ、ちなみにVB2005EXPRESS使ってます
685 名前:デフォルトの名無しさん mailto:sage [2006/12/18(月) 08:14:00 ] >>666 まず具体的に実現したい処理内容をかかなきゃ誰も答えようがないと思いますが。 こういう人って本当どういう頭してるんだろう。 他人はアンタの考えてることが言葉にしなくてもわかるエスパーか何かだと思ってんの? なんにしろ、説明能力に問題がある時点でプログラマには向いてないといわざるを得ない。
686 名前:デフォルトの名無しさん mailto:sage [2006/12/18(月) 16:37:03 ] >>539 ,634,609,680,685 これ以上、辿るのめんどくさいからやめた。 この人って本当どういう生活してるんだろ。 仕事では、対人関係の問題で使い物にならないんだろうな。 ネットで延々と煽って憂さ晴らし。ご愁傷様です。
687 名前:デフォルトの名無しさん mailto:sage [2006/12/18(月) 22:10:41 ] フォームのサイズを変えたら一緒に ボタンやラベルを大きくする方法ないですか??
688 名前:デフォルトの名無しさん mailto:sage [2006/12/18(月) 22:11:44 ] Anchor Dock
689 名前:デフォルトの名無しさん mailto:sage [2006/12/18(月) 22:43:00 ] >>688 もうちょい詳しくおしえてください・・・
690 名前:デフォルトの名無しさん mailto:sage [2006/12/18(月) 23:15:49 ] Anchor 【あんかー】 Dock【どっく】
691 名前:デフォルトの名無しさん mailto:sage [2006/12/18(月) 23:25:50 ] いじめられた・・・
692 名前:デフォルトの名無しさん mailto:sage [2006/12/19(火) 00:09:15 ] アンカー 船舶が使用する錨のこと ドック 船舶の製造、修理などに際して用いられる設備
693 名前:デフォルトの名無しさん mailto:sage [2006/12/19(火) 00:11:55 ] 碇、後戻りはできんぞ さすがドックだ、なんともないぜ
694 名前:デフォルトの名無しさん mailto:sage [2006/12/19(火) 00:38:44 ] これほど「ぐぐれかす」が似合う男もそういないぞ。がんばれ。
695 名前:デフォルトの名無しさん mailto:sage [2006/12/19(火) 11:24:20 ] VBのランタイム関数って.NETになってからも追加されているんですかね?
696 名前:デフォルトの名無しさん mailto:sage [2006/12/19(火) 17:54:34 ] Microsoft.VisualBasic
697 名前:デフォルトの名無しさん mailto:sage [2006/12/19(火) 19:42:06 ] Windows2000(SP4)でVB2005を動かした場合なんですが フォームにListViewを置いて、そのListViewにToolTipを設定した時 ListViewの空白部分をマウスでポイントすると普通にToolTipが表示されるのですが、 行(ListViewItem)が表示されている部分をポイントすると ToolTipが一瞬だけ表示されて消えたり、ちらちらと点滅したり 異常な動きをします。 原因、対処法をご存じでしたらお教え下さい。
698 名前:デフォルトの名無しさん mailto:sage [2006/12/20(水) 11:57:24 ] VB6 から VB2005 に移行して勉強した人が、 以前からの会社の都合でどうしても VB.NET 2003 とかで開発する 必要がある、というような場合、言語上で新たに覚えないといけないような点 はありますでしょうか? Version としてはバックすることになりますが、VB2005 の方が楽になっている ので VB.NET 2003 とかに戻ると オブジェクト指向プログラミング的に 厳密にやらないといけない部分が出てくると思うのですが、その辺で やっかいな部分から列挙するとどんな感じになるでしょう、、 このあたりを心配していましたが、すみませんが、よろしければこの件で ご指導くださればありがたく、よろしくお願いします それとも、VB.NET 2003 で開発していた案件はすべて VB2005 に移行していくと考えてよいでしょうか この辺もよろしければ教えてくださると助かります
699 名前:デフォルトの名無しさん [2006/12/20(水) 11:59:19 ] 上げるの忘れました、スマソ
700 名前:デフォルトの名無しさん mailto:sage [2006/12/20(水) 14:34:40 ] 言語よりむしろNET Framework 2.0と1.xの違いの方が大きいと思われ。
701 名前:デフォルトの名無しさん mailto:sage [2006/12/20(水) 22:14:33 ] 一番大きいのは Using が無い事か? ジェネリクスの方はどうも VB ではあまり聞こえてこないんだが導入に積極的でないのかね
702 名前:デフォルトの名無しさん mailto:sage [2006/12/21(木) 08:19:32 ] このスレは既にPart17ですが、いったいみなさんはVB.NETで何を開発してるのでしょうか?? やっぱ、ほとんど、サーバーサイドのWebアプリケーションでしょうか?? クライアントサイドの.NETアプリをあまり見かけないので質問しました。
703 名前:デフォルトの名無しさん [2006/12/21(木) 08:33:23 ] 質問があります。 エディタにxxxxx.ToStringと入力した時にToString()って 自動的にカッコが付く様にはできないのでしょうか?
704 名前:デフォルトの名無しさん mailto:sage [2006/12/21(木) 12:27:01 ] VS、というかVBのエディタの設定項目なんて数える程しかないのにな。 仮に500以上の設定項目が幾重かの階層になっている、とかなら >>703 みたいな質問もさもありなんと思うんだけど。 まあ703みたいな人がPGに基本的に向かない性格なのは疑いようがない
705 名前:デフォルトの名無しさん mailto:sage [2006/12/21(木) 12:35:11 ] >>704 真性のキチガイやろう。 湧いて来るんじゃねぇよ。
706 名前:デフォルトの名無しさん mailto:sage [2006/12/21(木) 12:38:33 ] >>704 氏ねよクズ 死ねよ
707 名前:デフォルトの名無しさん mailto:sage [2006/12/21(木) 12:39:46 ] (・∀・)ジサクジエンデシタ
708 名前:デフォルトの名無しさん mailto:sage [2006/12/21(木) 12:40:13 ] お前ら耐性なさ杉だ
709 名前:デフォルトの名無しさん mailto:sage [2006/12/21(木) 12:42:44 ] 「教えて君」「教える君」というのは、 ネット上に存在する2種類の人種の人たちを示す揶揄された敬称のことであるが その影には「教えない君」という人種が多数いるの事にはあまり注目されていない。 しかし、実はその「教えない君」という人種が一番厄介かつ迷惑な存在だったりするのである。 そもそも荒れる原因というものは「教えない君」の、無秩序かつ、無神経なレスにある部分が 大多数なのだが、彼らの多くは、そういった感覚はどうやら持ち合わせていないようである。 第三者がそうした場面を見た場合に、誰に一番の非があるというのは 「教えない君」にあるというのが客観的事実であるのは明らかなのであるが、 彼らは認めようとしない。 表面上は、「教えない君」はネット上のルールや倫理や秩序などを叫ぶのであるが どうやら真相は、現実社会において蔑まれる存在である「教えない君」の 鬱憤晴らしのようである。 上記でそういった悲哀のレスを付けた人たちは、勇気を持って自らの弱さと過ちを認め 反省しなければならない。 それがキミたちニートの人間的に成長できる少ないチャンスなのである
710 名前:デフォルトの名無しさん mailto:sage [2006/12/21(木) 12:59:11 ] 長文カキコorコピペする「粘着くん」もいるみたいですよ
711 名前:デフォルトの名無しさん mailto:sage [2006/12/21(木) 12:59:22 ] 500以上の設定項目が幾重かの階層になっているなら質問OKだってw ハハハハハ 死ねよクズ
712 名前:デフォルトの名無しさん mailto:sage [2006/12/21(木) 13:18:57 ] 500もの設定の中から探すような 規模の事しか質問してはいけないって オイオイ
713 名前:デフォルトの名無しさん mailto:sage [2006/12/21(木) 18:42:59 ] ComオブジェクトのShockwave Flash Objectをコントロールとして利用したいのですが、 依存する COM 参照 "stdole, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" を解決できませんでした。 タイプ ライブラリ "AxShockwaveFlashObjects" のラッパー アセンブリを作成できませんでした。種類 'Microsoft.Build.Tasks.ComReferenceResolutionException' の例外がスローされました。 などのエラーが発生して、利用することが出来ません。前までは出来ていたのですが、、、
714 名前:酔いちくれ ◆J0rwikii8c mailto:sage [2006/12/21(木) 19:25:04 ] >>713 外してたら、スマソ。 2003で使ってたのが、2005で使えなくなったとか。
715 名前:デフォルトの名無しさん mailto:sage [2006/12/21(木) 19:41:32 ] いえ、2005環境で使うことが出来ていました。今試したところ、Delphi6でも貼り付けることができました。 ・・・何が原因なんでしょう。
716 名前:酔いちくれ ◆J0rwikii8c mailto:sage [2006/12/21(木) 19:49:26 ] 内部でラッパーのAxShockwaveFlashObjectsにアクセスできてない みたいだから、AxInterop.ShockwaveFlashObjects.dllが悪いのは 確かと思う。 フレームワークが同居してるなら、そのDLLを探してみるのも いいかも。 ちょっとDelphiは知識ないから、スマソ。
717 名前:713 mailto:sage [2006/12/21(木) 21:03:13 ] 原因が分かりました。 参照の追加でCOMタブのOLE Automationを参照させないと実行できないようです。 お騒がせしてすいませんでした。
718 名前:デフォルトの名無しさん mailto:sage [2006/12/21(木) 22:28:12 ] ttp://www.microsoft.com/japan/learning/mcp/developers/default.mspx や ら な い か
719 名前:デフォルトの名無しさん [2006/12/23(土) 11:47:03 ] データグリッドの最初の列を足したいんだけど、For eachで書けないかな? 下ので一応いけるんですが。 Dim sum As Single For i = 0 To DGV.RowCount - 1 sum += DGV.Item(0, i).Value Next MessageBox.Show(sum)
720 名前:デフォルトの名無しさん mailto:sage [2006/12/23(土) 11:50:08 ] 変数名からして DataGridView のようだが。
721 名前:デフォルトの名無しさん mailto:sage [2006/12/23(土) 12:06:07 ] Option Strict Offなソースを見ると何か嫌な気分になる
722 名前:デフォルトの名無しさん mailto:sage [2006/12/23(土) 13:09:52 ] >>720 そうです。
723 名前:デフォルトの名無しさん mailto:sage [2006/12/23(土) 13:29:51 ] >Dim sum As Single なんでSingle…
724 名前:デフォルトの名無しさん mailto:sage [2006/12/23(土) 13:39:43 ] >719 つか集計したいのなら、DataColumn.Expressionでsumするのが 早いと思うが…。 つttp://msdn.microsoft.com/library/ja/cpref/html/frlrfSystemDataDataColumnClassExpressionTopic.asp
725 名前:デフォルトの名無しさん mailto:sage [2006/12/23(土) 22:53:30 ] >723 少数があるので。 >724 ありがとうございます。参考にさせてもらいます。
726 名前:デフォルトの名無しさん mailto:sage [2006/12/24(日) 05:01:00 ] すみません、オブジェクト志向プログラミングについて日が浅いもので よくわからないのですが、、 たとえば、あるクラスから生成されたオブジェクトのコレクションが定義されているとして、 そのADDメソッドには、その元のクラスから派生されたオブジェクトを指定してコレクションに 追加していくことはできるでしょうか たとえば、TreeViewコントロールにおいて、あるノードに子ノードを追加するという場合、 その子ノードは(ノードのコレクションである以上)TreeNodeクラス型オブジェクトでなければ ADDできないと思っていましたが、実際には、「TreeNodeクラスの派生クラスのオブジェクト」 でもADDできているようでした。 これは通常の コレクションにおけるADDメソッド のデフォルトの性質でしょうか? ヘルプの説明では普通に TreeNodeクラス型のオブジェクトをADDするようになっています ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.NETDEVFX.v20.ja/CPref17/html/M_System_Windows_Forms_TreeNodeCollection_Add_1_526d62f3.htm 初心者ですみませんが、よろしくお願いします
727 名前:デフォルトの名無しさん mailto:sage [2006/12/24(日) 09:56:13 ] ArrayList というコレクションが標準ライブラリにある。 これの Add メソッドは引数に Object 型を要求する。 さて、Object 型しか入れられないのならこのコレクションの存在意義ってなんだ?
728 名前:デフォルトの名無しさん mailto:sage [2006/12/24(日) 11:01:47 ] >>727 どうもです、ありがとうございます 要するに ADDメソッド の基本機能が、そもそもどんなオブジェクトでもADDできる ようになっている、ということなのですね ArrayList.Add メソッド を見ると、はじめから ADD(”・・・”) で String型 の値を 渡してもそのままADDされるということは、ADDの引数は始めからオーバーロード で定義されているということもあるのでしょうか、ただ ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.NETDEVFX.v20.ja/cpref2/html/M_System_Collections_ArrayList_Add_1_b4c5a2da.htm には、オーバーロードの複数引数定義は書かれていませんでした それとも、Object型として引き受けるということ自体が、String型の値でも元々引き受ける ようにできているということなのでしょうか、つまりオブジェクト指向での必要条件として 元々 ADDメソッド はこういう構造になっていると・・・)、このどちらなのでしょう?
729 名前:デフォルトの名無しさん mailto:sage [2006/12/24(日) 11:06:30 ] 派生クラスのインスタンスは基底クラスのインスタンスとして振る舞う事が出来る。 それだけ。 ついでに言うと全てのクラス・構造体は Object クラスから派生する。 String クラスのインスタンスは基底クラスである Object クラスのインスタンスとして振る舞う事が出来る。
730 名前:デフォルトの名無しさん mailto:sage [2006/12/24(日) 11:14:03 ] 例として TreeNodeCollection.Add メソッド の説明ですと、 ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.NETDEVFX.v20.ja/CPref17/html/O_T_System_Windows_Forms_TreeNodeCollection_Add.htm のように、 String型の値のADD、TreeNode型のオブジェクトのADD も共にオーバーロードの定義が明示されていましたので、型の拡張は明示されて 初めて利用可能になるものと考えたのでした
731 名前:デフォルトの名無しさん mailto:sage [2006/12/24(日) 11:16:40 ] >>729 あ、すみません、かぶりました >派生クラスのインスタンスは基底クラスのインスタンスとして振る舞う事が出来る。 つまりオブジェクト指向の標準として、そういうことななのだと、 わかりました。 ありがとうございました。
732 名前:デフォルトの名無しさん mailto:sage [2006/12/24(日) 11:20:27 ] >>730 の 「TreeNodeCollection.Add メソッド」 のような場合は 他の引数のオーバーロードも定義したので、基本的な標準の String型の値のADD、TreeNode型のオブジェクトのADD もついでに記載した、ということなのでしょうね。 ご指導ありがとうございました。
733 名前:デフォルトの名無しさん mailto:sage [2006/12/25(月) 18:44:38 ] いやTreeNode型のオーバーロードが標準だろ あとはそれに皮をかぶせただけのオマケ
734 名前:デフォルトの名無しさん mailto:sage [2006/12/25(月) 20:27:07 ] Windows Media Playerを制御することってできますか? ファイルを指定して再生、停止、開始/終了時間の範囲指定など。
735 名前:デフォルトの名無しさん mailto:sage [2006/12/25(月) 21:51:19 ] できます
736 名前:デフォルトの名無しさん mailto:sage [2006/12/26(火) 02:39:28 ] こんばんは 例外を以下のように処理しようとしているのですが、 メッセージボックスが表示されずに、通常のエラーメッセージが表示されます 原因は何でしょうか? Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim A As String = "aaa" Dim B As Integer Try B = CType(A, Integer) Catch ex As Exception MessageBox.Show("Error") End Try End Sub
737 名前:デフォルトの名無しさん mailto:sage [2006/12/26(火) 06:00:31 ] ネタ? ネタだよな?
738 名前:デフォルトの名無しさん [2006/12/26(火) 06:48:40 ] 質問です。 1を2のように記述したら警告になってしまうのですけど、 この警告を出ないようにするにはどうすればいいですか? おしえてちょ。 1 Me.DialogResult = Windows.Forms.DialogResult.OK 2 Me.DialogResult = DialogResult.OK
739 名前:デフォルトの名無しさん mailto:sage [2006/12/26(火) 08:16:06 ] 理由がわかるようになるまで学習を進める、が正解だと思うよ。
740 名前:734 mailto:sage [2006/12/26(火) 08:27:26 ] >>735 どのクラスライブラリを使えばいいんでしょうか? よかったら教えてちょ
741 名前:デフォルトの名無しさん mailto:sage [2006/12/26(火) 10:32:23 ] >>736 ∧ ∧ (*‘ω‘ *) ちんぽっぽ ( ) v v ぼいんっ 川 ( ( ) ) >>740 wmp.dllを参照に追加
742 名前:デフォルトの名無しさん [2006/12/26(火) 14:05:23 ] 皆様お疲れ様です、またよろしくお願いします。 (タイトル) デザイン環境による作成時にコントロールを初期化する方法について (開発環境) VS2005Pro (実現したい内容) コンポーネント・クラスの作成の仕方として、そのコンポーネントを アプリケーションの フォーム・デザイン時に単に貼り付けた時点でのみ動作する初期化どのように実装するか (試行) <System.Diagnostics.DebuggerNonUserCode()> _ Public Sub New() MyBase.New() 'この呼び出しは、コンポーネント デザイナで必要です。 InitializeComponent() End Sub に追加しますと、実行時にも実行されてしまう (その他に) ComponentDesigner.InitializeNewComponent メソッド ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.VisualStudio.v80.ja/dv_fxdeveloping/html/914eaa03-092f-4556-9160-b8a2a40641d9.htm ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.NETDEVFX.v20.ja/cpref3/html/M_System_ComponentModel_Design_ComponentDesigner_InitializeNewComponent_1_d8aa9975.htm を用いる説明があり、Public Overrides Sub InitializeNewComponent(ByVal defaultValues As IDictionary)〜End Sub を *..Designer.vb に追加してみるものの継承元のクラスには同メソッドはなくエラーとなり、 Overrides をはずしてエラーを回避し実装したが (ComponentDesignerクラスは特に利用して いないためか)その中にに書いたコードは実行されず (・・・) フォーム・デザイン時に単に貼り付けた時点でのみ動作する初期化はどのようにして実装するべきか、よろしくご指導ください、お願い致します
743 名前:デフォルトの名無しさん mailto:sage [2006/12/26(火) 14:14:29 ] ネイティブジャパニーズとはとても思えない日本語だな if DesignMode
744 名前:734 mailto:sage [2006/12/26(火) 14:23:53 ] >>741 できません。。。 ぐぐると www.users.gr.jp/blogs/hidori/articles/5302.aspx ツールボックスにWindows Media Player コンポーネントが 出てくるらしいのですが、出ません。 当方、 ・WinXPSP2Pro ・Windows Media Player10 ・VB2005Express なんですが・・・orz ちなみに上記からダウンロードしたソースをC#2005Expressで開くと実行できましたが、 やはりツールボックスにはWindows Media Player コンポーネントがありません・・・ もしかしてExpressEditionではダメなんですかね?
745 名前:デフォルトの名無しさん mailto:sage [2006/12/26(火) 14:30:32 ] >>744 homepage1.nifty.com/rucio/main/kiso/Kiso14AddControl.htm
746 名前:デフォルトの名無しさん mailto:sage [2006/12/26(火) 14:51:59 ] >>743 日本語下手ですんません、どう書くと整理できるか編集中にてにをはが狂いました。 実は Windowsアプリケーションに貼り付けるコントロールだったのですが、 >if DesignMode これを書いてみたところデザイン時も、実行時も常に False のようで、どちらでも 実行されませんでした(継承元のクラスは TreeView)。 ヘルプによると、DesignMode は 名前空間: System.Web.UI アセンブリ: System.Web (system.web.dll 内) とあったので Web部品用のものなのでしょうか?
747 名前:734 mailto:sage [2006/12/26(火) 14:52:47 ] >>745 ありがとうございました。 できました(´∀`)
748 名前:デフォルトの名無しさん mailto:sage [2006/12/26(火) 14:54:46 ] >>746 ですが、実際には System.Web.UI を Imports していなくても 使えていたので、「Web部品用」でなくても持ってるプロパティですよね うーん、どうしてだろ。。。
749 名前:デフォルトの名無しさん mailto:sage [2006/12/26(火) 15:21:12 ] >>748 System.ComponentModel.Component.Designmodeだよ。 で、C#の記事だけどこれかな? blogs.wankuma.com/mnow/archive/2006/11/08/44120.aspx
750 名前:デフォルトの名無しさん mailto:sage [2006/12/26(火) 17:02:24 ] >>749 どうもです、そうでした、System.ComponentModel.Component にも DesignMode はありました。 Parent の DesignMode はその記事の通りやはり Protected だった ようでエラーとなりました。 いまいろいろ調べてみましたがまだ解決していませんが、 さらに調べてみます。
751 名前:デフォルトの名無しさん mailto:sage [2006/12/26(火) 20:25:20 ] ttp://www.be-interactive.org/index.php?itemid=118&catid=10 これをVB2005で行いたいのですが、どのようにすれば良いのか分かりません。 Const WM_COPYDATA As Integer = &H4A Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hWnd As Integer, ByVal MSG As Integer, ByVal wParam As Integer, ByVal lParam As COPYDATASTRUCT) As Integer Sub main() Dim sendMes As New COPYDATASTRUCT sendMes.lpData = _ New System.Text.StringBuilder("TestAPP" + Chr(0).ToString + "Music" + Chr(0).ToString + "1" + Chr(0).ToString + "{0} - {1}" + Chr(0).ToString + "TEST" + Chr(0).ToString + "TEST") sendMes.cbData = sendMes.lpData.Length + 2 SendMessage(132030, WM_COPYDATA, Nothing, sendMes) End Sub Public Structure COPYDATASTRUCT Const dwData As Integer = 1351 Public cbData As Integer Public lpData As System.Text.StringBuilder End Structure このようにしたところ、SendMessageのところでTypeLoadExceptionを吐いてしまいます。 よろしくお願いします。
752 名前:デフォルトの名無しさん mailto:sage [2006/12/26(火) 20:48:53 ] ・文字コードはそれで大丈夫? ANSIだと sendMes.cbData = sendMes.lpData.Length + 1 だと思うけど。 SendMessageWにしてCharSet = CharSet.Unicodeにし、 その場合 sendMes.cbData = (sendMes.lpData.Length + 1 )*2 ・シグネチャ ByVal lParam As COPYDATASTRUCT → ByRef lParam As COPYDATASTRUCT
753 名前:デフォルトの名無しさん mailto:sage [2006/12/26(火) 20:55:40 ] 回答ありがとうございます。・・・しかし無理でした。COPYDATASTRUCTのlpDataが悪さしているようですが、、、 Const WM_COPYDATA As Integer = &H4A Declare Ansi Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Integer Declare Unicode Function SendMessage Lib "user32.dll" Alias "SendMessageW" (ByVal hWnd As Integer, ByVal MSG As Integer, ByVal wParam As Integer, ByRef lParam As COPYDATASTRUCT) As Integer Sub main() Dim sendMes As New COPYDATASTRUCT sendMes.lpData = _ New System.Text.StringBuilder("TestAPP" + ChrW(0).ToString + "Music" + ChrW(0).ToString + "1" + ChrW(0).ToString + "{0} - {1}" + ChrW(0).ToString + "TEST" + ChrW(0).ToString + "TEST") sendMes.cbData = (sendMes.lpData.Length + 1) * 2 SendMessage(FindWindow("MsnMsgrUIManager", Nothing), WM_COPYDATA, Nothing, sendMes) End Sub Public Structure COPYDATASTRUCT Const dwData As Integer = 1351 Public cbData As Integer Public lpData As System.Text.StringBuilder End Structure
754 名前:デフォルトの名無しさん mailto:sage [2006/12/26(火) 21:04:56 ] もうぶっちゃけちゃうと、 COPYDATASTRUCT.lpData をIntPtrにして文字列をMarshal.AllocHGlobal, Marshal.StringToHGlobalAutoで割り当てる (あとでFreeHGlobal) んで sendMes.cbData = (sendMes.lpData.Length + 1) * 2 COPYDATASTRUCTそのものもMarshal.StructureToPtr, Marshal.StructureToPtrでメモリに割り当てて (あとでFreeHGlobal) そいで SendMessageの第4引数をByVal IntPtrにする。
755 名前:デフォルトの名無しさん mailto:sage [2006/12/26(火) 21:17:52 ] もうこれはあきらめるしか無いのですかね、、、 Const WM_COPYDATA As Integer = &H4A Declare Ansi Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Integer Declare Unicode Function SendMessage Lib "user32.dll" Alias "SendMessageW" (ByVal hWnd As Integer, ByVal MSG As Integer, ByVal wParam As Integer, ByRef lParam As System.IntPtr) As Integer Sub main() Dim sendMes As New COPYDATASTRUCT Dim str As String = "TestAPP" + ChrW(0).ToString + "Music" + ChrW(0).ToString + "1" + ChrW(0).ToString + "{0} - {1}" + ChrW(0).ToString + "TEST" + ChrW(0).ToString + "TEST" Dim ptr As IntPtr sendMes.lpData = System.Runtime.InteropServices.Marshal.AllocHGlobal(System.Runtime.InteropServices.Marshal.StringToHGlobalAuto(str)) sendMes.cbData = (str.Length + 1) * 2 System.Runtime.InteropServices.Marshal.StructureToPtr(sendMes, ptr, True) SendMessage(FindWindow("MsnMsgrUIManager", Nothing), WM_COPYDATA, Nothing, ptr) System.Runtime.InteropServices.Marshal.FreeHGlobal(sendMes.lpData) System.Runtime.InteropServices.Marshal.FreeHGlobal(ptr) End Sub Public Structure COPYDATASTRUCT Const dwData As Integer = 1351 Public cbData As Integer Public lpData As System.IntPtr End Structure
756 名前:デフォルトの名無しさん mailto:sage [2006/12/26(火) 21:20:51 ] ミスしました。 Dim ptr As IntPtr = System.Runtime.InteropServices.Marshal.AllocHGlobal(System.Runtime.InteropServices.Marshal.SizeOf(sendMes)) これだとうまくいくっぽい、、、
757 名前:デフォルトの名無しさん mailto:sage [2006/12/26(火) 21:25:48 ] やっぱりダメでしたorz
758 名前:デフォルトの名無しさん mailto:sage [2006/12/26(火) 21:31:25 ] 一度メッセージ受けるだけのアプリ作ってみれば? とりあえずメッセージとその内容が正しく届いてるか確かめるためにさ。 文字列をマーシャリングするときに\0で終了と認識されてるのかも。 byte配列とかにする必要があるかもね〜
759 名前:デフォルトの名無しさん mailto:sage [2006/12/27(水) 02:51:36 ] こいつの(Cで書かれた)ソースにもコメントに書かれているんだが。 途中の区切文字は"\0"であって、 chr(0)でもchrW(0)でもvbNullCharでもvbNullStringでもString.EmptyでもNothingでもない。 Structure COPYDATASTRUCT Dim dwData As Int32 Dim cbData As Int32 Dim lpData As IntPtr End Structure Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As IntPtr, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal data As IntPtr) As IntPtr Private Declare Ansi Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr Private Sub SongNameSendToMessenger() Dim dtstrct As New COPYDATASTRUCT Dim buf As String = Nothing Const WM_COPYDATA As Integer = &H4A buf = "OrgApp\0Music\01\0{0} - {1}\0曲名\0アーティスト名\0アルバム(シングル)名" & vbNullChar dtstrct.dwData = 1351 dtstrct.cbData = buf.Length * 2 dtstrct.lpData = Marshal.StringToHGlobalUni(buf) Dim MyPointer As IntPtr = Marshal.AllocHGlobal(Marshal.SizeOf(dtstrct)) Marshal.StructureToPtr(dtstrct, MyPointer, False) Dim hWnd As IntPtr = FindWindow("MsnMsgrUIManager", Nothing) Dim ret As IntPtr = SendMessage(hWnd, WM_COPYDATA, 0, MyPointer) Marshal.FreeHGlobal(MyPointer) End Sub
760 名前:デフォルトの名無しさん mailto:sage [2006/12/27(水) 09:04:32 ] ネタだろといわんばかりだ。
761 名前:デフォルトの名無しさん mailto:sage [2006/12/27(水) 18:47:00 ] >>755 たぶんこれでいけるんじゃないかな? なんちゃらメッセンジャーなんてクソ鬱陶しいソフトは使ってないので試してないが、 とりあえずメッセージの送信はこれでできているはずと思う。 見ればわかると思うけど、Formのコマンドボタンのクリックで送信するようになってる。 あと、いろんなところに属性がくっつけてあるけど、あまり考えずテキトーに使っているので たぶん冗長なものがあると思う。 Const WM_COPYDATA As Integer = &H4A <DllImport("user32.dll", CharSet:=CharSet.Unicode)> _ Private Shared Function FindWindow(ByVal lpClassName As String, ByVal lpWindowName As IntPtr) As IntPtr End Function <DllImport("user32.dll", CharSet:=CharSet.Unicode)> _ Private Shared Function FindWindow(ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr End Function <DllImport("user32.dll", CharSet:=CharSet.Unicode)> _ Private Shared Function SendMessage(ByVal hWnd As IntPtr, _ ByVal MSG As Integer, _ ByVal wParam As Integer, _ ByRef lParam As COPYDATASTRUCT) As IntPtr End Function <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode, pack:=4)> _ Public Structure COPYDATASTRUCT Public dwData As Integer Public cbData As Integer <MarshalAs(UnmanagedType.LPWStr)> _ Public lpData As String End Structure
762 名前:デフォルトの名無しさん mailto:sage [2006/12/27(水) 18:47:39 ] Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim sendMes As COPYDATASTRUCT Dim strArray As String() = {"TestAPP", "Music", "1", "{0} - {1}"} Const separator As String = "\0" Dim str As String = String.Join(separator, strArray) Dim byteCount As Integer = Encoding.Unicode.GetByteCount(str) With sendMes .dwData = 1351 .lpData = str .cbData = byteCount + 2 End With 'メモ張のウィンドウハンドルを取得してみる。 Dim hWnd As IntPtr = FindWindow("Notepad", IntPtr.Zero) Console.WriteLine("hWnd = " & hWnd.ToInt32.ToString("X8")) Dim ret As IntPtr = SendMessage(hWnd, WM_COPYDATA, 0, sendMes) Console.WriteLine("SendMessage = " & ret.ToInt32.ToString("X8")) '自分にも同じメッセージを送ってみる。 ret = SendMessage(Me.Handle, WM_COPYDATA, 0, sendMes) End Sub Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message) MyBase.WndProc(m) Select Case m.Msg Case WM_COPYDATA Dim dat As COPYDATASTRUCT _ = CType(Marshal.PtrToStructure(m.LParam, GetType(COPYDATASTRUCT)), COPYDATASTRUCT) Console.WriteLine("Received String = " & dat.lpData) End Select End Sub
763 名前:デフォルトの名無しさん mailto:sage [2006/12/27(水) 19:28:34 ] >>759 ,>>761 ありがとうございます、出来ました。
764 名前:デフォルトの名無しさん mailto:sage [2006/12/27(水) 20:57:03 ] Visual Basic 2005 Express Editionで手軽に使用できるフリーのグラフを描画できるライブラリってありませんかー
765 名前:デフォルトの名無しさん mailto:sage [2006/12/27(水) 23:29:30 ] VB2005には、ExcelのScreenUpdateのように描画を後でまとめて処理する ような関数は用意されているんでしょうか?
766 名前:デフォルトの名無しさん mailto:sage [2006/12/28(木) 19:39:37 ] VB2005で作成したDLLファイルなどのクラスライブラリを使用する Windowsアプリケーションを構成すると、それらのDLLを含む形で Releaseフォルダーが出来上がりますが、それらのDLLファイルを 初めから実行ファイル.exeに入れ込んでしまうようなビルドって できましたっけ?
767 名前:デフォルトの名無しさん mailto:sage [2006/12/28(木) 21:52:06 ] ソリューションのプロパティのコンパイルのところの ビルド出力パスの設定をすればOK
768 名前:デフォルトの名無しさん mailto:sage [2006/12/28(木) 21:52:43 ] じゃないな
769 名前:デフォルトの名無しさん mailto:sage [2006/12/28(木) 21:54:26 ] 出力ディレクトリにコピーというところを する に設定 すればってことか?
770 名前:デフォルトの名無しさん mailto:sage [2006/12/28(木) 22:25:51 ] フォルダごと自己解凍形式のEXEにする
771 名前:デフォルトの名無しさん mailto:sage [2006/12/28(木) 22:37:03 ] >>766 むりぽ
772 名前:デフォルトの名無しさん mailto:sage [2006/12/28(木) 23:24:37 ] >>766 フルマネージドなアセンブリなら、ildasm/ilamsを使って統合できるよ。 バッチを組めば全自動でできる。
773 名前:デフォルトの名無しさん mailto:sage [2006/12/29(金) 00:53:21 ] ILMerge
774 名前:デフォルトの名無しさん mailto:sage [2006/12/29(金) 01:00:58 ] >>773 へーへーへー
775 名前:デフォルトの名無しさん mailto:sage [2006/12/29(金) 13:44:25 ] こんにちは VB2005使ってPACMAN作りたいんですけど どんな風に作ればいいですか? 正方形のPicBOXを並べて中の画像を入れ替えたりするのか それともPicBOXを移動させるべきなんでしょうか・・ 移動させるとなると、どこからどこまで移動できるのかなどは どのように定義してやれば良いんでしょうか;; アドバイスお願いします
776 名前:デフォルトの名無しさん mailto:sage [2006/12/29(金) 13:51:19 ] 作りたいように作れば? どんな風って、中華風のコピーでしょ?
777 名前:デフォルトの名無しさん mailto:sage [2006/12/29(金) 14:09:14 ] >>767-774 ご教授助かります、 >>772 ilasm >>773 ILMerge というのがあったんですね! 現在まだ明確に理解できていませんが、MSIL や JIT 等についても 調べつつありました >>772 ilasm で生成される実行可能ファイル.exe は、MSILファイルをポータブル実行可能 ファイル.exe にするためのアセンブラーで、統合する機能はあるかどうか (参照) msdn2.microsoft.com/ja-jp/library/496e4ekx (VS.80).aspx ・・・単一のファイルのアセンブル用(つまり通常のVS環境で生成される exeと同等のアセンブル用)なのかもしれないかとも思われました >>773 ILMerge こちらですとDLLファイル等をexeファイルに統合するようでした(現状実施未確認) これらと、JITコンパイルとの関係がまだよく理解できていませんでしたが、次のように 考えておいて良いでしょうか? 1.通常VSによるコンパイル=ilasm → ソースからMSILを経て単一の exe や dll へ 2.ILMerge → それら exe や dll を一つにまとめるまでを行い、JITコンパイル相当の アセンブルは行なわれない 3.JITコンパイル → 1や2で作成されるファイルはすべて実行時に初めてマシン固有の 機械語に落ちる
778 名前:デフォルトの名無しさん mailto:sage [2006/12/29(金) 14:16:41 ] >>777 これに関連してですが、一旦 ILMerge で作成された統合実行ファイル exe は、 もはや ildasm で 逆コンパイルすることはできないのでしょうか? もし逆コンパイルできないようになってしまう場合は、リバースエンジニアリング不能に なってソースのセニュリティ上は都合がいいかもしれませんが・・・
779 名前:デフォルトの名無しさん mailto:sage [2006/12/29(金) 14:21:41 ] なんかかわいいな、せにゅりてぃ
780 名前:デフォルトの名無しさん mailto:sage [2006/12/29(金) 15:10:18 ] 単にILのコードを繋げるだけじゃないの
781 名前:777 mailto:sage [2006/12/29(金) 17:53:30 ] ILMerge を使って試しに1本のファイルを作ってみたところ、確かにそれ1本だけで動作しました。 >>780 どうも’MSIL へのコンパイル ’ msdn2.microsoft.com/ja-jp/library/c5tkafs1 (VS.80).aspx によりますと、 ------- ”MSIL とメタデータは、実行可能ファイルのファイル形式として使用されてきた従来の Microsoft PE と COFF (Common Object File Format) に基づき、それらを拡張したポータブル実行可能 (PE) ファイル に格納されます。 MSIL、ネイティブ コード、およびメタデータを保存できるこのファイル形式を使用すると、オペレーティング ~~~~~~~~~~~~~~~~~~ システムが共通言語ランタイムのイメージを認識できるようになります。MSIL と共にメタデータが このファイルに格納されるため、コードは自己記述型になります” ------- とあり、どうも VS開発環境 および ilasm が出力する exe ファイルそのものが、 「ポータブル実行可能 (PE) ファイル」 であり、ということはその中にすでに ネイティブ コード が埋め込まれているかのような説明に読め ましたが、現実にPE形式のファイルにはすでに JITコンパイルされた後にできるはずの ネイティブ コード が含まれてしまっているのでしょうか?
782 名前:デフォルトの名無しさん mailto:sage [2006/12/29(金) 18:06:32 ] C++/CLIとかで意図的にネイティブコードを混ぜることができることを指してるのかな
783 名前:デフォルトの名無しさん mailto:sage [2006/12/29(金) 19:29:56 ] >>781 あんまり俺解釈するな。
784 名前:777 mailto:sage [2006/12/29(金) 19:44:57 ] >>782 あ、なるほど、そういうことか、であればJITコンパイルで出来上がるネイティブ・コードが 含まれていることはなさそうですよね ということは、結局MSILレベルで複数のexeやdllがうまく結合されて1本にまとまっている ということになり、逆にいえばコードの構造は ildasm (逆アセンブル)可能となって >>778 のリバース読み込みも不可能ではない、ということになるのかも 結局、「MSIL → *.exe」 を行なっている ilasm は 「実際にはアセンブルというほど ”コード変換” は行なっていない」 ということなのか・・・