(文書化されていない)ITrayNotifyインターフェイスを使用する必要があります。 Windows 7で通常の/ UAC制限プロセスとして実行すると問題なく動作します。 ただし、管理者権限で実行すると、CoCreateInstanceコールは-2147221164 = $80040154 = REGDB_E_CLASSNOTREG = "Class not registered"
を返します。 私は4つの異なるWindows 7システムで同じ結果をテストしました。これはx64とx86でも同じです。Windows 7のプロセスが昇格したときにITrayNotifyインターフェイスが動作しない(「クラスが登録されていません」)
これはどのように可能ですか? 昇格したプロセスに対してこのインターフェイスがブロックされていますか?そのための回避策はありますか?
重要な点については、コードの関連部分を参考にしてください。それはDelphiにありますが、それは関連性が高いとは言えません。
classGuid := StringToGUID('{25DEAD04-1EAC-4911-9E3A-AD0A4AB560FD}');
interfaceGuid := StringToGUID('{FB852B2C-6BAD-4605-9551-F15F87830935}');
result := CoCreateInstance(classGuid, nil, CLSCTX_LOCAL_SERVER, interfaceGuid, trayNotify);
編集/使用上の注意:問題はインターフェースが少し異なっており、それが上昇し、非上昇の両方正常に動作のWindows 10または8に存在しません。この問題はWindows 7にのみ適用されます(Vistaについてはわかりませんが、XPには関係ありません)。
* "(文書化されていない)ITrayNotifyインターフェイスを使用する必要があります。" *疑わしい。 –
これは実際の質問に対してどのように有用な表彰や返信ですか?私は、文書化されていないインターフェイスは推奨されないことを理解します。しかし、これはここで問題ではありません。私は、このインタフェースの使用を必要とする状況はここでは関連性がないとは思わない。このインターフェイスは、XPから10まで、記述されたコンステレーションでは動作しません。文書化されていないインターフェースを目指しているので、質問を下落させるのは不合理です。 – CodeX
私は質問に投票しませんでした。そして私のコメントはあなたの問題を解決するためにあなたが間違った道を取っているかもしれないと考えさせることを意図しています。 –