質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

Q&A

解決済

1回答

1068閲覧

既成の外部アプリをフルスクリーン画面で実行したい

n_haraguchi

総合スコア19

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

0グッド

1クリップ

投稿2022/09/21 07:14

編集2022/09/24 04:16

前提・実現したいこと

C#でWinFormアプリの開発をしています。
既製品の外部アプリ(exe)を自分が作成しているプログラム内で実行し、
フルスクリーン(Windowsのタスクバーも見えない全画面表示の状態)で表示したいのですが、
方法がわかりません。

■起動したい外部アプリについて

  • Webカメラの映像を表示するアプリです。(本題とは関係ありません)
  • 実行したい外部アプリ自体に手を加えることはできません。
  • 外部アプリ自体の機能でフルスクリーン表示は可能です。

(フルスクリーン表示ボタンがあります。ショートカットキー設定はありません)

発生している問題・エラーメッセージ

外部アプリをフルスクリーン表示する方法がわからない

試したこと

ネットで外部アプリの実行方法を調べて試してみたのですが、実現できていない状態です。
最大化表示(タスクバーが見える全画面表示)での起動ならできたのですが…。

C#

1ProcessStartInfo proc = new ProcessStartInfo(外部アプリアドレス); 2proc.WindowStyle = ProcessWindowStyle.Maximized; 3Process.Start(proc);
追記(頂いた案から試したことなど)
  • ハンドル+メッセージでの操作

 この方法なら実現可能だと思いますが、起動後の外部アプリ操作で解除されてしまうものへの対応としてはコストが高いため採用保留。

  • UI Automation

 https://qiita.com/ken_hamada/items/501b164374667319d270
こちらを参考に試してみましたが、起動したい外部アプリでAutomationID及びNameが取得できず、使えませんでした。
Inspectで確認したツリーでは、目的の要素はElementの4階層下に配置されています。
Element及びテスト2のchildの内容は、Inspectで確認した第1,第2階層の要素と一致していました。

c#

1Process proc = Process.Start(外部アプリアドレス); 2Thread.Sleep(5000); //起動待ち 3AutomationElement Element = ui.GetMainFrameElement(proc); 4 5// テスト1 AutomationIdで要素を取得 6AutomationElement find= Element.FindFirst( 7 TreeScope.Element | TreeScope.Descendants, 8 new PropertyCondition(AutomationElement.AutomationIdProperty, "fullscreen")); //find = nullになる 9 10// テスト2 Treeの確認 11AutomationElement child = TreeWalker.RawViewWalker.GetFirstChild(Element); 12AutomationElement descendant = TreeWalker.RawViewWalker.GetFirstChild(child); //descendant=nullになる 13 14
  • ShowWindowでタスクバーを非表示にする

 期待する動作になりませんでした。
(タスクバーを非表示にはできましたが、タスクバー部分までアプリのウィンドウを表示してほしかった)

補足情報(FW/ツールのバージョンなど)

VisualStudio2017 .NET FrameWork4.6.1

元になるプログラム(自分が作成しているプログラム)のコンセプトとして、「タスクバーを表示させない」となっているため、そこから起動するアプリも可能であれば、少なくとも起動時にはタスクバーを表示させないようにしたいと考えています。
※起動後の外部アプリで解除操作をされたらタスクバー表示されてしまうので、完全ではないのは承知しています。
ですので、設定やメソッドなどで指定ができるようであればご教示いただければと考えています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2022/09/21 07:31

タスクバーを出すかどうかは結局そのアプリ次第なので、最大化表示で充分に思うのですが、どのようなアプリを起動しようとしているのでしょうか。
n_haraguchi

2022/09/21 07:39

閲覧ありがとうございます。 起動しようとしているアプリは、Webカメラの映像を表示するアプリです。 元になるプログラム(自分が作成しているプログラム)のコンセプトとして、「タスクバーを表示させない」となっているため、そこから起動するアプリも可能であればタスクバーを表示させないようにしたいと考えています。 (起動後の外部アプリで解除操作をされたらタスクバー表示されてしまうので、完全ではないのは承知しています)
m.ts10806

2022/09/21 08:01

要件として質問本文に記載願います。 あと、可能な範囲で現在のコードもご提示いただけたらと。
n_haraguchi

2022/09/21 08:18

本文を編集しました。 現在のコードは本筋と逸れますので、外部アプリの呼び出し部のみ本文に追記いたしました。
YAmaGNZ

2022/09/21 08:24

「C# 別アプリ 操作」といったように検索してフルスクリーンになるボタン押したらいいのでは?
n_haraguchi

2022/09/21 08:33

>YAmaGNZさん 回答ありがとうございます。 そうですね。その手段も考えたのですが、前述の通り起動後の外部アプリ側で操作されたら 解除されてしまうものへの対応としてはコストが高いかな、と。 「WindowStyle=Maximized」のような単純な設定方法はなく、なにかしらの操作で無理やりその状態に持っていくしかないということでしょうか…。
dodox86

2022/09/21 09:52

> 「WindowStyle=Maximized」のような単純な設定方法はなく タスクバーは言うなればWindowsの組み込みのひとつの独立したウィンドウなので、APIの類を一発で、という訳にはいかないと思います。
YAmaGNZ

2022/09/21 10:19

タスクバーが表示されないのであれば「WindowStyle=Maximized」でもいいのですかね? そうなのであれば「WindowStyle=Maximized」で実行してタスクバーはShowWindowを利用して非表示にするのでいいのではないですか?
n_haraguchi

2022/09/21 10:39

>dodox86さん そういうものなのですね。ありがとうございます。 >Zuishinさん ありがとうございます。 ざっくり調べてみた感じだと、やりたいことはできそうな感じがします! 今は手元に確認環境がないので、明日試してみます。 >YAmaGNZさん ありがとうございます。 ShowWindowでタスクバーを非表示にできるんですね!勉強になります! 今は手元に確認環境がないので、明日試してみます。
n_haraguchi

2022/09/23 02:05

>Zuishinさん、YAmaGNZさん 教えていただいた内容で試してみましたが、期待する動作は実現できませんでした。 (詳細は質問本文に追記しましたので、そちらをご覧ください) 皆様の回答から、いずれにせよ簡単に実現できるものではなさそうなので、 今回はタスクバー表示ありの最大化で対応しようと思います。 ご助言くださった皆様、ありがとうございました。
Zuishin

2022/09/23 02:07

その記事では MainWindowTitle でプロセスを取得していますが、それだとできないことがあります。 プロセスを実行するソフトからは直にプロセスが取得できるので、それで一度試してみてください。 それでもできないなら、起動したアプリから更に子プロセスが起動されて実際に動いているのはそちらというパターンもあります。 リソースモニターなどで監視してプロセスを特定してみてください。
n_haraguchi

2022/09/24 04:17

Inspectで確認し直し、押したい部分のAutomationIdは見つかりました。 AutomationId:"fullscreen" Name:"" ControlType:UIA_HyperlinkControlTypeId LocalizedControlType:"リンク" ただ、このAutomationIdからAutomationElementがやはり見つかりません。 質問本文(試したこと 追記)にテストコードを追記しましたが、 Element以下でAutomationIdを検索してもnullが返ってきます。(テスト1) ツリーデータを確認したところ、Element及びchildは期待するデータが格納されていますが、 childの子要素が取得できませんでした。(テスト2) Inspectでの表示ツリーでは、childにあたる要素の子要素は設定されています。 Zuishinさんがご指摘くださった、「MainWindowTitleでのプロセス取得だとできないことがある」 というのは、このテストコードでのElementに違うプロセスのAutomationElementが設定されることがある、 と解釈したのですが、あってますでしょうか?
Zuishin

2022/09/24 05:20

それも一つのケースですね。 色々試行錯誤が必要なようですが、PowerAutomate で操作できるようなら、そこで設定されたものを見て流用できるかもしれません。
n_haraguchi

2022/09/26 12:03

ありがとうございます。 試してみます。 (本題からずれるので以降この件でのこちらへの報告、質問は控えさせていただきますね)
Zuishin

2022/09/26 12:56

どう考えても本題でしょう。 どうでも良くなったのなら質問を削除しましょう。
n_haraguchi

2022/09/27 01:59

本題が「既成の外部アプリをフルスクリーン画面で実行したい」なので、「UIオートメーションで操作できる」で一旦完結かな、と考えたのですが…。UIオートメーションの操作が成功しないのは自分の環境の問題ぽいので、別質問にしたほうがよいのかなと。お気に障ったのでしたら申し訳ありません。 問題ないのでしたら、このままこちらで続けさせていただきます。 PowerAutomateが試せそうなので、試してみてまた結果を報告させていただきます。
guest

回答1

0

自己解決

UIオートメーションに関してPowerAutomateも使用しつつ試してみましたが、
どうにも対象のElementが取得できず、今回は断念しました。
頂いた案を自分なりに解釈したものを以下にまとめ、質問を締めさせていただきます。
ご回答くださった、dodox86さん、YAmaGNZさん、Zuishinさん、本当にありがとうございました。

結論

単純にプロパティ等で行える設定はない

それでも対応したい場合の対応案

  • ハンドル+メッセージで外部アプリを操作する
  • UIオートメーションで外部アプリを操作する
  • PowerAutomateで外部アプリを操作する → 自プログラム内での操作にはならない
  • ShowWindowでタスクバーを非表示にする →タスクバー部分までウィンドウが表示されるわけではない

投稿2022/10/01 01:43

n_haraguchi

総合スコア19

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問