17

背景を説明するために、私は Star Wars: The Old Republic というゲームでプレイヤーを支援するソフトウェアを開発しています。ゲームのユーザー インターフェイス機能は非常に限られているため、リアルタイムでログを解析し、ユーザーがゲーム内のパフォーマンスを最大化するのに役立つ視覚的な手がかりを出力する外部アプリケーションを開発しています。たとえば、キャラクターが特定の「バフ」を取得した場合、戦闘ログにそれが表示され、画面に視覚的な手がかりを配置したい (そのため、ユーザーは画面の周囲にある小さなアイコンに注意を払う必要がありません)。画面)。

始める前に、主要な部分をどのように処理するかを理解するために、いくつかの「概念実証」スクリプトを作成したいと考えていました。私が立ち往生しているのは、私の質問がある場所です:

ゲームの画面上にグラフィック (おそらく透明な PNG ファイル) を表示できるようにする必要があります。ユーザーは、ゲームの操作を続行できるように、その画像をクリックしてスルーできる必要があります。私はそれについてどうやって行くのか少し迷っています。要件は次のとおりです。

  • 画像 (または複数の画像) を表示する
  • アプリケーションの「フォーカス」がなくても、その画像を他のアプリケーションの上に貼り付ける
  • その画像を非インタラクティブ (またはクリックスルー可能) にします。
  • 私はC#でアプリケーションを開発しています

どこから始めるべきかについてのガイダンスは非常に高く評価されます!

4

2 に答える 2

1

私が過去にこれを行った方法は、メイン ウィンドウのハンドルを取得することでした。多くの場合、それを行う唯一の方法は、ウィンドウ リスト全体を走査して、必要なタイトルのウィンドウを探すことです。これは、ゲームの 2 つのインスタンスが同じタイトルで同時に開いている場合に問題になります。

そのウィンドウ ハンドルを取得したら、何ピクセル上に、何ピクセル下に、何レイヤー「アウト」(z-index) を相対にするかを指定することで、既に存在するものの上に視覚要素を追加できます。ウィンドウの左上のピクセルに。

マルチウィンドウへのアプローチの 1 つは、C# プログラムを起動して、既にプレイされているゲームのインスタンスがあるかどうかを確認し、メッセージを発行して存在する場合は終了し、存在しない場合はゲームのインスタンスを次のように開始することです。子プロセス。その時点で hwin を取り戻せると思いますが、そうでない場合は、ゲームの実行後にウィンドウ リストから目的のタイトルを検索してください。

于 2014-02-20T01:17:45.557 に答える