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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

全過去ログを検索

<< 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 >>
■88241  音声合成の声のリストを全て表示する方法(C#の回答でもOK)
□投稿者/ ポップコーン -(2018/08/12(Sun) 11:45:30)

    分類:[VB.NET/VB2005 以降] 

    Win 10、Visual studio express 2015  for windows desktopで
    音声合成のプログラムを作成しています。
    全ての声のリストが表示されずに困っています。

    FormにComboBoxとButtonが一つのみあり、
    以下プログラムを走らせると
    Microsoft Zira Desktop
    Microsoft Haruka Desktop
    の2つコンボボックスに表示されますが、

    windowsの設定から音声を見てみると6つ声が選べるようになっています。
    (widowsの設定>>時刻と言語>>音声認識)


    音声合成はできたのですが、全ての声のリストを表示する方法をご存知でしたらお願いいたします。



    (参照追加でアセンブリでsystem.speechを追加)
    Imports System.speech.Synthesis

    Public Class Form1
    Dim vs As New SpeechSynthesizer
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    For Each v In vs.GetInstalledVoices
    ComboBox1.Items.Add(v.VoiceInfo.Name)
    Next
    ComboBox1.SelectedIndex = 0
    End Sub

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    vs.SelectVoice(ComboBox1.Text)
    vs.Speak("Hello My name is" & ComboBox1.Text)
    End Sub
    End Class


    以下サイトを参考にMicrosoft Speech Platform - Runtime (Version 11) はインストールしてあります。
    http://mahoro-ba.net/e1541.html

    どうぞよろしくお願いします。
親記事 /過去ログ152より / 関連記事表示
削除チェック/

■88247  二つのフォームアプリケーションを合体させる方法
□投稿者/ じょしい -(2018/08/14(Tue) 14:10:23)

    分類:[VB.NET/VB2005 以降] 


    VB2015で作成したフォームアプリケーションのプロジェクトが二つあります。
    これらを統合して一つのプロジェクト(フォームは二つ混在する状態)にしたいのですが
    どのようにすれば良いですか?

    https://social.msdn.microsoft.com/Forums/ja-JP/b1fffb8f-c5fd-44ce-ba8a-ca92b134123a/vb?forum=vbgeneralja

    このページを参考に、

    1.ソリューションエクスプローラーでプロジェクトAに新規でフォルダFを作成する。

    2.エクスプローラーでプロジェクトBから必要なファイルをフォルダFにコピーする。

    3.ソリューションエクスプローラーでフォルダFを右クリックして、追加→既存の項目 と進み、先ほどコピーしたファイルをプロジェクトに追加する。

    という操作をしてみました。

    しかし、コピーしたフォームを開いてみたのですが
    テキストボックスやコンボボックスが表示されず
    白紙の状態です。

    また、二つのプロジェクトで両方ともフォームの名前をForm1としているため
    競合してしまい、エラーが出てしまいました。
    これはフォームの名前を変えるしかないでしょうか?

    一体どうすれば良いですか?

親記事 /過去ログ152より / 関連記事表示
削除チェック/

■88259  二つのコードを同時に実行するにはどうしたらいいですか?
□投稿者/ クマムシ -(2018/08/16(Thu) 20:07:28)

    分類:[VB.NET/VB2005 以降] 

    VB.NETを使って、ある装置の制御プログラムを書いています。

    その中で二つのコードを同時に実行したいのですが
    どのようにすれば良いですか?

    すぐに思いついた方法は以下のように

    Task.Factory.StartNew(
    Sub()

    コードA

    End Sub)

    コードB

    マルスレッドにして、
    二つのコードを投げる方法です。
    しかし、この方法だと、コードAが実行されてから
    コードBが実行されるまでの間にミリ秒オーダーでタイムラグが発生すると思います。

    どうにか同時に実行したいのですが
    どのようにすれば良いでしょうか?




親記事 /過去ログ152より / 関連記事表示
削除チェック/

■88275  CF2.0でのFilePut,FileGet
□投稿者/ T44 -(2018/08/17(Fri) 16:21:08)

    分類:[VB.NET/VB2005 以降] 

    開発環境(Windows7/64bit/Visual Studio 2008/CompactFramework2.0)

    CompactFramework2.0で、FilePut,FileGetを使用したいのですが、
    色々と調べた所、対応していない様なのですが、
    何か、代替え案はありますでしょうか。
親記事 /過去ログ152より / 関連記事表示
削除チェック/

■88322  別のフォームデータをもう一つのフォームに移植したい
□投稿者/ オポチュニティー -(2018/08/20(Mon) 21:18:25)

    分類:[VB.NET/VB2005 以降] 

    以前、同じプロジェクト内に2つのフォームを作成し、切替ボタンをフォーム1につけ、clickEventで切り替えていたらしいのですが、訳あって1つのフォームにまとめてほしいと、未経験の私が行うことになりまして、困っている次第です。><;

    素人ながら、TABcontrolを使い、フォーム2の画面をフォーム1に移植しようと考えていましたが、そう単純ではなさそうなお話でした、ご教示お願いします。
親記事 /過去ログ152より / 関連記事表示
削除チェック/

■88409  改行せずに書き込み
□投稿者/ なつ -(2018/08/27(Mon) 19:29:22)

    分類:[VB.NET/VB2005 以降] 

    たまにしかしませんのですっかり忘れてしまいました。

    これですと全てが改行をされ書き込まれます。
    改行をせずに書き込むにはどうすれば良かったのでしょうか?

    For i = 0 To 5
    sr1.WriteLine(i)
    For ii = i To i + 1
    sr1.WriteLine(ii)
    Next
    Next
親記事 /過去ログ152より / 関連記事表示
削除チェック/

■88404  漢字の文字列の読みを取得したい
□投稿者/ アニス -(2018/08/27(Mon) 18:08:31)

    分類:[VB.NET/VB2005 以降] 

    開発環境:VB2013 対象OS:Windows7, Windows10
    WinFormアプリ開発

    こんにちは。アニスです。
    .NETで、漢字文字列の読みを取得する方法はありますか?
    複数の読み方がある場合はそのどれかにマッチすればよいです。
    また、本来の読み方に変換されない場合もあろうかと思いますが、
    ある程度の誤変換を考慮してこちらで検討します。
親記事 /過去ログ152より / 関連記事表示
削除チェック/

■88418  Word上でIMEの変換確定を検出したい
□投稿者/ アニス -(2018/08/28(Tue) 16:25:34)

    分類:[VB.NET/VB2005 以降] 

    2018/08/28(Tue) 16:32:19 編集(投稿者)

    (書き込み途中で送信してしまいました。スミマセン)

    開発環境:VB2013 対象OS:Windows7, Windows10
    WinFormアプリ開発

    お世話になっております。アニスです。
    VB側からWordを操作することを試みています。
    現在は遅延バインドでWord操作を行っていますが、
    今後はVSTOアドインを検討しています。

    ところで、Wordに文字を入力する時の、IMEの変換確定を検出する方法はありますか?
    WinFormであれば、WM_IME_COMPOSITIONというメッセージを検出すればよいらしいのですが、
    Excel上ではこの方法が使えない、という情報があり、Wordもそうなのかな、と思っているのですが、何か良い方法があればアドバイスをお願いします。
親記事 /過去ログ152より / 関連記事表示
削除チェック/

■88474  日付の変換
□投稿者/ なつ -(2018/09/03(Mon) 00:30:10)

    分類:[VB.NET/VB2005 以降] 

    またまた初歩的な質問ですみません。

    下記を4点を出来るだけ簡単に変換をする方法はありませんか?

    @ "2018/09/03" を "20180903" に変換。
    その逆の
    A "20180903" を "2018/09/03" に変換。

    B "2018/9/3" を "2018/09/03" に変換。
    その逆の
    C "2018/09/03" を "2018/9/3" に変換。
親記事 /過去ログ152より / 関連記事表示
削除チェック/

■88513  出力ウインドウの文字化け
□投稿者/ まっさん -(2018/09/05(Wed) 11:02:07)

    分類:[VB.NET/VB2005 以降] 

    Visual Studioの設定について、教えてください。
    Visual Basic 2010 Expressを利用しています。

    例えば、以下のようなコードで出力ウインドウに出力した時、
    文字化けしてしまいます。(「&#9251;」が「?」表示になる)
    Console.WriteLine(ChrW(&H2423))

    出力ウインドウで文字化けしないような設定はどこかで、できるのでしょうか?
親記事 /過去ログ152より / 関連記事表示
削除チェック/

■88633  DataGridViewの不正値チェック
□投稿者/ まっさん -(2018/09/12(Wed) 13:43:46)

    分類:[VB.NET/VB2005 以降] 

    環境:VB2010 Windowsフォームアプリ

    以下のような事を実現したいのですが、
    (1)DataGridViewにユーザーが不正な値を入力した場合はエラーアイコンを表示
    (2)セルの値が不正でなくなったら、エラーアイコンを消去

    DataErrorをハンドリングして以下のようなコードで実験してみましたが、
    もう一工夫したい点がいくつかあります。
    (下記コードでDataGridViewのC1列にInteger以外を入力した場合の話です。)

    (a)ESCキー押下で入力をキャンセルした場合、エラーアイコンが消えない。
    (b)不正な値を入力してEnterキー押下で不正文字を選択状態にしたい。
    (c)エラーアイコンを行ヘッダに表示しているが、できればセルに表示したい。

    (c)は無理っぽい感じがしますが、上記を実現するにはどうすればいいでしょうか?

    ’-----------------------以下、実験コード-----------------------
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    Dim dt As New DataTable
    dt.Columns.Add("C1", GetType(Integer))
    dt.Rows.Add(1)
    dt.AcceptChanges()
    DataGridView1.DataSource = dt
    End Sub
    Private Sub DataGridView1_DataError(sender As Object, e As System.Windows.Forms.DataGridViewDataErrorEventArgs) Handles DataGridView1.DataError
    DataGridView1.Rows(e.RowIndex).ErrorText = "セルの値を確認してください。"
    e.Cancel = True
    End Sub
    Private Sub DataGridView1_CellValidating(sender As Object, e As System.Windows.Forms.DataGridViewCellValidatingEventArgs) Handles DataGridView1.CellValidating
    If DataGridView1.Rows(e.RowIndex).ErrorText IsNot String.Empty Then
    DataGridView1.Rows(e.RowIndex).ErrorText = String.Empty
    End If
    End Sub
親記事 /過去ログ152より / 関連記事表示
削除チェック/

■88574  フォルダ名とその更新日時を一緒に収得
□投稿者/ なつ -(2018/09/08(Sat) 17:52:08)

    分類:[VB.NET/VB2005 以降] 

    2018/09/08(Sat) 17:53:26 編集(投稿者)

    Windows 10、VB 2017 です。
    またまた初歩的な質問ですみません。

    あるフォルダ内に存在する、全てのフォルダ名とその更新日時を同時に収得するにはどのようにすれば良いのでしょうか?
    あくまでも別々にではなく同時にての収得でお願いします。
親記事 /過去ログ152より / 関連記事表示
削除チェック/

■88613  Re[8]: フォルダ名とその更新日時を一緒に収得
□投稿者/ 魔界の仮面弁士 -(2018/09/10(Mon) 23:42:40)
    No88608 (なつ さん) に返信
    > 既に頭の中は混乱状態、思ってたよりは随分とややっこしいのですね。

    No88585 の時点で、DirectoryInfo にどういうメンバーが含まれているかは調査済みで、
    それでも調査しきれなかったという点についても、追加質問に対して、短いコード例を
    つけて回答したので、それで分かってもらえるものと思い込んでいました。反省。


    DirectoryInfo にどんなメンバーがあるかは、DataGridView に渡すことで一覧できます。
    DirectoryInfo のプロパティに、日付情報も同時に記録されていることが一望できるかと。

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
      Dim sDir As String = "C:\Users\○○○\○○○\SONY NNC\SNNC30"
      DataGridView1.DataSource = New DirectoryInfo(sDir).GetDirectories("*", SearchOption.AllDirectories)
    End Sub


    上記では、コントロールに表示するために GetDirectories を使いましたが、
    No88598 でも述べたように、 EnumerateDirectories を使って LINQ や For Each での
    順次列挙を行うこともできます。


    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
     Dim sDir As String = "C:\Users\○○○\○○○\SONY NNC\SNNC30"
     For Each di In New DirectoryInfo("C:\TEST").EnumerateDirectories("*", SearchOption.AllDirectories)
       Debug.WriteLine($"作成={di.CreationTime}, 更新={di.LastWriteTime}, パス={di.FullName}")
     Next
    End Sub

    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
     Dim sDir As String = "C:\Users\○○○\○○○\SONY NNC\SNNC30"
     For Each di In New DirectoryInfo("C:\TEST").GetDirectories("*", SearchOption.AllDirectories)
       Debug.WriteLine($"作成={di.CreationTime}, 更新={di.LastWriteTime}, パス={di.FullName}")
     Next
    End Sub

    Button2 は EnumerateDirectories による列挙、
    Button3 は GetDirectories による列挙にしてあります。

    いずれも Debug.WriteLine により、「イミディエイト」ウィンドウもしくは「出力」ウィンドウに
    作成日時、更新日時、ディレクトリ名を列挙するだけの処理です。


    sDir に、フォルダ数が多いパスを与えてみてください。
    EnumerateDirectories ではすぐに列挙が始まるのに、
    GetDirectories では列挙開始まで時間がかかってしまいます。


    また、sDir に "C:\Windows" などを与えると、アクセス権の問題から
    例外で停止してしまうことになります。これが No88598 で述べていた注意点です。
    >> UnauthorizedAccessException 例外等により、処理が中断されてしまうことになります。



    > Dim x As IEnumerable(Of String) = System.IO.Directory.EnumerateDirectories("C:\Users\○○○\○○○\SONY NNC\SNNC30", "*", System.IO.SearchOption.AllDirectories)
    > ただ疑問なのは、x は 同じString でありながらも、
    同じ…では無いですよね?
    x の型は「String」でも「String()」でもなく、「IEnumerable(Of String)」なのですから。



    > 何故か ListBox1.Items.AddRange(x) とは出来ないのかです。
    AddRange メソッドの引数に渡せる型は「Object()」だからですね。
    (Hongliang さんの回答にあるとおり、もう一つのオーバーロードもありますが)

    でもって、IEnumerable(Of String) は一次元配列ではありませんから、
    Object() に変換することができません。ゆえに、AddRange には渡せないということです。


    配列化するために『ListBox1.Items.AddRange(x.ToArray())』のように呼べば渡せますが、
    それなら最初から、EnumerateDirectories ではなく GetDirectories を使えば済みますね。


    ただし LINQ で再加工するような処理においては、EnumerateDirectories の方が良いでしょう。


    Dim q = From di In New DirectoryInfo(sDir).EnumerateDirectories("*", SearchOption.AllDirectories)
        Select $"作成={di.CreationTime}, 更新={di.LastWriteTime}, パス={di.FullName}"

    ListBox1.Items.AddRange(q.ToArray())



    > NET Framework は4.0のようです。
    NET ではなく .NET (ドットネット) ですね。

    Jitta さんの回答に補足して、.NET Framework のライフサイクルの表を載せておきます。
    (.NET Framework 4 / 4.5 / 4.5.1 のサポートは、2016 年 1 月 12 日で終了しています)


    4.7.2 → 2018/02/05 ライフサイクル開始、サポート中(OS のサポート期限まで)★現在の最新版★
    4.7.1 → 2017/10/17 ライフサイクル開始、サポート中(OS のサポート期限まで)
    4.7  → 2017/04/05 ライフサイクル開始、サポート中(OS のサポート期限まで)
    4.6.2 → 2016/08/02 ライフサイクル開始、サポート中(OS のサポート期限まで)
    4.6.1 → 2015/11/30 ライフサイクル開始、サポート中(OS のサポート期限まで)
    4.6  → 2015/07/20 ライフサイクル開始、サポート中(OS のサポート期限まで)
    4.5.2 → 2014/05/05 ライフサイクル開始、サポート中(OS のサポート期限まで)
    4.5.1 → 2013/09/07 ライフサイクル開始、2016/01/12 で既にサポート切れ
    4.5  → 2012/08/05 ライフサイクル開始、2016/01/12 で既にサポート切れ
    4.0  → 2010/03/31 ライフサイクル開始、2012/03/04 Update 3(4.0.3)、2016/01/12 で既にサポート切れ
    3.5  → 2007/11/19 ライフサイクル開始、2008/11/18 Service Pack 1(3.5.1)、サポート中(OS のサポート期限まで)
    3.0  → 2006/11/19 ライフサイクル開始、2008/08/12 Service Pack 2、2011/07/12 で既にサポート切れ
    2.0  → 2005/11/07 ライフサイクル開始、2009/01/16 Service Pack 2、2011/07/12 で既にサポート切れ
    1.1  → 2003/04/01 ライフサイクル開始、2004/09/09 Service Pack 1、2013/10/08 で既にサポート切れ
    1.0  → 2002/01/05 ライフサイクル開始、2004/09/09 Service Pack 3、2009/07/14 で既にサポート切れ

    ※ライフサイクルの開始日は、リリース日とは異なります。


    4.7.2 を同梱している OS → Windows 10 ver1803
    4.7.1 を同梱している OS → Windows 10 ver1709
    4.7  を同梱している OS → Windows 10 ver1703
    4.6.2 を同梱している OS → Windows 10 ver1607
    4.6.1 を同梱している OS → Windows 10 ver1511
    4.6  を同梱している OS → Windows 10 ver1507
    4.5.2 を同梱している OS → なし
    4.5.1 を同梱している OS → Windows 8.1
    4.5  を同梱している OS → Windows 8
    4.0  を同梱している OS → なし
    3.5.x を同梱している OS → Vista 〜 Windows 10
    3.0  を同梱している OS → Vista 〜 Windows 10
    2.0  を同梱している OS → Vista 〜 Windows 10
    1.1  を同梱している OS → なし
    1.0  を同梱している OS → なし
記事No.88574 のレス /過去ログ152より / 関連記事表示
削除チェック/

■88654  末尾に追加ではなくテキストファイルに追記するには
□投稿者/ なつ -(2018/09/15(Sat) 10:14:04)

    分類:[VB.NET/VB2005 以降] 

    Windows 10、VB 2017 です。
    またまた変な質問ですみません。

    こんなことは出来ませんよね?

    仮に100件のデータが入ったテキストファイルがあったとします。
    普通は下記のようにして追記をする訳ですが、これを何とかして95件目からの追記には出来ないでしょうか?
    もちろん全てを一度読み込んでの上書きとかではなくて。

    Using sr As New System.IO.StreamWriter(fileName, True, System.Text.Encoding.Default)
    sr1.Write(
親記事 /過去ログ152より / 関連記事表示
削除チェック/

■88761  Re[3]: グループ別に連番取得する方法を押してください。
□投稿者/ 魔界の仮面弁士 -(2018/09/25(Tue) 12:25:01)
    2018/09/25(Tue) 13:44:09 編集(投稿者)

    No88760 (夜叉丸 さん) に返信
    > わたしの VisuzlStudio での SQLビューワーでは
    > ROW_NUMBER はサポートされていませんと表示されます。
    Visual Studio のクエリデザイナーは、比較的単純な SQL しか処理できないので、
    あまり当てにしない方が良いかも。


    > ROW_NUMBER がサポートされていないバージョン以前では
    SQL Server 2005 の時点で、ROW_NUMBER 窓関数は使えていましたよね。
    https://starzero.hatenablog.com/entry/20100524/1278244716


    ROW_NUMBER 関数を使わない手法としては、こんなのとか。
    パフォーマンスは落ちますけれども。

    SELECT TBL1.F1, TBL1.F2, C = 1 + (
    SELECT COUNT(*) FROM TBL AS WK
    WHERE WK.F1 = TBL1.F1 AND WK.F2 < TBL1.F2)
    FROM TBL AS TBL1
    ORDER BY TBL1.F1, TBL2.F2
記事No.88758 のレス / END /過去ログ152より / 関連記事表示
削除チェック/

■88324  Re[8]: インストーラ Microsoft SetupProject
□投稿者/ とっちゃん -(2018/08/20(Mon) 22:41:54)
    No88319 (ぽんすけ さん) に返信
    > 上記エラーの件は、別のマシンで実行させてみると発生いたしませんでした。
    > マシン固有の環境問題であったようです。
    > どうもすみませんでした。
    >
    マダムヤンさんも書いていますが、環境問題で片付けてしまっても問題ありませんか?
    結果的にはその環境では使えないということになりますが、それで問題ないのでしょうか?


    > あと、別件でお伺いいたしたいことがございます。
    > SetupProjectにlocalDBもコンポーネントに入れているのですが、
    > setUp時に、データベースの構築もできますでしょうか。
    >
    > インストールが終了後にSQL server オブジェクトエクスプローラから
    > データベースの作成、テーブルの作成を行っていますが、
    > これらをセットアッププロジェクト内に組み込むことができるなら・・・と
    > 現在調査中です。
    > ご存知であればご教示くださいますようお願い申し上げます。
    >
    localDBをプログラム的に(C#でよい)登録する方法はわかりますか?
    それがわかるのであれば、System.Configuration.Install.Installer クラスを使って
    カスタム動作を用意し、そこで登録処理を行います。

    Installer クラスのリファレンスに簡単な解説が出ているのでリンクを張っておきます。
    https://msdn.microsoft.com/ja-jp/library/system.configuration.install.installer.aspx

    VS2005〜2010 までの記事であればバージョンを問わず使用方法等は変わらないので
    さらに詳しいことは検索してみてください。


    もし、プログラム的に設定する方法がわからないという場合は、学習するかあきらめるか。。。
    となります。
    また、SQL Server にLocalDBを登録する方法を知りたい場合はこのスレではなく別途質問を上げたほうがいいでしょう。
    その際、最終的にインストール時に行いたいというゴールも示しておくとよいと思いますよ。
記事No.88086 のレス /過去ログ152より / 関連記事表示
削除チェック/

■88771  大きな数値のcsvファイルへの書き込み
□投稿者/ なつ -(2018/09/25(Tue) 21:17:33)

    分類:[VB.NET/VB2005 以降] 

    いつも初歩な質問ですみません。
    Windows 10、VB 2017 、csvファイルです。


    下記を実行し Excelまたはメモ帳で開くと、どちらも 2.07835E+09 となりますが、
    これをそのまま 2078350000 にするにはどのようにすれば良いのですか?

    Using sr As New System.IO.StreamWriter(filename, False, System.Text.Encoding.Default)
    Dim dat As Single = 2078350000
    sr.WriteLine(dat)
    sr.Close()
    End Using
親記事 /過去ログ153より / 関連記事表示
削除チェック/

■88838  ObjectDisposedExceptionの対策について
□投稿者/ fragile -(2018/10/03(Wed) 22:33:41)

    分類:[VB.NET/VB2005 以降] 

    vb.netでOdbcConnection及びOdbcCommandを使用して
    SQLServer2016を操作するソフトを作成していたのですが、
    テーブルのupdateを行うストアドプロシージャ実行時に以下のエラーが
    稀に発生して失敗してしまい、対処方法分かれば教えていただきたい次第です。

    環境は以下の通りとなります。
    [PC]
    Windows8.1(アクセス側)
    SQL Server2012(DB側)

    [開発言語]
    vb 2012


    2018-10-02 13:58:41,220 [5736] [ERROR] 20181002_135841_220 [Int32 intExecuteStoredProc(System.String, System.Data.ParameterDirection[], System.String[], System.Data.Odbc.OdbcType[], Int32[], System.Object[])] :System.ObjectDisposedException: セーフ ハンドルは閉じられています。
    場所 System.Runtime.InteropServices.SafeHandle.DangerousAddRef(Boolean& success)
    場所 System.Data.Odbc.OdbcHandle..ctor(SQL_HANDLE handleType, OdbcHandle parentHandle)
    場所 System.Data.Odbc.OdbcConnectionHandle..ctor(OdbcConnection connection, OdbcConnectionString constr, OdbcEnvironmentHandle environmentHandle)
    場所 System.Data.Odbc.OdbcConnectionOpen..ctor(OdbcConnection outerConnection, OdbcConnectionString connectionOptions)
    場所 System.Data.Odbc.OdbcConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject)
    場所 System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup, DbConnectionOptions userOptions)
    場所 System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection)
    場所 System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
    場所 System.Data.ProviderBase.DbConnectionInternal.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
    場所 System.Data.Odbc.OdbcConnection.Open()
    場所 GUID_Ctrl.clsDBAccess.intExecuteStoredProc(String strProcName, ParameterDirection[] ParamDirection, String[] strParam, OdbcType[] typParamType, Int32[] intParamLen, Object[] objParamValue)
    2018-10-02 13:58:41,236 [5736] [ERROR] 【Err-Date】
    2018/10/02 13:58:41
    【Err-Info】
    System.Exception: System.ObjectDisposedException: セーフ ハンドルは閉じられています。
    場所 System.Runtime.InteropServices.SafeHandle.DangerousAddRef(Boolean& success)
    場所 System.Data.Odbc.OdbcHandle..ctor(SQL_HANDLE handleType, OdbcHandle parentHandle)
    場所 System.Data.Odbc.OdbcConnectionHandle..ctor(OdbcConnection connection, OdbcConnectionString constr, OdbcEnvironmentHandle environmentHandle)
    場所 System.Data.Odbc.OdbcConnectionOpen..ctor(OdbcConnection outerConnection, OdbcConnectionString connectionOptions)
    場所 System.Data.Odbc.OdbcConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject)
    場所 System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup, DbConnectionOptions userOptions)
    場所 System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection)
    場所 System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
    場所 System.Data.ProviderBase.DbConnectionInternal.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
    場所 System.Data.Odbc.OdbcConnection.Open()
    場所 GUID_Ctrl.clsDBAccess.intExecuteStoredProc(String strProcName, ParameterDirection[] ParamDirection, String[] strParam, OdbcType[] typParamType, Int32[] intParamLen, Object[] objParamValue)
    場所 GUID_Ctrl.clsDBAccess.intExecuteStoredProc(String strProcName, ParameterDirection[] ParamDirection, String[] strParam, OdbcType[] typParamType, Int32[] intParamLen, Object[] objParamValue)
    場所 GUID_Ctrl.GpubDBModule.sp_SetTcRireki(Char BothTypeNo, Int32 BothNo, DateTime StartTime, String HistoryState)



    よろしくお願いします。
親記事 /過去ログ153より / 関連記事表示
削除チェック/

■88878  C++ Navigate2 画面更新後のHTMLDocume
□投稿者/ びぎなー青ドンちゃん -(2018/10/09(Tue) 12:30:25)

    分類:[C/C++] 

    2018/10/09(Tue) 17:35:41 編集(投稿者)
    2018/10/09(Tue) 17:35:30 編集(投稿者)


    環境:Windows 10
       Visula Studio 2005
       C++
    Win32


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

    前回C#のWebBrrowserを使用して画面監視し
    submitをする件ではご回答いただきありがとうございました。


    今回はVC++で同じことができないか挑戦中です。
    表示中画面の最新HTMLの情報を取得したいのですがうまくいきません。

    ※参考サイト「http://www.nitoyon.com/vc/tips/ie_component.htm


    <やりたいこと>
    画面上に作ったボタン「hwndChkButton」を押下し
    表示中の画面を数秒おきに更新して
    新しいリンク先「a href〜〜」があるかどうかを確認したい。

    <うなくいかない点>
    同じURLに対して「pWB2->Navigate2」をしても更新されず
    前回の情報のまま



    以下コードの一部です。
    //--------------------------------------------------------------------------

    LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
    {
    static CComQIPtr<IWebBrowser2> pWB2 ;
    static HWND hwndIE;
    static HWND hwnChkButton ;



    //------------------------------------------
    HRESULT hr = ::CoInitialize(NULL); //COMを使うときのお約束
    if (FAILED(hr)) {
    return -1;
    }

    //------------------------------------------
    switch (iMsg)
    {
    case WM_CREATE :
    {
    AtlAxWinInit();


    hwndIE = CreateWindow("AtlAxWin80", "Shell.Explorer.2", WS_CHILD|WS_VISIBLE, 10, 10, 500, 300,
    hwnd, (HMENU)0, GetModuleHandle(NULL), NULL);

    hwndChkButton = CreateWindow("button", "BUY", WS_CHILD|WS_VISIBLE|BS_DEFPUSHBUTTON, 0, 0, 0, 0,
    hwnd, (HMENU)3, GetModuleHandle(NULL), NULL);


    // ActiveXコントロールのインターフェースを要求
    CComPtr<IUnknown> punkIE;
    if (AtlAxGetControl(hwndIE, &punkIE) == S_OK)
    {
    // IUnknownポインタからIWebBrowser2ポインタへキャスト
    pWB2 = punkIE;

    if(pWB2)
    {
    // シンクオブジェクトの作成
    CComObject<CIESink>* sink;
    CComObject<CIESink>::CreateInstance(&sink);

    // イベントをDispatchするよう、IEコントロールにお願い
    HRESULT hr = sink->AdviseToIE(punkIE);
    if(SUCCEEDED(hr))
    {
    // ホームページへ移動
    pWB2->GoHome();
    return 0;
    }
    }

    MessageBox(hwnd, "初期化に失敗", "", MB_OK) ;
    EndDialog(hwnd, 0);
    }

    return 0 ;
    }

    case WM_SIZE :

    MoveWindow(hwndChkButton, LOWORD(lParam) - 120, 0, 60, 30, TRUE) ;
    return 0 ;



    case WM_COMMAND:

    if((HWND)lParam == hwndChkButton)
    {

    VARIANT_BOOL pOK = VARIANT_FALSE;

    do{

    strText2="http://〇〇〇/△△△/□□□"
    CComVariant vempty, vUrlTTEST(strText2);
    pWB2->Navigate2(&vUrlTTEST, &vempty, &vempty, &vempty, &vempty );

    CComPtr<IDispatch> pdisp;
    CComQIPtr<IHTMLDocument2> pDocW;

    while(1)
    {
    HRESULT hr = pWB2->get_Document(&pdisp);
    if(SUCCEEDED(hr) && pdisp != NULL)
    {
    pDocW = pdisp;
    if(pDocW != NULL)
    {
    break;
    }
    }
    Sleep(100);
    }


    SHDocVw::IWebBrowser2Ptr pIE;

    pIE = FindIE(hwnd); //WebBrowserを取得する

    //HTMLドキュメント取得
    MSHTML::IHTMLDocument3Ptr pDoc = pIE->GetDocument();

    MSHTML::IHTMLDocument3Ptr pDoc1 = pDoc;


    BSTR bstrId = SysAllocString(_TEXT(L"div"));
    MSHTML::IHTMLElementCollectionPtr elementp;
    //elementp=doc3p->getElementsByTagName(bstrId);
    elementp = pDoc1->getElementsByTagName(bstrId);


    //-----------------------------------------------------------
    //
    //※「a hrefの"http://ddd/eee/fff" を取得」
    //
    //getAref="http://ddd/eee/fff";
    //
    //
    //-----------------------------------------------------------


    //保持していた「tmpAref="http://aaa/bbb/ccc"」と上記で取得したgetArefを比較
    if( strcmp( _bstr_t(tmpAref), _bstr_t(getAref) )== 0 ){

    pOK == VARIANT_FALSE;

    //*************************************************************
    //*************************************************************
    //画面を更新し最新のHTMLを取得したい・・・・・が更新前の情報のまま
    pWB2->Navigate2(&vUrlTTEST, &vempty, &vempty, &vempty, &vempty );
    //*************************************************************
    //*************************************************************

    }
    else{

                        
                        //submit処理へ

                        //ループを抜ける
    pOK == VARIANT_TRUE;


    }


    Sleep(1000);


    }while(pOK == VARIANT_FALSE);

    }



    SHDocVw::IWebBrowser2Ptr FindIE(HWND hwnd)
    {
    MSHTML::IHTMLDocumentPtr pDoc = FindHtmlDocument(hwnd);
    if (pDoc != NULL) {
    return FindWebBrowser(pDoc);
    }
    return NULL;
    }





    他の方のサイトを調べて勉強中ですが行き詰りました。
    どのようにすれば画面を更新させることができますでしょうか。

    何卒ご協力、ご教示頂きたく宜しくお願い致します。
親記事 /過去ログ153より / 関連記事表示
削除チェック/

■88900  あるプログラムのFormにあるChartなどをコピー
□投稿者/ なつ -(2018/10/11(Thu) 16:35:22)

    分類:[VB.NET/VB2005 以降] 

    Windows 10、VB 2017 です。
    またまた変な質問ですみません。

    あるプログラムのFormにあるChartなどをコピーし、他のプログラムに移したいのですが出来ません。
    同じプログラム内であれば出来ます。

    どうすれば良いのか教えてください。
    よろしくお願いします。
親記事 /過去ログ153より / 関連記事表示
削除チェック/

次の20件>

<< 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 >>

ヒット件数が多いので過去ログ152〜164 までの検索結果 / 過去ログ165からさらに検索→

パスワード/

- Child Tree -