プロが教えるわが家の防犯対策術!

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

解決方法をご教示頂きたく、よろしくお願いします。

A 回答 (3件)

SetWindowPos APIにHWND_TOPMOST指定とか。

この回答への補足

回答頂きありがとうございます。

どうも私の見当違いで、SetForegroundWindow APIでウィンドウを最前面に出来ないのではなく、それを実行する前の処理に問題があることが判明しました。それについては、別途質問を立てたいと思います。

皆さんにご迷惑をお掛けしましたこと、深くお詫びいたします。

補足日時:2013/07/08 16:37
    • good
    • 0

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を制御して表示させたウィンドウを最前面にしたいのです。
問題のウィンドウを起動しておいて、このウィンドウを起動する部分を削除したこれと同じコードによるアプリからは最前面に出来ています。

よろしくお願いします。

補足日時:2013/07/05 20:37
    • good
    • 0

フォームを最前面にする方法として、TopMostプロパティがありますが、APIが希望でしょうか。


http://msdn.microsoft.com/ja-jp/library/system.w …

この回答への補足

早速の回答ありがとうございます。
重要な説明が欠落していたようです。

最前面にするのは、自身のフォームではなく別アプリケーションのウィンドウです。
よろしく」お願いします。

補足日時:2013/07/05 20:15
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A