VBA(マクロ)の公式サポート場所は、海外コミュニティとなっています。
有識者が集まっている所の方が、適切なアドバイスを受けやすいでしょう。
・Stack Overflow(VBA)
[VBA プログラミングに関する質問]
Stack Overflow には、説明的なタイトル、完全で簡潔な問題ステートメント、問題を再現する
ための十分な詳細の要求などのガイドラインがあることに注意してください。
機能要求または過度に広範な質問は、トピック外と見なされます。
新しいユーザーの場合は、Stack Overflow ヘルプ センター にアクセスして詳細を確認して下さい。
※ 閲覧者・回答者が多い公式サポートサイトをお勧めします。
英語で質問を送信してください。
アプリケーションの最大化の無効化
Access 2016を使っています。 アプリケーションの閉じる、最大化、元のサイズに戻す、最小化、を無効にするために、 VbaでapiのDeletemenu を使い、 hMenu引数に、GetSystemMenu(Application.hWndAccessApp,false)を指定し、 nPosition引数に、最大化の4 wFlags引数に、1024を指定し、 実行したところ、最大化が無効にならず、 最大化、元のサイズに戻す、最小化は、nPositionを降順に4 3 0と指定しても、 無効になりませんでした。 閉じるのみ、6を指定すると、無効になります。 nPositionは、順番が変わるため、 処理順は降順に書いています。 Deletemenu で最大化、元のサイズに戻す、最小化を無効にすることは不可能でしょうか。 また、Deletemenu 以外で実現可能な方法があれば、ご教示下さい。
-
simo-k 1,350 評価のポイント
2024-11-21T05:23:41.6933333+00:00 -
とっちゃん 625 評価のポイント MVP
2024-11-21T06:23:02.5833333+00:00 システムメニュー(キャプションのアイコンのところで出るメニュー)の最大化・最小化の有効無効は、SetWindowLongPtr(64bitプログラム)または、SetWindowLong(32bitプログラム) API を使って実現します。
x64環境だから64bit版が動いているとは限りませんので(インストールオプションで32bit版を選んでいる場合もあるため)、どのバージョンが動いているかなどを調査したうえで、APIを利用することになります(使い方はほぼ同じ)。
以下はC++でのサンプルコードなので、VBAへの変換が必要ですが、参考にしていただければと思います。
// 64bit版のAPI //WINUSERAPI LONG_PTR WINAPI GetWindowLongPtrW( _In_ HWND hWnd, _In_ int nIndex ); //WINUSERAPI LONG_PTR WINAPI SetWindowLongPtrW( _In_ HWND hWnd, _In_ int nIndex, _In_ LONG_PTR dwNewLong ); // 32bit版のAPI //WINUSERAPI LONG WINAPI GetWindowLongW( _In_ HWND hWnd, _In_ int nIndex ); //WINUSERAPI LONG WINAPI SetWindowLongW( _In_ HWND hWnd, _In_ int nIndex, _In_ LONG dwNewLong ); // パラメータは一緒 //#define GWL_STYLE (-16) //#define WS_MINIMIZEBOX 0x00020000L //#define WS_MAXIMIZEBOX 0x00010000L // GetWindowLongPtr/SetWindowLongPtr は、UNICODE/x64 のコンパイルオプションに応じて、上記のいずれかの関数にコンパイル時に変換される HWND hwndTarget = *this; auto style = GetWindowLongPtr( hwndTarget, GWL_STYLE ); if( style & WS_MAXIMIZEBOX ) { SetWindowLongPtr( hwndTarget, GWL_STYLE, style & ~WS_MAXIMIZEBOX ); } else { SetWindowLongPtr( hwndTarget, GWL_STYLE, style | WS_MAXIMIZEBOX ); }