2011-07-14 12 views
2

私は、画面を完全に占有しようとしている別の積極的なアプリケーション(POSのもの)によって最小化される環境で実行されているDelphiアプリケーションを持っています。 2番目のアプリケーションが起動されると、ウィンドウを列挙し、それらを 'ShowWindow(handle、SW_MINIMIZE)'で打つことによって、ウィンドウを掘り下げて最小化します。Win32アプリケーションを最小限に抑える他のプログラムを停止する

私はこれらのコマンドを選択し、ウィンドウのサイズを変更/最小化するメッセージをブロックすることです。私はいくつかのハンドラをハックしてこの動作を捕捉しようと試みましたが、それでもSW_MINIMIZEはそれを隠します。そして、Winsightは、何かがリサイズしているなどの通知メッセージ以外は私にはあまり表示されていません。私はWMSysCommandメッセージのメッセージハンドラを入れましたが、これは最小化ボタンがクリックされたような動作を停止するようです。そして、私はWndProc関数をオーバーライドしてメッセージをフィルタリングしようとしましたが、それもそれをカットしません。

ShowWindow(ハンドル、SW_MINIMIZE)呼び出しがアプリケーションに与えられたときに何が起こるかを誰かが明らかにすることができたら、私はとても感謝しています!

おかげ テリー

+0

あなたのアプリケーションをより高い整合性レベルで実行することができますか、または他のアプリケーションを低い整合性レベル(Vistaまたはそれ以上が必要)で実行できますか。私はこれにより、これを行うことが許可されている低い完全性のアプリケーションを停止するかもしれないと思う。私はこれを試していないし、それは少しの推測です。 –

+1

クラシックをお楽しみください:[他の一番上のウィンドウで覆われていない一番上のウィンドウを作成するにはどうすればいいですか?](http://blogs.msdn.com/b/oldnewthing/archive/2011/03/10/10138969.aspx) –

+0

私はそれがXPとWin2kで動作するようにしなければならないので、それは疑問です。私はそのアプローチについて疑問に思ったが、私はmsdnのドキュメントでそれを許可する呼び出しを見た。 – Terry

答えて

4

をWM_SYSCOMMANDないrecieves何nCmdShow」はウィンドウマネージャがウィンドウを最小化していることであるようShowWindowSW_MINIMIZEで呼び出されたときに起こります。

システムは、WM_WINDOWPOSCHANGINGのように、作用WM_GETMINMAXINFOWM_NCCALCSIZE、または単に通知するために、いくつかの、WM_WINDOWPOSCHANGEDWM_MOVEのように、WM_SIZEことができ、より重要な一部を最小化し、アプリケーションを実行できるように、さまざまな通知メッセージを送信します通常は、これらのいずれも操作をブロックするものではありません。

最小化が予想外であると判断できる場合は、 'wParam'がSIZE_MINIMIZEDのときにWM_SIZEメッセージに応答し、それに応じてウィンドウを復元することです。その後、フォームがタスクバーから立ち直るだろう:

type 
    TForm1 = class(TForm) 
    ... 
    private 
    procedure WmSize(var Msg: TWMSize); message WM_SIZE; 
    end; 

procedure TForm1.WmSize(var Msg: TWMSize); 
begin 
    inherited; 
    if (Msg.SizeType = SIZE_MINIMIZED) and IsUnexpectedMinimize then 
    PostMessage(Handle, WM_SYSCOMMAND, SC_RESTORE, 0); 
end; 

を、私はあなたが最小化が予期しないかではなく、あなたが思わどちらかを決めるかもしれない方法についての明確な考えを持っていません。ユーザーが開始した操作によってWM_SYSCOMMANDが送信される可能性がありますが、一部のOS機能もそうであるかどうかわからないため、OSがウィンドウや攻撃的なアプリケーションを最小限に抑えるかどうかを区別できます。

+2

そして、あなたの顧客がウィンドウが消えてすぐに再び現れるのが気に入らなければ、システムに干渉しているPOSベンダーに文句を言ってもらうようにしてください。あなたはあなたの顧客と同じくらい犠牲になっているので、彼らがそれを知っていることを確認してください。 –

+0

@Rob - おそらく、これと戦う唯一の合理的な方法です。結局のところ、他のアプリケーションはよりスマートになり、さまざまな方法で最小化することができます。 –

+0

これは悲しいことに、これを処理する唯一の方法かもしれません。ご協力いただきありがとうございます。 – Terry

0

は、ウィンドウには、WM_COMMANDメッセージが

関連する問題