EXCELのメニュー操作アプリ(C#)
アプリ作成で悩んでいます。
【やりたいこと】
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#(バージョン問わず)
大変困っています。
実現可能/不可能だけでも結構ですので、
もしご存知の方がいらっしゃいましたら
ご教授の程、宜しくお願い致します。
お礼
ご回答ありがとうございます。 確認してみましたがサブメニューのハンドルは取得できず戻り値に0が返ってきました。 やり方がよくないのでしょうか?
補足
大変申し訳ございません。 再度確認してみましたところ、GetSubMenuの第2引数の指定を 間違えておりました。 ご教示頂いた内容で取得できる事が出来ました。 ありがとうございます。