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

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

C# と VB.NET の入門サイト

Re[8]: アプリケーションがフルスクリーンで表示されているかを取得


(過去ログ 89 を表示中)

[トピック内 13 記事 (1 - 13 表示)]  << 0 >>

■52905 / inTopicNo.1)  アプリケーションがフルスクリーンで表示されているかを取得
  
□投稿者/ どこめ (1回)-(2010/08/27(Fri) 13:45:15)

分類:[VB.NET/VB2005 以降] 

指定したアプリケーションがフルスクリーンで表示されているかを取得したいのですが。

これはアプリケーションが起動しているかをチェックするものですが、これが
利用出来るでしょうか?

Function exech()
Dim onActive
Dim ProcessList
'指定したアプリケーションのリストを得る
ProcessList = GetObject("winmgmts:").ExecQuery("select * from Win32_Process where Name='onaccess.exe'")
onActive = False
For Each Process In ProcessList
onActive = True 'リストがある時プログラムは起動中
MsgBox("起動してます")
Exit For
Next
If onActive = False Then '起動中でない時
MsgBox("起動してません")
End If
End Function
引用返信 編集キー/
■52907 / inTopicNo.2)  Re[1]: アプリケーションがフルスクリーンで表示されているかを取得
□投稿者/ ごう (166回)-(2010/08/27(Fri) 15:02:20)
No52905 (どこめ さん) に返信
> 指定したアプリケーションがフルスクリーンで表示されているかを取得したいのですが。

これは参考になりませんか?
http://hanatyan.sakura.ne.jp/dotnet/form01.htm#no2



> これはアプリケーションが起動しているかをチェックするものですが、これが
> 利用出来るでしょうか?

「指定したアプリケーション(フォーム)がフルスクリーン(最大化)で表示されているか(状態)を取得」するということについては、利用しなくてもできると思いますよ。

引用返信 編集キー/
■52912 / inTopicNo.3)  Re[2]: アプリケーションがフルスクリーンで表示されているかを取得
□投稿者/ どこめ (2回)-(2010/08/27(Fri) 16:14:17)
No52907 (ごう さん) に返信

ここでは'onaccess.exe'が起動していてこれが最大化されているかを知りたいのです。
調べようとしている、プログラムは、VisualBasicで作成した例えばtest.exeで
最大化されているかを知りたい。
引用返信 編集キー/
■52922 / inTopicNo.4)  Re[3]: アプリケーションがフルスクリーンで表示されているかを取得
□投稿者/ すなふきぬ (29回)-(2010/08/27(Fri) 22:33:40)
No52912 (どこめ さん) に返信
> ■No52907 (ごう さん) に返信
>
> ここでは'onaccess.exe'が起動していてこれが最大化されているかを知りたいのです。
> 調べようとしている、プログラムは、VisualBasicで作成した例えばtest.exeで
> 最大化されているかを知りたい。

メインウインドウのハンドルを取得して、GetWindowLongでWS_MAXIMIZEで判断すればいいかな。
プロセス一覧を取得するのに、GetObjectを使用しているのは何か理由でも?
引用返信 編集キー/
■52949 / inTopicNo.5)  Re[4]: アプリケーションがフルスクリーンで表示されているかを取得
□投稿者/ どこめ (3回)-(2010/08/30(Mon) 15:21:16)
No52922 (すなふきぬ さん) に返信
>メインウインドウのハンドルを取得して、
すみません、そこからわかりません。

>プロセス一覧を取得するのに、GetObjectを使用しているのは何か理由でも?
探してきただけで理解しておりません。

メインウインドウのハンドルを取得と言う事で検索して抜き出しただけですが、
どう組み合わせてよいやらわかりませんが、教えて頂けますか?
Declare Function GetWindowLong Lib "Coredll.dll" (ByVal hWnd As IntPtr, ByVal nIndex As Integer) As Integer
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Dim lhnd As Long
Dim dwSts As Integer
lhnd = FindWindow(vbNullString, Tit)
dwSts = GetWindowLong(lhnd, GWL_STYLE)
引用返信 編集キー/
■52957 / inTopicNo.6)  Re[5]: アプリケーションがフルスクリーンで表示されているかを取得
□投稿者/ todo (44回)-(2010/08/30(Mon) 16:52:14)
> >プロセス一覧を取得するのに、GetObjectを使用しているのは何か理由でも?
> 探してきただけで理解しておりません。

System.Diagnostics.Processクラスが便利です。

foreach (Process p in Process.GetProcessesByName("notepad")) {
int n = GetWindowLong(p.MainWindowHandle, GWL_STYLE);
MessageBox.Show(p.MainWindowTitle + "," + ((n & WS_MAXIMIZE) == WS_MAXIMIZE));
}

引用返信 編集キー/
■52988 / inTopicNo.7)  Re[6]: アプリケーションがフルスクリーンで表示されているかを取得
□投稿者/ どこめ (4回)-(2010/08/31(Tue) 16:18:06)
No52957 (todo さん) に返信
todo さんご回答大変有り難う御座いました。
こちら初心者の為、VB.NETに変換するのに大変てこずっております。
'MessageBox.Show(p.MainWindowTitle + "," + ((n & WS_MAXIMIZE) = WS_MAXIMIZE))
でエラーするので、
取りあえず以下に変えましたが、
MsgBox(p.MainWindowTitle)
は表示するものの。
MsgBox(n & WS_MAXIMIZE)
これは何も表示されずわかりません。
大変お手数ですが、教えて頂く事できますか?

Public Class Form1
Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'System.Diagnostics.Processクラスが便利です。
Dim n
Dim GWL_STYLE
Dim WS_MAXIMIZE
For Each p As Process In Process.GetProcessesByName("notepad")
Int(n = GetWindowLong(p.MainWindowHandle, GWL_STYLE))
'MessageBox.Show(p.MainWindowTitle + "," + ((n & WS_MAXIMIZE) = WS_MAXIMIZE))
MsgBox(p.MainWindowTitle)
MsgBox(n & WS_MAXIMIZE)
Next
End Sub
End Class
引用返信 編集キー/
■52989 / inTopicNo.8)  Re[6]: アプリケーションがフルスクリーンで表示されているかを取得
□投稿者/ ごう (170回)-(2010/08/31(Tue) 16:18:26)
No52957 (todo さん) に返信
>>>プロセス一覧を取得するのに、GetObjectを使用しているのは何か理由でも?
>>探してきただけで理解しておりません。
> 
> System.Diagnostics.Processクラスが便利です。

System.Diagnostics.Processクラスと、IsZoomed関数を使用すれば簡潔に書けそうです。

ウインドウハンドルや、Windows APIの使い方についてはマニュアル等で調べておいてください。

--------


Imports System.Runtime.InteropServices

Public Class Form1
    ' WindowsAPIより、IsZoomed関数を使う
  Declare Auto Function IsZoomed Lib "user32" Alias "IsZoomed" (ByVal hWnd As IntPtr) As Boolean
    ' ウインドウハンドルを取るためのもの
    Dim p As System.Diagnostics.Process

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        ' notepad.exeを起動させる
        p = System.Diagnostics.Process.Start("c:\\windows\\notepad.exe")
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        ' notepad.exeが最大化されているかどうかを取得する
        Dim bRet As Boolean
        ' IsZoomedの引数にウインドウハンドルを指定する
        bRet = IsZoomed(p.MainWindowHandle)

        If bRet = True Then
            MessageBox.Show("最大化されています")
        Else
            MessageBox.Show("最大化されていません")
        End If
    End Sub
End Class

引用返信 編集キー/
■52995 / inTopicNo.9)  Re[7]: アプリケーションがフルスクリーンで表示されているかを取得
□投稿者/ どこめ (5回)-(2010/08/31(Tue) 17:09:37)
ごうさん大変有り難う御座います。
おっしゃる物確認出来ました、お世話になります。

大変申し訳ないのですが、私の初期の仕様に問題に関係してくる様な。
ボタン1でnotepad.exeを起動させていますが、既に起動しているnotepad.exeを
確認するには、やはり難しいでしょうか。
最初に言うべきでしたが、c:\tmp\???.exeのアプリが最大画面になっているかを
知りたいのですが、このアプリは既に起動している状態で確認したいのです。
このアプリは多重起動はしません。
この仕様では叱られそうですが、大変ご迷惑をおかけします。

引用返信 編集キー/
■52999 / inTopicNo.10)  Re[7]: アプリケーションがフルスクリーンで表示されているかを取得
□投稿者/ よねKEN (595回)-(2010/08/31(Tue) 19:44:52)
よねKEN さんの Web サイト
No52988 (どこめ さん) に返信
> MsgBox(n & WS_MAXIMIZE)
> これは何も表示されずわかりません。
> 大変お手数ですが、教えて頂く事できますか?

C#の&演算子はVBのAnd演算子に対応します。
(n And WS_MAXIMIZE)で行っているのはビット演算です。
詳しくは「ビットフィールド」で検索してみてください。

If (n And WS_MAXIMIZE) <> 0 Then
' 最大化されています!
End If

引用返信 編集キー/
■53000 / inTopicNo.11)  Re[8]: アプリケーションがフルスクリーンで表示されているかを取得
□投稿者/ ごう (172回)-(2010/08/31(Tue) 20:22:01)
No52995 (どこめ さん) に返信
> ごうさん大変有り難う御座います。
> おっしゃる物確認出来ました、お世話になります。
>
> 大変申し訳ないのですが、私の初期の仕様に問題に関係してくる様な。
> ボタン1でnotepad.exeを起動させていますが、既に起動しているnotepad.exeを
> 確認するには、やはり難しいでしょうか。
> 最初に言うべきでしたが、c:\tmp\???.exeのアプリが最大画面になっているかを
> 知りたいのですが、このアプリは既に起動している状態で確認したいのです。
> このアプリは多重起動はしません。
> この仕様では叱られそうですが、大変ご迷惑をおかけします。
>

誰に叱られるのかよくわかりませんが、下記について調べてみるとよいと思います。
Process.GetProcessesByName("プロセス名")
引用返信 編集キー/
■53001 / inTopicNo.12)  Re[9]: アプリケーションがフルスクリーンで表示されているかを取得
□投稿者/ ごう (173回)-(2010/08/31(Tue) 20:42:32)
2010/08/31(Tue) 22:16:01 編集(投稿者)
なんかできちゃったので。
メモ帳をすでに立ち上げた状態で試してみてください。
※GetProcessesByNameの使い方について、マニュアルを読んで確認しておいてくださいね(特にパラメータ、戻り値)
http://msdn.microsoft.com/ja-jp/library/z3w4xdc9.aspx

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        ' プロセス名 notepad のものを探す
        ' プロセス名によっては複数見つかることもあるので気をつけること
        For Each p As Process In Process.GetProcessesByName("notepad")

            ' notepad.exeが最大化されているかどうかを取得する
            Dim bRet As Boolean
            ' IsZoomedの引数にウインドウハンドルを指定する
            bRet = IsZoomed(p.MainWindowHandle)

            If bRet = True Then
                MessageBox.Show("最大化されています")
            Else
                MessageBox.Show("最大化されていません")
            End If

        Next

    End Sub

引用返信 編集キー/
■53008 / inTopicNo.13)  Re[8]: アプリケーションがフルスクリーンで表示されているかを取得
□投稿者/ どこめ (6回)-(2010/09/01(Wed) 11:11:00)
ごうさん、他の方も大変有り難う御座いました。
お陰様で動作致しました。
何もお礼が出来ませんので、今回の物どう使うのかと言うくらいは
伝えておこうかと思いまして。
あるアプリケーションソフトがありこれをA、このソフトとは全く別にVisualBasicで
そのアプリをリモート操作するプログラムBを組んでいます。
この二つのソフトを起動した時の画面構成上、Aが最大表示していないと
都合上良くないので、最大表示以外は、Bを隠そうとしています。
Aが起動したらBを自動起動、Aが終了でBを自動終了は出来たのですが、
今回の物が出来ず困っておりました。
大変有り難う御座いました。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -