該当スレッドを見れば一目瞭然ですが、一応こちらでもフォロー。
10/07の、他プロセスのメモリへのちょっかい@タブコントロールで、サンプルとして(コメントアウトながら)タスクバーのやり方も書いていました。
その後の調査で、どうやらタスクバーのタブボタンの文字列はどうやらTCIF_TEXTでは取得できないようだと言うことが分かりました。かわりにTCIF_PARAMでウィンドウハンドルを取得してEM_GETTEXTで代用するという手法に落ち着きましたが。
何故こんな仕様になってるのかは謎です。或いは何か見落としでもあるんでしょうか……。
それから更に書き忘れていましたが、VirtualAllocExはWinNT系限定の関数です。ですから9x系では他の手段を考えなければなりません。幸いと言うべきか、9x系ではメモリ空間の管理はもうちょっとルーズになっています。ページングファイルに対してメモリマップトファイルを作成し、それのビューを作成すると、そのビューはあらゆるプロセスが全く自らのメモリ空間であるかのように扱うことができるようになるのです。
なんだ、そんな手段があるのならNT系でも……というわけにはいきません。メモリマップトファイルを使用することで各プロセスから共有できるメモリ領域を確保することはできます。しかし、NT系ではメモリ空間の管理が厳しいため、どのプロセスからでもアクセスできる一意のアドレスなんてものは認めません。必ずそのプロセス独自のビューを使用する必要があります。これでは同じアドレスが同じものを指すと言う状態にはできません。両者が「この名前の共有メモリのこれだけの領域を使うよ」という合意をした上でようやく使用できるものと考えるべきでしょう。
メモリマップトファイルは作成時に名前を付けることができます。で、他のプロセスはその名前でもって作成済みのメモリマップトファイルにアクセスすることが可能です。Mutexなんかと同じです(使用する名前はMutexなどと同じ機構を使用するため、Mutexとメモリマップトファイルの間でも名前がバッティングしたら後から作ろうとした方が失敗します)。
簡単に手順だけ書くと、CreateFileMapping関数を、ファイルハンドルにINVALID_HANDLE_VALUEを指定して呼び出すことでページングファイルに対してファイルマッピングオブジェクトを作成します。要は全てのプロセスから参照可能なメモリ領域を確保するって事ですね。で、これだけではアドレスがまだ不明のままです。ここで確保した領域のアドレスを取得するのがMapViewOfFile関数です。つまり、どこか適当に確保した領域を、ローカルで扱えるように仮想アドレス空間にマッピングするってわけですね。前述の通り、9x系ではこれでマッピングされたアドレスはグローバルに扱うことが可能な特殊なアドレスになります。グローバルに扱えますから、マッピングしたアドレス(ビュー)は他のプロセスへのSendMessageなんかにもそのまま使用できるというわけです。使い終わったらMapViewOfFileしたアドレスはUnmapViewOfFile、CreateFileMappigしたファイルマッピングオブジェクトはCloseHandleするのを忘れないように。