• 締切済み

ウィンドウを最前面にできません

VB.NETでSetForegroundWindowでウインドウを最前面に出来ないため、AllowSetForegroundWindowを使用するようにしましたが、解決できません。 コードは大体次のようになっています。 Dim hProcess As System.Diagnostics.Process = System.Diagnostics.Process.GetCurrentProcess() AllowSetForegroundWindow(hProcess.Id) Dim hWnd As IntPtr = FindWindow("XXX", "YYYYY") SetForegroundWindow(hWnd) 環境は次のとおりです。  OS: Windows 7 Pro. 64bit SP1  VB.NET: 2010 Express 解決方法をご教示頂きたく、よろしくお願いします。

みんなの回答

  • kumatti1
  • ベストアンサー率60% (73/121)
回答No.3

SetWindowPos APIにHWND_TOPMOST指定とか。

isunsun
質問者

補足

回答頂きありがとうございます。 どうも私の見当違いで、SetForegroundWindow APIでウィンドウを最前面に出来ないのではなく、それを実行する前の処理に問題があることが判明しました。それについては、別途質問を立てたいと思います。 皆さんにご迷惑をお掛けしましたこと、深くお詫びいたします。

回答No.2

VB.NETにはAppActivateメソッドがあるので、[WIN32API]SetForegroundWindowを利用しないでも大丈夫だと思います。 それでも前面にすることが出来ない場合は、何か別の要素で前面にすることが出来ない理由があると思うので、公開されている情報だけでの解決は難しいと思います。 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click   '電卓起動   Dim hProcessCalc As Diagnostics.Process = Process.Start("calc.exe")   '電卓がユーザー入力の待機状態まで待機   hProcessCalc.WaitForInputIdle()   '電卓を前面にする   Call AppActivate(hProcessCalc.Id)   '3秒待機   Call Threading.Thread.Sleep(3000)   '自身を前面にする   Dim hProcessOwn As Diagnostics.Process = Diagnostics.Process.GetCurrentProcess()   Call AppActivate(hProcessOwn.Id) End Sub

isunsun
質問者

補足

早速の回答ありがとうございます。 この問題のアプリケーションでIEを制御して表示させたウィンドウを最前面にしたいのです。 問題のウィンドウを起動しておいて、このウィンドウを起動する部分を削除したこれと同じコードによるアプリからは最前面に出来ています。 よろしくお願いします。

  • hirotn
  • ベストアンサー率59% (147/246)
回答No.1

フォームを最前面にする方法として、TopMostプロパティがありますが、APIが希望でしょうか。 http://msdn.microsoft.com/ja-jp/library/system.windows.forms.form.topmost.aspx

isunsun
質問者

補足

早速の回答ありがとうございます。 重要な説明が欠落していたようです。 最前面にするのは、自身のフォームではなく別アプリケーションのウィンドウです。 よろしく」お願いします。

関連するQ&A

専門家に質問してみよう