
アプリ作成で悩んでいます。
【やりたいこと】
EXCELを開くと、左上に[ファイル(F)],[編集(E)],[表示(V)]...
と並んでいるメニューがあり、
この中で[表示(V)]-[ツールバー(T)]を選択すると、
いくつかの項目にチェックが付いていると思います。
※人によっては何もチェックが無い状態もあると思いますが・・・
ここで、私が作成したいアプリは、
「チェックされている箇所を判別して、
指定の箇所にチェックがなければ
指定の箇所にチェックを入れる」
です。
【試した方法】
通常のメモ帳や電卓等のメニューについては、
API(GetMenu、GetSubMenu、GetMenuItemInfo、SetMenuItemInfo等)
を用いて上記を実現できましたが、
EXCELはメニューの形式が異なるためなのか
GetMenuでウィンドウハンドルの取得が出来ませんでした。
下記はメモ帳のステータスバーチェック状態を調べて
チェックが無い場合にチェックするサンプルです。
EXCELのウィンドウハンドルからGetMenuを呼び出しても
メニューのウィンドウハンドルを取得することが
できませんでした。
//==============================================
//フォームに紐づくメニューハンドル取得
//==============================================
IntPtr hMenu = GetMenu(hWnd);
//==============================================
//サブメニューウィンドウハンドル取得
//==============================================
IntPtr hSubMenu = GetSubMenu(hWnd,3);
//==============================================
//メニュー状態取得
//==============================================
MENUITEMINFO mif = new MENUITEMINFO();
mif.cbSize = Marshal.SizeOf(typeof(MENUITEMINFO));
mif.fMask = MIIM_STATE;
GetMenuItemInfo(hSubMenu,3,true,ref mif)
//==============================================
//チェック判定
//==============================================
if(mif.fState != MFS_CHECKED)
{//チェックなしの場合
//===========================
//メニュー状態変更
//===========================
MENUITEMINFO mif = new MENUITEMINFO();
mif.cbSize = Marshal.SizeOf(typeof(MENUITEMINFO));
mif.fMask = MIIM_STATE;
mif.fState=MFS_CHECKED;
SetMenuItemInfo(hSubMenu,3,true,ref mif)
}
【開発言語】
C#(バージョン問わず)
大変困っています。
実現可能/不可能だけでも結構ですので、
もしご存知の方がいらっしゃいましたら
ご教授の程、宜しくお願い致します。
No.2ベストアンサー
- 回答日時:
無理っぽい気がします …
VS.NETのツールの SPY++ でそのアプリを検索してプロパティを表示させます
この中の『メニューハンドル』が 00000000 以外なら GetMenuなどでメニューが取得可能です
ここが 00000000 なら そのアプリに表示されているメニューは
そのアプリ独自の APIで制御されている可能性が大です
そのアプリの開発元に確認してみましょう
何度もお答えしていただき、ありがとうございます。
やはり無理っぽいですね。
今回はあきらめることにします。
また、何かわからないことがあればよろしくお願いします。
No.1
- 回答日時:
Excelのメニューは Office独自のコマンドバーで実装されています
『Visual Studio Tools for Office(VSTO)』経由か
COM+経由で Excel.exe を参照設定して 行うことになりそうです
COM+経由の場合Excelに起動/終了も管理するのであれば参照オブジェクトの開放をしっかりやらないと Excelのプロセスがシステム上に残ってしまうことがあります
『C#.NET EXCEL オートメーション』などをキーワードに検索してみましょう
ご返答が遅くなってしまい、大変申し訳ございません。
参照設定などを行わず、APIだけでの実装は不可能でしょうか?
というのも、EXCELと同様のアプリ(メニューが同じ)を
想定していまして、実際にはEXCELではないためです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
プログラミングを学べる!?進化している子どものおもちゃについて専門家に聞いた!
プログラミングを学べるレゴブロックがあることはご存知だろうか。レゴに限らず最近のおもちゃには、プログラミングの要素がどんどん取り入れられているようだ。「教えて!goo」にも、「プログラミングを学べる子供...
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
HSPでHTMLのタグのパラメーター...
-
javascriptでIMEの状態を取得
-
ActiveReportのDataSourceについて
-
GetWindowTextについて
-
EXCEL VBAで、EXCELの入力規則...
-
setAttribute getAttribute 配...
-
ボタンが活性化の場合とは、ボ...
-
「<c:forEach タグが終了し...
-
Java-jspの画面入力値保持について
-
フォーム上で押されたボタンに...
-
三菱GOTの画面切り替えについて
-
JSPでのリストボックス表示
-
JSPからJSPへ情報を渡せる?
-
エラーページ遷移後に入力値を残す
-
VB6 開発環境のエディタに行...
-
リクエストに応じたselectedの...
-
jspからServletを呼び、元のjsp...
-
C言語で今まで表示していた画面...
-
フォルダ改行
-
javaでDBから取得したデータのJ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
登録済みイベントリスナーの情...
-
Formatでmmが月と分を意味する理由
-
ActiveWorkbook.Pathの一つ下の...
-
EXCEL VBAで、EXCELの入力規則...
-
VBAでTIFF画像を読み込むには?
-
jsp 動的テーブルについて
-
エクセルVBAでホームページの文...
-
MultipartRequestWrapperについて
-
ibatis queryForList取得できない
-
ActiveReportのDataSourceについて
-
GoogleMapでの複数マーカー表示...
-
ミキサーの操作
-
[JavaScript] 正規表現による複...
-
java → jsp コンボボックス表示...
-
指定地点(緯度・経度)から指定...
-
テキスト表示位置を取得するには
-
strutsで空白を認識させるには?
-
ADO.NETの処理分岐について教え...
-
javaを使い、jsonデータを取得...
-
javascriptでローカルフォルダ...
おすすめ情報