別ユーザーデスクトップ云々の話は詳しくないです。
ただ、私なら以下の方法で動いてくれることを妄想します。
1. 全てのプロセス(スレッド)を列挙して、スレッド中に含まれるWindowを取得する。
(Spy++あたりは多分、この流れではないでしょうか)
2. 対象のユーザーが特定される場合は、ユーザーが取得するあるプロセス(例えば、
Explorer.exe)に対してDLL注入を行う。注入したDLL内部で処理を行う。
3. (2.)とほぼ同じですが、対象のユーザーのあるプロセスに対して、FindWindowを
START_ROUTINEに持つリモートスレッドを起動する。
(2.~3.)に関してはプロセスデバッグの権限がないと恐らく不能であるかと思われます。
Vistaになるとよりセキュリティ面で問題が起こりそうな記がしますが・・・・。
また、仮にhWndが取得できたとしても、FindWindow同様、素直にSendMessage
が動くということはわかりません。
これより良い方法があるとは思いますので、どなたかツッコミお願いします。