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

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

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

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Q&A

1回答

2945閲覧

c#でcalc.exeを最小化するには

nobita119

総合スコア37

C#

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

0グッド

1クリップ

投稿2019/08/17 10:53

編集2019/08/17 11:34

何でも結構ですので、ご助言いただけましたら嬉しいです。

前提・実現したいこと

c#のコードから、
calc.exeを起動して、
それを最小化したいと思っています。

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

最小化しません。
ただ起動したそのままの状態となってしまいます。
notepad.exeなら最小化します。
UWPアプリはだめみたいで、
困っています。

該当のソースコード

Visual

1 class Win32Api 2 { 3 public const int SW_SHOWMINIMIZED = 2; 4 5 [DllImport("User32.Dll")] 6 public static extern long ShowWindow( 7 IntPtr hWnd, // 送信先ウィンドウのハンドル 8 uint nCmdShow // メッセージ 9 ); 10 11 } 12 13 class Program 14 { 15 static void Main(string[] args) 16 { 17 System.Diagnostics.Process p = System.Diagnostics.Process.Start("calc.exe"); 18 p.WaitForInputIdle(); 19 Win32Api.ShowWindow(p.MainWindowHandle, Win32Api.SW_SHOWMINIMIZED); 20 } 21 }

試したこと

VBAを使って、SendKeysを使ってみたら、
同様の結果でした。

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

Windows10 home 64bit
Visual Studio 2019 c#
コンソールアプリ .NET Core

どうぞよろしくおねがいします。

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

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

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

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

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

m.ts10806

2019/08/17 11:27

「ど素人」とかは書かなくて良いので「初心者アイコン」をつけるにとどめてください。要件と直接関係がある事柄ではありません。
nobita119

2019/08/17 11:35

ご指摘ありがとうございました。 修正させていただきましたので、よろしくおねがいします。
Zuishin

2019/08/17 11:41 編集

UWP アプリは通常のデスクトップアプリと同じ方法では制御できません。SendKeys でだめなら難しいと思いますが、何を送ったんでしょうか? まず Alt+Space を送り、メニューが出たところで N を送れば最小化できるんじゃないかと思うんですが。
nobita119

2019/08/17 11:57

ご助言ありがとうございます。 SendKeys "%{ }N" としていました。 notepad.exeとchrome.exeはこれで最小化されましたが、calc.exeはできません。しかし、calc.exeも自分でキーを打てばちゃんと最小化はされます。ちなみにUWP アプリはどのような方法を取れば制御できるのでしょうか?
Zuishin

2019/08/17 12:00

どのようにしているのか、コードを書いてみてください。
guest

回答1

0

やってみました。SendKeys.SendWait("% N") で最小化できました。

#追記

UWP のプロセスの MainWindowHandle は 0 になります。これを ShowWindow してもだめです。EnumWindows を使い、「ApplicationFrameWindow」(クラス名)、電卓(ウィンドウテキスト) を見つけてそこに適用すればできるかもしれません。

投稿2019/08/17 11:49

編集2019/08/17 12:17
Zuishin

総合スコア28660

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

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

YAmaGNZ

2019/08/17 12:11

EnumWindowsで見つけて、質問者さんのWin32Api.ShowWindowをコールしたら、最小化できました
Zuishin

2019/08/17 12:18

検証ありがとうございます。クラス名が間違っていて書き方も誤解を生みやすかったので回答を修正しました。
nobita119

2019/08/17 12:18

Zuishin様 低レベルなことの恐縮ですが、 SendKeys.SendWait("% N"); を入れると、「現在のコンテキストに'SendKeys'という名前は存在しません」となってコンパイルができません。 using System; using System.Runtime.InteropServices; と頭に書いてますので、それでいいという認識ですが、何がいけないのでしょうか。。
Zuishin

2019/08/17 12:20

書いてあることがどこまで本当かわからないと回答が変な方向に行くので、質問は正直に書いてください。コンパイルできなければメモ帳も最小化できないはずです。
nobita119

2019/08/17 12:31

Zuishin様 説明不足で失礼しました。一応質問にも書かせていただいていたのですが、SendKeysはVBAで試しました。c#は勉強中でして、色々な手を模索していて暗礁に乗り上げこちらに頼らせて頂きました次第です。
Zuishin

2019/08/17 12:36

なるほど。書き間違いではなく本当の VBA だったんですね。.NET Core には SendKeys はありません。.NET Framework を使うか、Win32 API の SendInput を使ってください。
nobita119

2019/08/17 12:54

そうなのですね。。それだけでも大きな収穫でした。ありがとうございます。SendInputを試そうとしていますが、不慣れなため検証に時間がかかりそうですので、また結果ご報告させていただきます。取り急ぎ御礼までにてすいません。
nobita119

2019/08/17 13:02

YAmaGNZ様 ご助言ありがとうございます。EnumWindowsを試してみましたところ、calc.exeがどれかわからず苦戦しておりますが、なんとかねばればできそうな気がしています。不慣れなため時間がかかりそうですが、また結果ご報告させていただきます。取り急ぎ御礼までにて失礼します。
YAmaGNZ

2019/08/17 13:08

列挙後、識別するための情報はZuishinさんが書かれているので、それを見てください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問