2

現在取り組んでいるプログラムに問題があります。これは、vista / Windows 7のセキュリティが強化されているために発生します。具体的には、整合性レベルの低いウィンドウが高いウィンドウと「通信」するのを防ぐUIPIです。

私の場合、整合性レベルの高いウィンドウにアプリケーションに移動するように指示したいと思います。セキュリティがオフのXPまたはWindows7で問題なく動作します。

findwindow()関数を使用するのではなく、上位ILウィンドウのHWNDを直接設定しようとしましたが、これは正常に機能しますが、プログラムを移動しようとしたり、一般的に操作しようとすると失敗します。ウィンドウハンドルはアプリによって保存され、低いILで実行されているアプリによって埋め込まれて読み取られます。

また、マニフェストのUIaccessをTRUEに設定し、プログラムにデジタル署名しようとしましたが、うまくいきませんでした。

この問題を解決する方法について何かアイデアはありますか?ありがとう。

4

1 に答える 1

3

ついにこれを行う方法を見つけたので、苦労している人のためにこれをフォローアップすると思いました.

IL = 完全性レベル。

highIL.exeとlowIL.exeの2つのアプリがありました.highILはlowIL.exeウィンドウを見つけて子ウィンドウとして設定し、highIL.exeで作成されたゾーンに移動したかったのです。これは、vista+ の UIPI によってブロックされました。

最後に、vista で ChangeWindowMessageFilter メソッドを使用し、Windows7 で ChangeWindowMessageFilterEx を使用しました。どちらも user32.dll にあります。これらの関数を使用すると、UIPI に穴を開けて、必要なメッセージを通過させることができます。

RegisterWindowMessage 関数を使用していくつかのカスタム メッセージを作成しました。この関数を使用して、highIL アプリケーションと lowIL アプリケーションの両方でメソッドを登録しました。行は次のようになりました。

const UINT MY_MOVEINTWINDOW_MSG = RegisterWindowMessage(_T("MyMsg.MoveWindow"));

その後、lowIL.exe は、ブロックされることなく、これらのメッセージを highIL.exe ウィンドウに送信できます。次に、単純にメッセージ ハンドラを追加して記述するだけのケースでした。

この方法は、高 IL と低 IL の両方にアクセスできる場合にのみ機能します。MSDN のWeb サイトには、ChangeWindowMessageFilterEx 関数の実際の例もあります。

于 2009-10-14T07:47:54.093 に答える