DOBON.NET DOBON.NETプログラミング掲示板過去ログ

イベントログの最大化表示

環境/言語:[WindowsXP SP1,VisualStudio2003.Net]
分類:[.NET]

はじめまして。
ボタンをクリックしたら
イベントログを最大化にして表示したいのですが
うまくいきません。
ロジックは以下の様にしています。(多少あいまいな点ありますが・・・)

Dim p As Process = New Process

p.StartInfo.FileName = "mmc.exe"
p.StartInfo.Arguments = "%systemRoot%\system32\eventvwr.msc"
p.StartInfo.Windowstyle = 最大化にする

どなたか良い方法をご伝授ください。
よろしくお願いします。
2004/09/03(Fri) 10:07:49 編集(投稿者)

こんにちわ、fukuさん。

■No5969に返信(fukuさんの記事)
> はじめまして。
> ボタンをクリックしたら
> イベントログを最大化にして表示したいのですが
> うまくいきません。
> ロジックは以下の様にしています。(多少あいまいな点ありますが・・・)
>
> Dim p As Process = New Process
>
> p.StartInfo.FileName = "mmc.exe"
> p.StartInfo.Arguments = "%systemRoot%\system32\eventvwr.msc"
> p.StartInfo.Windowstyle = 最大化にする
>
> どなたか良い方法をご伝授ください。
> よろしくお願いします。

APIを使用してしまいますが、以下でできますです。

  Private Declare Function ShowWindow Lib "USER32.DLL" Alias "ShowWindow" (ByVal hWnd As Integer, ByVal iCmdShow As Integer) As Integer
  Private Const SW_SHOWMAXIMIZED As Integer = 3

  Private Sub Button1_Click(略
    Dim hProcess As Process

    hProcess = Process.Start("eventvwr.msc")

    Call ShowWindow(hProcess.MainWindowHandle.ToInt32(), SW_SHOWMAXIMIZED)
  End Sub


/*---------------------------------------------------------------------------*/

しかし、WindowsAPIは使いたくないので以下のようなコードでできるといいんですが...できません。
APIを使うしかないのかなぁ...。

  Private Sub Button1_Click(略
    Dim hProcess  As Process
    Dim pControl  As Control
    Dim pNativeWnd As NativeWindow

    hProcess = Process.Start("eventvwr.msc")

    ' ここで、どちらかで取得できれば...
    pControl  = Control.FromHandle(hProcess.MainWindowHandle)
    pNativeWnd = NativeWindow.FromHandle(hProcess.MainWindowHandle)

    ' ここで最大化できそうなのに...
    If TypeOf pControlまたはpNativeWnd Is Form Then
      CType(pControl, Form).WindowState = FormWindowState.Maximized
    End If
  End Sub

それは、こっちでも言えるのですが...
http://dobon.net/cgi-bin/vbbbs/cbbs.cgi?mode=al2&namber=5880&rev=&no=0


■追記

 しかし、自身のプロセスだとできるみたい。

  ' 自身のプロセスを取得
  hProcess = Process.GetCurrentProcess()

  ' 自身のプロセスの場合はどちらも取得できる
  pControl  = Control.FromHandle(hProcess.MainWindowHandle)
  pNativeWnd = NativeWindow.FromHandle(hProcess.MainWindowHandle)


 自分以外のプロセスはハンドルから取得できない...(全く同じAPでも)

  ' VB.NETで作った、Formがあるだけのアプリケーションを起動
  hProcess = Process.Start("WindowsApplication.exe") ' ←FormがあるだけのVB.NET Application

  ' 自身のプロセス以外からのハンドルでは取得できない...
  pControl  = Control.FromHandle(hProcess.MainWindowHandle)
  pNativeWnd = NativeWindow.FromHandle(hProcess.MainWindowHandle)
こんばんわ。返信遅れてすみませんでした・・・。
家に帰ってこないとネット環境がないもので・・・・。
さっそくですが、APIを利用する方法でWindows XPの環境で
成功しました!
ほんとありがとうございます。

しかしながらなんですが・・・・。
実は本番機がWindows XP eMbeddedでして・・・。
そちらで動かすとエラーになってしまいました・・・。
エラー内容をちょっと忘れてしまい申し訳ないです。

いろいろどうもありがとうございました。

> APIを使用してしまいますが、以下でできますです。
>
>   Private Declare Function ShowWindow Lib "USER32.DLL" Alias "ShowWindow" (ByVal hWnd As Integer, ByVal iCmdShow As Integer) As Integer
>   Private Const SW_SHOWMAXIMIZED As Integer = 3
>
>   Private Sub Button1_Click(略
>     Dim hProcess As Process
>
>     hProcess = Process.Start("eventvwr.msc")
>
>     Call ShowWindow(hProcess.MainWindowHandle.ToInt32(), SW_SHOWMAXIMIZED)
>   End Sub
>
>

DOBON.NET | プログラミング道 | プログラミング掲示板