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

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

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

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

2340閲覧

マルチタスクで起動したときに子タスクのアイコンをタスクバー上に表示させたくない

dem0nmichik0

総合スコア37

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2019/05/25 10:38

編集2019/05/26 08:01

実現したいこと

マルチタスクで起動した子タスクのアイコンをタスクバー上に表示させたくないのですが,実現方法はありますか?

###実現したい理由
ユーザー操作により,図2のようにExcelを使用することがあります.ですが,現状マルチタスクで起動しているためタスクバー上に親タスクを含め子タスクのアイコンが表示されています(図4参照).その際,ユーザーに子タスク(タスクバー上のアイコンで)を消されないようにしたいからです.Excelを閉じる方法は下記の二つです.
0. 「ファイル」→「終了」をクリック.
0. Excel右上の「×」アイコンをクリック.

アプリを起動すると親タスクが子タスクを立ち上げます.子タスクはタスクバー上に隠れる(wsMinimized)状態で起動するので,「Alt」+「Tab」で選択すると画面上に表示されます.ユーザーに子タスクを操作されないようにするには,シングルタスクにする方法以外ではないでしょうか?ご教授お願いいたします.

###実機のPCの種類&設定
【種類】
OS:Windows10 64bit
MS Office2016 Professionalインストール
【設定】
0. デスクトップモードでタスクバーを自動的に隠す:オン
0. 小さいタスクバーボタンを使う:オン

イメージ説明
図1.模擬アプリ起動時のスクリーンショット

イメージ説明
図2. 親タスクの「Excel起動」をクリックした時のスクリーンショット

イメージ説明
図3. 「Alt」+「Tab」をクリックしたときのスクリーンショット

イメージ説明
図4. 模擬アプリの開発環境(自宅)でのタスクバー状態

イメージ説明
図5. 実機上ではこうなってほしいタスクバー状態

###下記ソースの開発環境
OS:Windows10 64bit
IDE:Embarcadero C++Builder10.2

###ソースコード
<Unit1.cpp>(親タスク)

C++

1//--------------------------------------------------------------------------- 2 3#include <vcl.h> 4#pragma hdrstop 5 6#include "Unit1.h" 7SHELLEXECUTEINFO GA_shell; 8//--------------------------------------------------------------------------- 9#pragma package(smart_init) 10#pragma resource "*.dfm" 11TForm1 *Form1; 12//--------------------------------------------------------------------------- 13__fastcall TForm1::TForm1(TComponent* Owner) 14 : TForm(Owner) 15{ 16 int ans = 0; 17 18 ans = taskWake(); 19} 20//--------------------------------------------------------------------------- 21int __fastcall TForm1::taskWake(void) 22{ 23 HWND hWnd; 24 SHELLEXECUTEINFO shell; 25 int ShellRtn; 26 27 ShellRtn = 0; 28 29 if( NULL == GA_shell.hProcess ) 30 { 31 32 GA_shell.cbSize = sizeof(shell); 33 GA_shell.hwnd = hWnd; 34 GA_shell.lpVerb = _T( "open" ); 35 GA_shell.lpFile = TEXT( "C:\C++Builder\SubTaskHide\BIN\SubTask1.exe" ); 36 GA_shell.lpParameters = NULL; 37 GA_shell.nShow = SW_SHOWNORMAL; 38 GA_shell.fMask = SEE_MASK_NOCLOSEPROCESS; 39 40 41 shell = GA_shell; 42 43 44 ShellRtn = ShellExecuteEx(&shell); 45 if( 0 != ShellRtn ) 46 { 47 GA_shell.hProcess = shell.hProcess; 48 } 49 } 50 else 51 { 52 ShellRtn = 1; 53 } 54 55 // ShellRtn(0/1=OK/NG); 56 return( ShellRtn ); 57} 58//--------------------------------------------------------------------------- 59void __fastcall TForm1::Button1Click(TObject *Sender) 60{ 61 UnicodeString FileName = L"C:\C++Builder\SubTaskHide\BIN\test.xlsx"; 62 Variant Excel = Variant::CreateObject("Excel.Application"); 63 Excel.OlePropertySet("Visible", true); 64 Variant Workbooks = Excel.OlePropertyGet("Workbooks"); 65 Variant Workbook = Workbooks.OleFunction("Open", WideString(FileName)); 66} 67//---------------------------------------------------------------------------

<Unit1.h>(親タスク)

C++

1//--------------------------------------------------------------------------- 2 3#ifndef Unit1H 4#define Unit1H 5//--------------------------------------------------------------------------- 6#include <System.Classes.hpp> 7#include <Vcl.Controls.hpp> 8#include <Vcl.StdCtrls.hpp> 9#include <Vcl.Forms.hpp> 10//--------------------------------------------------------------------------- 11class TForm1 : public TForm 12{ 13__published: // IDE で管理されるコンポーネント 14 TLabel *Label1; 15 TButton *Button1; 16 void __fastcall Button1Click(TObject *Sender); 17private: // ユーザー宣言 18public: // ユーザー宣言 19 __fastcall TForm1(TComponent* Owner); 20 int __fastcall taskWake(void); 21}; 22//--------------------------------------------------------------------------- 23extern PACKAGE TForm1 *Form1; 24//--------------------------------------------------------------------------- 25#endif

<Unit1.cpp>(子タスク)

C++

1//--------------------------------------------------------------------------- 2 3#include <vcl.h> 4#pragma hdrstop 5 6#include "Unit1.h" 7//--------------------------------------------------------------------------- 8#pragma package(smart_init) 9#pragma resource "*.dfm" 10TForm1 *Form1; 11//--------------------------------------------------------------------------- 12__fastcall TForm1::TForm1(TComponent* Owner) 13 : TForm(Owner) 14{ 15} 16//---------------------------------------------------------------------------

<Unit1.h>(子タスク)

C++

1//--------------------------------------------------------------------------- 2 3#ifndef Unit1H 4#define Unit1H 5//--------------------------------------------------------------------------- 6#include <System.Classes.hpp> 7#include <Vcl.Controls.hpp> 8#include <Vcl.StdCtrls.hpp> 9#include <Vcl.Forms.hpp> 10//--------------------------------------------------------------------------- 11class TForm1 : public TForm 12{ 13__published: // IDE で管理されるコンポーネント 14 TLabel *Label1; 15private: // ユーザー宣言 16public: // ユーザー宣言 17 __fastcall TForm1(TComponent* Owner); 18}; 19//--------------------------------------------------------------------------- 20extern PACKAGE TForm1 *Form1; 21//--------------------------------------------------------------------------- 22#endif

<TotalProject.cpp>

C++

1//--------------------------------------------------------------------------- 2 3#include <vcl.h> 4#pragma hdrstop 5#include <tchar.h> 6//--------------------------------------------------------------------------- 7USEFORM("Unit1.cpp", Form1); 8//--------------------------------------------------------------------------- 9int WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int) 10{ 11 try 12 { 13 Application->Initialize(); 14 Application->MainFormOnTaskBar = true; 15 Application->CreateForm(__classid(TForm1), &Form1); 16 // ここに入れても親タスクおよび子タスクのアイコンは消えず. 17 SetWindowLong(Application->Handle, GWL_EXSTYLE, GetWindowLong(Application->Handle, GWL_EXSTYLE) | WS_EX_TOOLWINDOW); 18 Application->Run(); 19 } 20 catch (Exception &exception) 21 { 22 Application->ShowException(&exception); 23 } 24 catch (...) 25 { 26 try 27 { 28 throw Exception(""); 29 } 30 catch (Exception &exception) 31 { 32 Application->ShowException(&exception); 33 } 34 } 35 return 0; 36} 37//---------------------------------------------------------------------------

<Windows SDKにSetWindowLongを追加したソース>

C++

1//--------------------------------------------------------------------------- 2 3#include <vcl.h> 4#pragma hdrstop 5#include <tchar.h> 6//--------------------------------------------------------------------------- 7USEFORM("Unit1.cpp", Form1); 8//--------------------------------------------------------------------------- 9int WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int) 10{ 11 try 12 { 13 Application->Initialize(); 14 Application->MainFormOnTaskBar = true; 15 Application->CreateForm(__classid(TForm1), &Form1); 16 // ここに入れても親タスクおよび子タスクのアイコンは消えず. 17 SetWindowLong(Application->Handle, GWL_EXSTYLE, GetWindowLong(Application->Handle, GWL_EXSTYLE) | WS_EX_TOOLWINDOW); 18 Application->Run(); 19 } 20 catch (Exception &exception) 21 { 22 Application->ShowException(&exception); 23 } 24 catch (...) 25 { 26 try 27 { 28 throw Exception(""); 29 } 30 catch (Exception &exception) 31 { 32 Application->ShowException(&exception); 33 } 34 } 35 return 0; 36} 37//---------------------------------------------------------------------------

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

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

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

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

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

guest

回答1

0

ベストアンサー

VCL と API を合わせた回答となるので回答できる人はかなり少ないんじゃないかと思います。あと、タグの VC++ は関係ないので外しておいた方が良いかと思います。C++ Builder か VCL タグの追加依頼を出した方が良いかもしれません。

C++ Builder でタスクバーから非表示にするには以下のコードをメインフォーム表示前に実行することになります。

C++

1SetWindowLong(Application->Handle, GWL_EXSTYLE, GetWindowLong(Application->Handle, GWL_EXSTYLE) | WS_EX_TOOLWINDOW);

投稿2019/05/26 06:03

atata0319

総合スコア881

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

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

dem0nmichik0

2019/05/26 06:34

atata0319様,回答ありがとうございます. 早速やってみます.また,タグに関するアドバイスありがとうございます.修正します.
atata0319

2019/05/26 06:49

タグの追加依頼は出しておきました。
dem0nmichik0

2019/05/26 08:06

atata0319様,タグの追加依頼ありがとうございます. 本質問に関してですが,「SetWindowLong」を追記したソースコードのTotalProject.cppの「Application->Run()」が始まる前に実行してもだめでした.試しに,Windows SDKの「ShowWindow」の前でコールしたらうまくいきました.なので,C++Builderの問題だと思うので,別の質問で聞くかもう少し自分で別の場所にコーディングしたりと試してみます.ありがとうございました.
atata0319

2019/05/28 15:42

C++Builderタグが追加されました。次回から関連の質問はそれでお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問