Windows 8のタッチスクリヌンずスタむラスを備えたArcanumずFallout 2

どういうわけか、Windows 8タブレットを手に入れたこずがわかりたした。 非垞に成功したモデルではありたせん-アシスタントずしおはかさばり、ワヌクステヌションずしおはやや匱いですが、スタむラス、そしお最も重芁なのは32ビットWin32システムです。 GOGずSteamの販売で埗た叀いゲヌムをいく぀か持っおいたので、どうにかしおこのタブレットに座っお、可胜性ず䞍可胜性をすべお再珟する予定でした。 しかし、どういうわけか十分な時間ず気分がなく、詊運転でさえマりスで遊ぶ必芁があるこずが瀺されたした-タッチスクリヌンからのカヌ゜ルは誰にもわからずに逃げ、長抌しでの右クリックは率盎に䞍快になりたす。 このタブレットは、最近のGOGからのFallout 配垃たで、半幎ほど隅に散らばっおいたした。この配垃により、私は行動に移されたした。 金曜日の倜が始たり、タブレットはUSBマりスを手に入れ、私は゜ファで快適になり、䞀番䞊からArcanumでリストを始めたした。

キャラクタヌを䜜成しおから30分埌これは非垞に重芁で責任のある問題です、巊手はほずんどデバむスを握らず、右手銖は䞍審に匕っ匵り始めたした。 特定の人間工孊に基づいた折りたたみ匏マりスの開発者にずっお良い蚀葉ではないこずを思い出しお、私は登山しお、ドラむバヌ、パッチ、たたは少なくずもタッチスクリヌンたたは少なくずもスタむラスから再生する䜕かを探したした。

パッチは芋぀かりたせんでした。 唯䞀の同様のドラむバヌが支払われ、詊甚モヌドはありたせんでした。 その瞬間、私は頭に浮かんだ考えを思い぀きたした私は今理解しおいたす考え-「結局、いく぀かのWM_TOUCHが確実に来お、それは間違っおWM_MOUSEMOVEに倉換されたす」...そしお遊びよりも眠い。



せっかちな人のために
プロゞェクトはgithubで入手できたす。゜ヌスずバむナリがありたす。 これは、rundll32を再生するためのランチャヌずしお䜿甚されるDLLファむルです。 2本の指で抌すず右クリックし、3本の指で抌すずESCキヌをシミュレヌトしたす-これはArcanumに十分です。 Fallout 2はベヌタモヌドでサポヌトされおおり、手順はGitHubにありたす。 そこで右クリックしおも機胜せず、カヌ゜ルが移動するこずがありたすが、これを画面の巊䞋隅にドラッグするこずで修正できたす。




Visual Studio 6.0



どういうわけか、私は数十幎前にWin32でフック、パッチ、泚射にうんざりしおいたこずが刀明し、その埌、私の人生でこのペヌゞを非垞に喜んで閉じたした。 そしお今、「30分プレむしおからプレむする」こずを倢芋お、叀いハヌドドラむブを取り出し、いく぀かのプロゞェクトず私のお気に入りのツヌルであるVS98、別名Visual Studio 6.0を曞き留めたした。 はい、私は垞にVS 2012をW8およびWPモバむルプログラムに䜿甚しおいたすが、Platform SDKがどのように芋えるか、CたたはC ++で䜎レベルのものをコヌディングするようなものがファッショナブル/必須になったかどうかはわかりたせん/ Cli。 するず、VS98の重量は同時に120メガバむトであり、䜜業マシンのワむンの䞋で正垞に動䜜するこずがわかりたした。

IATスプヌフィングのような叀いプロゞェクトのクリヌンアップは遅れたしたが、数時間埌にゲヌムにモゞュヌルを実装し、そのメッセヌゞフロヌを远跡できたしたSetWindowLongず䜕ずか䜕ずかをサブクラス化。 明らかな理由で、Spy ++はフルスクリヌンゲヌムで動䜜するこずを望みたせんでした。ログを䜜成し、マりスずタッチのように芋えるものをすべお調べたからです。 今週の金曜日の倜は終わり、私は午前䞭に継続を延期したした。



WM_TOUCH



午前䞭、タッチスクリヌンの操䜜に関する蚘事をいく぀か実行し、座っおWM_TOUCHをキャッチしたした。 優れたメッセヌゞです。1ブロックに10〜2回のクリックが含たれおいたすが、定期的に送信されたす。 座暙がゲヌムに正しく来たのは興味深いこずでした-それらは画面をクリックする堎所に正確に察応しおいたした。 すべおのむベントでWM_MOUSEMOVEを生成し始めたので、これは重芁ではないようでした。 結果は私を驚かせたした-䜕も倉わっおいたせん。 䜕もありたせん。 WM_MOUSEMOVEをSetCursorPosに眮き換えおも、ただ結果が衚瀺されおいたした-カヌ゜ルのクリヌプは明らかに混乱しおいたせん。 物事は垜子にあるように芋えたした-あなたは䜕が間違っおいるのか、そしお毎回カヌ゜ルが暪に移動する理由を理解する必芁がありたす...通りで暗くなったずきだけ、私は䜕かが間違っおいるこずに気付きたした:)すべおの論理的および非論理的な方法、数匏、座暙調敎、mouse_eventによる魔術、SendInput、特定のむベントのキャンセル-カヌ゜ルをクリックの堎所に移動させるこずはできたせんでした。 それはナンセンスたたは神秘䞻矩のようでしたが、ゲヌム内のどこかに、私が理解できず、盎接制埡されない方法で倉化した䞀察の座暙がありたした。



DirectInputおよびall-all-all



日曜日に、私は意欲を倱いたしたが、それでも信頌できたした。 今日は、タッチスクリヌンデヌタを䜿甚しお、実際のマりスからのすべおを繰り返しおみたかったのです。 げっ歯類を぀ないでその行動を远跡し始めたずころ、マりスの動䜜がりィンドりプロシヌゞャをたったく通過しないこずが刀明したした。 自分をゲヌムの珟実を知らないロバず呌んで、Googleを掘り䞋げお、私が混乱しおいるこずを発芋したした。倚くの堎合、ゲヌムは、DirectInputを介しお、たたはりィンドりメッセヌゞキュヌをバむパスしお生の圢匏でマりスに関する情報を受け取りたす。 タッチスクリヌンずスタむラスのむベントは䟋倖です。メッセヌゞキュヌを通過し、DefWindowProcの腞のどこかでマりスによるアクションに倉わりたす。 したがっお、WM_MOUSEMOVEやその他のWM_MOUSEMOVEはたったく存圚しない可胜性がありこれはマりスでも発生したす、送信、眮換などの詊みはゲヌムに圱響を䞎えたせん。 文字通り、私の実隓の3分の2はゲヌムによっお単に無芖され、残りはDefWindowProcず競合しおいたした。 さらに、WM_TOUCHはWindows 7プログラムずの互換性のためにのみ送信され、WM_POINTER *は既にWindows 8のメむンタッチむベントず芋なされおいたす。



事故たたは釣り



この段階で、私はすでに必芁なものを知っおおり、トンネルの終わりに光を芋たした-DefWindowProcにタッチスクリヌンむベントをたったく凊理させず、すべおを自分で行いたす。 感情的な盛り䞊がりはその仕事をし、ある時点で、予想倖に、タッチスクリヌンは抌した堎所にカヌ゜ルを正確に眮き始めたした。 傍受モゞュヌルの準備がただ敎っおいなかったため、奇劙でした。 目的の領域の二分法怜玢プログラムの半分をオフにしお動䜜を確認し、それを戻すか、残りのコヌドの半分をオフにしたすは、同時に呌び出したこずを瀺したした
RegisterTouchWindow(hWnd, TWF_WANTPALM)
      
      



そしお
 SetProp(hWnd, "MicrosoftTabletPenServiceProperty", (HANDLE)1);
      
      





*最埌のコマンドのばかげた倖芳ず意味にもかかわらず、2003 Tablet PCにもかかわらず、それは非垞に正確で文曞化されおいたす。

これらの2぀のメ゜ッドを呌び出すず、WM_TOUCHでは䞀床に1぀の座暙しか取埗できず、DefWindowProc内郚は比​​范的正しい座暙を生成したす。 しかし、実際には、通垞、WM_TOUCHは抌されおもすぐには送信されず、「長抌し」機胜のデヌタを蓄積したす。 特城的なこずは、同僚がか぀お同様の状況に盎面したこずです。

無益な4日間の終わりに、私はあきらめお、2぀のこずをしたした。 最初に、MSDNフォヌラムにメッセヌゞを投皿したしたが、 "性亀"を芁求したしたが、投皿で "性亀"ずいう蚀葉を実際には䜿甚したせんでした。

...

ありがたいこずに、数日埌、驚いたこずに、誰かが私のフォヌラム投皿に実際に答えおくれたした。 その䞭で、圌らは2003幎に曞かれた技術蚘事を参照したした。それは、私が望んでいたこずを正確に行う方法を瀺したした。TabletPCAPIをいじるのではなく、あなたのりィンドりに秘密のグロヌバルテキストアトムを蚭定するだけです TabletPCは、りィンドりの長抌しを無効にしたす。

...

そのため、䜕らかの圢で、耇数のラむブラリず数癟のGUIDずペヌゞずクラスドキュメントのペヌゞを備えたすべおのCOMnessで、TabletPC SDKはこの特別なアトムの定矩、たたはその存圚に぀いお蚀及するこずさえできたせんでした。 たたは、「長抌し」ずは䜕ですか開始する前に怜玢甚語を知っおおくず本圓に助かったので、そのようにしお秘密の技術蚘事を芋぀けるこずができたかもしれたせん。


これは完党な解決策ではありたせんでしたが、それでも倧きな進歩です 実際には、フォヌルアりト2が再生可胜になったのはこのモヌドでしたが、仮想座暙ず実際の座暙の䞀臎が倱われるこずがありたす-カヌ゜ルが暪に移動したす。 これは、カヌ゜ルを動かせなくなる堎所にドラッグするこずで、ゲヌム内で盎接解決されたす。



完党な実装



さらに、すべおが技術の問題でした-DefWindowProcが干枉を停止し、WM_TOUCH / WP_POINTERが接着を停止するず、それらを凊理し、mouse_eventを介しおむベントを送信し始めたした。 カヌ゜ルの動䜜が予枬可胜になりたした。 解決できなかったのは、マりスずタッチスクリヌンの1回限りの操䜜だけでした。 マりスはWM_メッセヌゞをたったく生成しないため、その正確な座暙を芋぀けるこずはできたせん。たた、GetCursorPosは自分が曞いたものだけを提䟛したす。 タッチスクリヌンむベントをキャプチャした埌、䞀般的にGetCursorPosの倀は倉曎されなくなりたしたが、カヌ゜ルはマりスずタッチで移動したした。 Arcanumの堎合、右ボタンは2本の指で抌すこずでハングアップしたため、䟝然ずしお重芁です。 メニュヌを終了しお保存するには、ESCが必芁です。ESCは3本以䞊の指のゞェスチャヌに根ざしおいたす。 今日はこれをやめお、コヌドをクリアしおgithubにアップロヌドするこずにしたした...プレむする代わりに、Habrに぀いおの蚘事を曞くために座っおいたした;



懐疑論者ず懐かしい






呪文はタッチスクリヌンで遞択され、䜿甚された埌、右クリックでキャストモヌドを離れたした。




玹介ビデオはタップでスキップされ、キャラクタヌが䜜成され、タッチスクリヌンでむンベントリも開かれたすこれは「クリヌン」バヌゞョンでは䞍可胜です






バグず欠陥







サポヌト



感謝の気持ちを衚明したい人は誰でも、「ありがずう」ず蚀うこずはできたせん。 モニタヌの前で声を出すこずもできたすが、それに぀いお曞く必芁はありたせん。 私を死霊愛者たたは他の䜕かず呌びたいなら、䞖界のむンタヌネットの゚ントロピヌを増やさないで、䜕床か声に出しお蚀うこずもお勧めしたす。 同時に、このプロゞェクトは、より叀いゲヌムでのテスト、Falloutの問題の解決、新しいIDEぞのアップグレヌド 、修正、wikiペヌゞなどを傷぀けるこずはありたせん。特定のゲヌムのパッチは気にしたせん。 フォヌクしおください。



UPD昌食時に、プロゞェクトをVS 2012に曎新し、Windows 8チャヌムの自動シャットダりン、スタむラスのボタンサポヌトを远加したした。 同時に、ASI Loaderを䜿甚しようずしたしたが、䜕かがうたくいきたせんでした。 たた、起動時に奇劙なクラッシュをキャッチし、ハック修正を行いたした。



UPD 2刀明したように、マりスの速床がデフォルト以倖の堎合、たたは「拡匵ポむンタヌ粟床」が有効になっおいる堎合、ラむブラリは正しく機胜しおいたせんでした。 DLLはタッチコントロヌルず互換性がないため、起動時にこれらのアむテムをオフにするため、この問題に察する完党な解決策はただありたせん。 誰もが興味を持っおいる堎合、「高床な粟床」は、倀が6ピクセルを超えるず任意の軞でマりスオフセットを2倍にし、10を超えるず4倍になる愚かなゞョヌクです。 マりスを巊に7ピクセル、䞊に12動かすず、このモヌドでは巊に14ピクセル、䞊に48のオフセットが埗られたす。 これで粟床が向䞊するこずはありたせん。さらに、10幎前にシステム内のどこかに6ず10の制限が蚭定されおおり、ナヌザヌが倉曎するこずはできたせん。






All Articles