DOBON.NETプログラミング道掲示板

No35672 の記事


■35672 / )  Re[1]: AppActiveが正常に機能しない。
□投稿者/ 魔界の仮面弁士 大御所(1589回)-(2025/04/10(Thu) 16:08:04)
  • アイコンNo35671に返信(日研迷琉さんの記事)
    > ActiveFmName = IIf(IsNothing(ActiveForm.Name), "", ActiveForm.Name)
    これについては
     ActiveFmName = If(ActiveForm?.Name, "")
    と書くべきかと。
    IIf だと As Object になってしまいますので、Option Strict On との相性も悪いですよね。


    > アプリケーションからカーソルが離れるとPCにもって入力項目にカーソルを移動しなければなりません。
    「PCにもって」という動作が何を指しているのか、
    ちょっとよくわからなかったのですが、ここでいう「カーソル」とは
    マウスカーソルの物理的な位置ではなく、アクティブウィンドウに対する
    入力位置のキャレットのことを指しているものと推察しました。


    キーボードデバイスとして扱わるタイプのリーダーであれば、
    RawInput API (WM_INPUT メッセージ + RegisterRawInputDevices)や
    SharpDX.RawInput を使うことで、アプリケーションが前面に無く
    非アクティブであった場合の入力も拾うことができます。
    複数のキーボードデバイスがあった場合に、それぞれの入力を別々に拾うこともできます。
    ただし、キー入力エミュレーションのリーダーの場合は使えない可能性があります。

    https://dobon.net/cgi-bin/vbbbs/cbbs.cgi?mode=res&namber=35479&rev=&page=0&no=0



    > 自身がアクティブでない場合に自身をアクティブにするロジックを考えたのですが
    無線バーコードリーダによる入力が行われていなくても、
    タイマーで強制的にアクティブ化しようとしていますか?
    それはシステムの操作的に問題があるような…。


    > タスクバーが点滅するだけでアクティブになってくれません。(VSのデバック起動では動作します。)
    たとえば、何かキー入力を行っている最中にアクティブウィンドウを勝手に変更されたり、
    ウィンドウを切り替えたばかりなのに、勝手に別のウィンドウに変更されたりすると
    都合が悪いため、そういう時にはタスクバーを点滅させて通知する仕様になっています。

    このあたりの事情は、下記で説明されています。
    https://bit.ly/foregroundWindow

    上記に書かれた、ウィンドウをフォアグラウンドに表示できる条件を満たしていれば
    AppActivate で点滅することなく切り替わるかと思います。

    なお上記 URL には一応、強制的にアクティブ化するためのコードも提示されています。
    (過去記事のアーカイブなので、サンプルコードが崩れてしまっていますが…)

    とはいえ上記のサンプルだけでも厳密には不十分で、さらにあらかじめ、
    ForegroundLockTimeout を 0 にしておかなければならないケースもあります。
    こちらは KB886217 で解説されています。
    https://bit.ly/MSKB886217

    なお、「SPI_GETFOREGROUNDLOCKTIMEOUT」を使うことで、
    一時的にこのパラメーター(ForegroundLockTimeout)を変更することもできます。



    以下蛇足。今となって不要な情報ですが。
    http://bbs.wankuma.com/index.cgi?mode=al2&namber=63230&KLOG=107
    http://bbs.wankuma.com/index.cgi?mode=al2&namber=63230&page=20&KLOG=107

違反を報告
返信 削除キー/


Mode/  Pass/


- Child Tree -