
アプリ作成で悩んでいます。
【やりたいこと】
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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 動かなくなってしまった古いVBAを動くようにしたい 8 2022/09/20 13:57
- gooブログ ブログの記事を書きだしのみに表示したい 1 2022/06/25 19:11
- Visual Basic(VBA) Vba LongPtrについて教えてください 2 2022/08/19 11:14
- フリーソフト libreoffice drawのツールバーのチェックが外れてしまう 1 2022/10/04 22:02
- Word(ワード) Microsoft Word2023で、修正箇所を表示させたい 1 2023/02/09 10:07
- Excel(エクセル) [スライサー]に関して、 1 2022/05/24 21:07
- JavaScript javaScriptで画面に値を入れるには 1 2022/08/14 12:27
- JavaScript [Java] Edgeでのアドレスバー非表示について 3 2022/04/20 17:51
- その他(パソコン・スマホ・電化製品) ウィルスバスターモバイルについて。 iphone12 miniで、ウィルスバスターモバイルを使ってい 2 2022/07/10 12:59
- JavaScript ラジオボタンによるフォームの開閉を行いたい 3 2022/03/31 21:30
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
WebBrowserに表示されているペ...
-
EXCELのメニュー操作アプリ(C#)
-
ページ制御
-
VB.netのDataGridViewについて
-
画像などの位置を取得するには
-
GetWindowTextについて
-
MSHFlexGrid に関して初歩的な...
-
スプレッドのアクティブセルの...
-
WebページHTMLをテキストファイ...
-
Validatorでできることとできな...
-
ブラウザのアドレスが変更されたら
-
OpenGLでBMP画像を出力するには?
-
JSPの値により遷移先を変更する
-
インターネット エクスプローラ...
-
ジオのHP(HPビルダーでiモー...
-
JSPで<A HREF=
-
腕時計の時報をならないように...
-
画面によって文字の表示がおか...
-
JavaScriptのsubmit()がされない
-
struts2 iteratorタグ内でActio...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
登録済みイベントリスナーの情...
-
ActiveWorkbook.Pathの一つ下の...
-
VBAでTIFF画像を読み込むには?
-
EXCEL VBAで、EXCELの入力規則...
-
Excelで可視セルの行番号取得
-
Formatでmmが月と分を意味する理由
-
指定地点(緯度・経度)から指定...
-
ActiveReportのDataSourceについて
-
スプレッドのアクティブセルの...
-
strutsで空白を認識させるには?
-
vb上で実行させたコマンドに変...
-
java → jsp コンボボックス表示...
-
自分のファイル名取得
-
log4jでログレベルが取得できな...
-
javascriptでIMEの状態を取得
-
Spreadでの複数行選択
-
outlook vbaについて
-
JAVA と JSPの ArrayListのやり...
-
テキストフィールドの値をほか...
-
画像などの位置を取得するには
おすすめ情報