- 締切済み
ウィンドウを最前面にできません
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 解決方法をご教示頂きたく、よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- kumatti1
- ベストアンサー率60% (73/121)
SetWindowPos APIにHWND_TOPMOST指定とか。
- 1050 円(@1050YEN)
- ベストアンサー率69% (477/687)
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
補足
早速の回答ありがとうございます。 この問題のアプリケーションでIEを制御して表示させたウィンドウを最前面にしたいのです。 問題のウィンドウを起動しておいて、このウィンドウを起動する部分を削除したこれと同じコードによるアプリからは最前面に出来ています。 よろしくお願いします。
- hirotn
- ベストアンサー率59% (147/246)
フォームを最前面にする方法として、TopMostプロパティがありますが、APIが希望でしょうか。 http://msdn.microsoft.com/ja-jp/library/system.windows.forms.form.topmost.aspx
補足
早速の回答ありがとうございます。 重要な説明が欠落していたようです。 最前面にするのは、自身のフォームではなく別アプリケーションのウィンドウです。 よろしく」お願いします。
補足
回答頂きありがとうございます。 どうも私の見当違いで、SetForegroundWindow APIでウィンドウを最前面に出来ないのではなく、それを実行する前の処理に問題があることが判明しました。それについては、別途質問を立てたいと思います。 皆さんにご迷惑をお掛けしましたこと、深くお詫びいたします。