

C#で開発しています。

管理者権限のWindows Formアプリケーションを作成しており、  
PC起動時にこのフォームアプリケーションを起動するようにタスクスケジューラに登録しています。  
(Windows10で管理者権限を必要とするアプリをスタートアップから起動できないという記載を見つけた為)

本題です。  
タスクスケジューラ起動時にアプリケーションをアクティブ状態にしたいのですが、  
this.Activate();  
や  
this.TopMost = true;  
を実施しても「Form.ActiveForm」がtrueになってくれません。

手動でダブルクリック起動時はActive状態になってくれます。

なにか方法はあるでしょうか？


CC BY-SA 3.0
2017-12-08T00:29:55.520
40118
2018-03-13T03:28:46.553
19580
question
c#
タスクスケジューラ起動時のWindows FormアプリがActiveにならない。


"windows task scheduler 管理者権限"で検索すると、こんなのが良さそうですが。

Windows10 - 管理者権限が必要なアプリを自動起動（スタートアップ）  
<https://pc-karuma.net/windows-10-task-schedule-without-uac-prompt/>

追記  
タスクのプロパティで「全般」タブの「セキュリティオプション」の中で、  
「ユーザーがログオンしている時のみ実行する」が選択されている必要があるようです。

Windows7のバッチファイル実行を登録した例が以下にあります。  
Windows7でタスクスケジューラから実行するバッチファイルが画面に表示されません。  
<https://answers.microsoft.com/ja-
jp/windows/forum/windows_7-winapps/windows7%E3%81%A7%E3%82%BF%E3%82%B9%E3%82%AF/ccff2c2f-5a0e-4f3d-ae81-9dff3e36fc3c?auth=1>

類似のQ&Aで「タスクの実行時に使うユーザーアカウント」や「作成者」の設定について  
言及しているものがありますが、多分これは大丈夫でしょう。  
Windows7のタスクスケジューラーで起動してもUIが出ない  
<https://okwave.jp/qa/q5910555.html>

Windows7/8.x/10タスクスケジューラ全般の解説記事が以下にあります。  
タスクスケジューラの基本的な使い方（Windows 7／8.x／10編）  
<http://www.atmarkit.co.jp/ait/articles/1305/31/news049.html>


CC BY-SA 3.0
2017-12-08T00:59:09.997
40121
2017-12-08T04:41:28.980
2017-12-08T04:41:28.980
26370
26370
40118
answer


以下のページに示されているような状態となっていることが考えられます。

>
> あるプロセスが別のプロセスのウィンドウをフォアグランドにするには、幾つかの条件が必要になりました。条件が満たされない場合は、ウィンドウがフォアグランドになる代わりに、タスクバーのアイコンが点滅します。  
>  [外部アプリケーションのウィンドウをアクティブにする -
> DOBON.NET](https://dobon.net/vb/dotnet/process/appactivate.html#section4)
>
> (注釈)上記条件の説明は以下のページです。  
>  [SetForegroundWindow - MSDN](https://msdn.microsoft.com/ja-
> jp/library/cc411039.aspx)

Win32APIを使用しても問題ないようでしたら、[AllowSetForegroundWindow -
MSDN](https://msdn.microsoft.com/ja-
jp/library/cc430255.aspx)か[BringWindowToTop -
MSDN](https://msdn.microsoft.com/ja-jp/library/cc410618.aspx)を使用してみてはいかがでしょうか。  
なお、[上記ページ](https://dobon.net/vb/dotnet/process/appactivate.html#section4)に説明・注意事項がありますので、事前によくお読みください。

備考:  
私が経験したパターンでは、Win32APIを使用したくなかったので、「タスクバーのアイコンが点滅」で満足していました。(メインプロセス→サブプロセスへ移行する際に、サブプロセスのフォームハンドルが取得できるまで待機してから、メインプロセスで表示しているフォームを非表示するという手法で解決しましたが、サブプロセス→メインプロセスの手順でアクティブにならない現象に遭遇し、妥協しました)


CC BY-SA 3.0
2018-03-13T03:28:46.553
42366
2018-03-13T03:28:46.553
882
40118
answer