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

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

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

全過去ログを検索

<< 0 >>
■35068  Re[1]: InternetExplorerを強制終了させたい
□投稿者/ 魔界の仮面弁士 -(2009/04/18(Sat) 18:37:59)
    2009/04/18(Sat) 18:47:47 編集(投稿者)

    No35067 (W さん) に返信
    > たとえばButton1を押した後にInternetExplorerを強制終了(タスクマネージャで言うプロセスの終了)をさせたいのですが

    フォームに、ListBox と Button を貼っておいてください。


    Option Strict On
    Imports Item = System.Collections.Generic.KeyValuePair(Of Object, String)
    Imports System.Runtime.InteropServices
    Public Class Form1

    Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
    If ListBox1.SelectedIndex > 0 Then
    CloseIE(ListBox1.SelectedIndex)
    End If
    End Sub

    Private Sub CloseIE(ByVal index As Integer)
    Dim item As Item = DirectCast(ListBox1.Items(index), Item)
    Dim internetExplorer As Object = item.Key
    Dim LocationURL As String = CallByName(internetExplorer, "LocationURL", vbGet).ToString()
    Dim locationName As String = item.Value
    Dim message As String = "ブラウザを閉じますか?" & vbCrLf & locationName & vbCrLf & LocationURL
    If MessageBox.Show(message, "IE終了", MessageBoxButtons.YesNo, MessageBoxIcon.Question) _
    = System.Windows.Forms.DialogResult.Yes Then
    ListBox1.Items.RemoveAt(index)
    CallByName(internetExplorer, "Quit", vbMethod)
    Marshal.ReleaseComObject(internetExplorer)
    End If
    End Sub

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
    Dim shellWindows As Object = Activator.CreateInstance( _
    Type.GetTypeFromCLSID(New Guid("{9BA05972-F6A8-11CF-A442-00A0C90A8F39}")))
    Dim cnt As Integer = CInt(CallByName(shellWindows, "Count", vbGet))

    ListBox1.BeginUpdate()
    For c As Integer = 0 To cnt - 1
    Dim internetExplorer As Object = CallByName(shellWindows, "Item", vbMethod, c)
    Dim doc As Object = CallByName(internetExplorer, "Document", vbGet)
    Dim docType As String = TypeName(doc)
    Marshal.ReleaseComObject(doc)
    If docType Like "*HTMLDocument*" Then
    Dim locationName As String = CallByName(internetExplorer, "LocationName", vbGet).ToString()
    ListBox1.Items.Add(New Item(internetExplorer, locationName))
    Else
    Marshal.ReleaseComObject(internetExplorer)
    End If
    Next
    Marshal.ReleaseComObject(shellWindows)
    ListBox1.DisplayMember = "Value"
    ListBox1.EndUpdate()
    End Sub

    Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As FormClosingEventArgs) Handles Me.FormClosing
    For Each listItem As Item In ListBox1.Items
    Marshal.ReleaseComObject(listItem.Key)
    Next
    ListBox1.Items.Clear()
    End Sub
    End Class
記事No.35067 のレス /過去ログ61より / 関連記事表示
削除チェック/

■49445  Re[1]: 開発の生産性について
□投稿者/ よねKEN -(2010/05/05(Wed) 13:51:08)
    No49424 (匿名氏 さん) に返信
    > VBは生産性の高い言語であると思われますが、これはVSというIDE環境があるからなのでしょう
    > C言語は、現在のGUIのアプリを作るには大変な時間がかかるとおもわれますがVSを使った環境で
    > 開発すればVBと遜色のない生産性の高さを有していると解釈して間違いないのですか

    同じVisual StudioでもVBの開発環境とVC++の開発環境とは違います。
    機能や細々したところで違いがたくさんあるため、遜色ないと言えるかどうかはわかりません。
    人それぞれの言語への慣れの度合い、言語や開発環境に対する個人の好みといったような要素
    があるので、人によって意見も分かれるでしょう。

    VBもVC++もExpress Editionの開発環境なら無料で入手できますので、
    実際に使ってみて、ご自身で確認されるのが一番だと思います。

    No49437 (.SHO さん) に返信
    > C言語でウィンドウ1個作ってみれば、どんだけ大変かわかります。

    このことに特に異論はないのですが、質問では「Visual Studioを使って開発する場合」とあるので、
    この前提では、新規プロジェクトの種類に「Win32プロジェクト」を選んでオプションを「Windowsアプリケーション」
    を指定するだけでできてしまいます。1行もコードを書く必要がありません。

    とはいえ、そこからいじって実際に作りたいモノに仕上げて行く為には、
    C言語でWindows開発を行うときの考え方とか基本を押さえてないと右往左往しますので、
    それを元に実際に開発してみれば、違いを感じることができると思います。
記事No.49424 のレス /過去ログ83より / 関連記事表示
削除チェック/

■56113  Re[1]: VBのInteger
□投稿者/ よねKEN -(2010/12/28(Tue) 12:27:26)
    No56111 (ぶん さん) に返信
    > 文字の場合もそのエラーを出したいです。

    Elseの中でエラーにする、というのも一案です。
    #そういう案もあるよ、というだけでこの案がベストではないですが

記事No.56111 のレス /過去ログ94より / 関連記事表示
削除チェック/

■75137  Re[2]: 配列の合成
□投稿者/ むしかえし -(2015/03/03(Tue) 11:44:43)
    No75132 (shu さん) に返信
    shuさんありがとうございます。
    私のレベルでは解読がとても大変そうです。
    取りあえず済みません。
    itm2が宣言されてなさそうなのですが、
    教えて下さい。ここから分からないです。
記事No.75130 のレス /過去ログ126より / 関連記事表示
削除チェック/

■87135  Re[5]: ウインドウを更新する方法
□投稿者/ 魔界の仮面弁士 -(2018/04/14(Sat) 02:35:06)
    No87128 (がむんだ さん) に返信
    > Option Strict On のままにしたいのですが

    その前に、「Option Strict Off にすれば動いたのかどうか」や
    「提示したコードで目的を果たせるのか否か」をフィードバックしてくださいませ。

    提示のコードでは問題が解決できないようであれば、
    そのまま修正しても、あまり意味が無いわけで…。


    > どのように修正すればよろしいでしょうか?
    追加の参照設定を必要とする方法と、参照設定を追加せずに実装する方法とがあります。

    とりあえず後者の場合は、 No35068 のようにすることで、Option Strict On のまま
    9BA05972-F6A8-11CF-A442-00A0C90A8F39 のオブジェクトすなわち ShellWindows を列挙させられます。
    https://msdn.microsoft.com/en-us/library/windows/desktop/bb773974.aspx

    この場合はメソッドの呼び出しも CallByName に置き換えれば OK 。


    参照設定する場合は、[Microsoft Internet Controls] を参照に加えたうえで、ループを
     For Each exp As SHDocVw.InternetExplorer In New SHDocVw.ShellWindows()
    に変更する流れになります。Refresh2 メソッドの引数が ByRef Object の場合は
    列挙型を Object 型変数に入れてから渡すように改修してください。


    ただし、 No87103 にしても今回のコードにしても、
    COM オブジェクトの解放処理を省いたものとなっています。
    解放もきちんと行いたい場合には、ShellWindows を始めとした各種 COM オブジェクトを
    ReleaseComObject するようにしたおいた方が良いでしょう。
    http://bbs.wankuma.com/index.cgi?mode=al2&namber=54129&KLOG=91
記事No.87100 のレス /過去ログ149より / 関連記事表示
削除チェック/

■90469  Re[9]: AddHandler Eventの別スレッドについて
□投稿者/ 魔界の仮面弁士 -(2019/03/13(Wed) 09:51:47)
    2019/03/13(Wed) 14:39:48 編集(投稿者)

    No90463 (TanuTanu さん) に返信
    > CreateObject("Shell.Application").Windows

    えぇ…。(−ー;
    別スレッドである No90411 を含め、今までこんなコードの話は
    出ていなかったように思うんですが、どこかで言及されていましたっけ?


    上記をレイトバインドで処理したいのであれば、
    過去ログの No47158 , No35068 あたりを探ってみてください。


    というか上記を使っているのなら、わざわざ API を駆使して
    >>> 下記サイトのGetIEDocumentでHTMLDocumentを取得しております。
    のような方法を取る必要は無いと思いますよ。

    Windows プロパティから得たコレクションを列挙することで、
    個々の InternetExplorer オブジェクトを取得できるので、
    その Document プロパティにアクセスすれば、
    HTMLDocument のインスタンスを得ることができますよね。


    > エラー BC30512 Option Strict On では 'Object' から 'InternetExplorer' への暗黙的な変換は許可されていません。
    > objIE.LocationName
    objIE 変数が As Object なのだとしたら、As SHDocVw.InternetExplorer にしてください。

    この場合、参照設定として、
     ・"Microsoft Internet Controls" (SHDocVw)
     ・"Microsoft Shell Controls And Automation" (Shell32)
    が必要です。


    参照設定を加えずに Option Strict On のままにしたいのであれば、
    先日の回答 ( No90410 , No90461 )や、上記過去ログ ( No35068 )などのように、
    CallByName を経由してアクセスする必要があります。


    > エラー BC30512 Option Strict On では 'Integer' から 'IntPtr' への暗黙的な変換は許可されていません。
    > PWnd = FindWindowExA(0, 0,・・・
    IntPtr 型の引数に 「0」という Integer 値を渡しているからでしょう。
    ここは IntPtr.Zero とすべきです。

    さらに言えば、FindWindowExA API ではなく FindWindowExW API を用いた方が望ましいと思います。


    > 下記が表示されました。
    > ※ボタン名称は非公開にしております。
    だとしたら、ターゲットにしているページが間違っています。

    取得した HTMLDocument が、先の No90454 で示した
    >> https://www.javadrive.jp/javascript/event/sample2_1.html
    になっていることを再度確認してみてください。

    このページから取得した yahoo ボタンであれば、下記の内容が表示されるはずなんですが…。

    ---------------------------
    function onclick(event)
    {
    kakunin(1)
    }
    ---------------------------


    上記の URL でも問題が生じるなら、環境依存の問題がありそうです。

    上記の URL では成功したけれども、目標としている URL だと失敗するのなら、
    jQueryのイベントハンドラが使われているなど、そのページ固有の
    別の問題がある可能性があるので、具体的な URL なり、
    正確なページの内容(HTML & JavaScript)が分からない事には、
    情報不足過ぎて答えようが無いです。
記事No.90434 のレス /過去ログ156より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -