DOBON.NETプログラミング道掲示板
HOME
HELP
新規作成
新着記事
ツリー表示
スレッド表示
トピック表示
発言ランク
ファイル一覧
検索
過去ログ
[
最新記事及び返信フォームをトピックトップへ
]
[ トピック内全5記事(1-5 表示) ] <<
0
>>
■35671
/ inTopicNo.1)
AppActiveが正常に機能しない。
▼
■
□投稿者/ 日研迷琉
一般人(1回)-(2025/04/10(Thu) 14:02:35)
環境/言語:[Windows11 Pro(24H2) VS2022 VB .NetFreamwork4.8]
分類:[.NET]
現在、PCから離れた位置で無線バーコードリーダによるエントリプログラムを作成しているのですが、アプリケーションからカーソルが離れるとPCにもって入力項目にカーソルを移動しなければなりません。
但し、フォーム上の入力項目は1つなのでフォームがアクティブになっていれば問題はないのですが、なにぶん長時間、他数のエントリを行うためにフォームがアクティブ状態になっていない場合、取り返しがつきません。
そこで、タイマーイベントで、アクティブフォームを取得し、自身がアクティブでない場合に自身をアクティブにするロジックを考えたのですがタスクバーが点滅するだけでアクティブになってくれません。(VSのデバック起動では動作します。)
下記の様な記述をしています。どなたか御教授願えませんでしょうか?
【環境】 Windows11 Pro(24H2)
VS2022 VB .NetFreamwork4.8
【Code】タイマーイベント内に記載
Dim ActiveFmName As String = ""
Try
ActiveFmName = IIf(IsNothing(ActiveForm.Name), "", ActiveForm.Name)
Catch ex As Exception
End Try
If Not ActiveFmName = Me.Name Then
AppActivate(Process.GetCurrentProcess.Id)
End If
以上よろしくお願いします
マルチポストを報告
Javascriptを有効にしてください
この投稿がマルチポスト(全く同じ内容の投稿が別の掲示板に投稿されている)の場合は、以下のフォームをご利用いただくと、報告の投稿が簡単に行えます。
このフォームに必要事項を入力後、「返信フォームに入力する」ボタンをクリックすると、このページの下にある
返信フォーム
の項目が自動的に埋まります。実際に投稿するには、その後、返信フォームの「送信」ボタンをクリックしてください。
このフォームを利用しても返信フォームが埋まるだけですので、後で書き直してから投稿することもできます。
「マルチポストされている場所」には、マルチポストされている場所のURLを入力してください。複数のURLを改行区切りで入力することができます。
マルチポストされている場所
オプション
マルチポスト先の投稿が、別人によるいたずらである可能性が高い
違反を報告
Javascriptを有効にしてください
この投稿が掲示板のルールに違反しており、何らかの対処が必要であると思われる場合は、以下のフォームを利用して管理人に報告することができます。
マルチポストの報告は、
返信フォーム
の上にある「マルチポストの報告」リンクをご利用ください。
この機能の悪用は絶対にしないでください。
悪用されたと管理人が判断した場合は、予告なしで厳しい対処がなされる可能性があります。
確認等の目的で、入力されたメールアドレス宛に返信メールが送信される可能性があります。メールの受信ができないメールアドレスは入力しないでください。
下のフォームが使用できない場合は、
メールフォーム
を使って管理人にご報告ください。
お名前(必須)
メールアドレス(必須)
本文(必須)
(違反理由など)
引用返信
削除キー/
編集
削除
■35672
/ inTopicNo.2)
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
違反を報告
Javascriptを有効にしてください
この投稿が掲示板のルールに違反しており、何らかの対処が必要であると思われる場合は、以下のフォームを利用して管理人に報告することができます。
マルチポストの報告は、
返信フォーム
の上にある「マルチポストの報告」リンクをご利用ください。
この機能の悪用は絶対にしないでください。
悪用されたと管理人が判断した場合は、予告なしで厳しい対処がなされる可能性があります。
確認等の目的で、入力されたメールアドレス宛に返信メールが送信される可能性があります。メールの受信ができないメールアドレスは入力しないでください。
下のフォームが使用できない場合は、
メールフォーム
を使って管理人にご報告ください。
お名前(必須)
メールアドレス(必須)
本文(必須)
(違反理由など)
引用返信
削除キー/
編集
削除
■35673
/ inTopicNo.3)
Re[2]: AppActiveが正常に機能しない。
▲
▼
■
□投稿者/ 魔界の仮面弁士
大御所(1590回)-(2025/04/11(Fri) 09:21:09)
■
No35672
に追記(魔界の仮面弁士の記事)
>>タスクバーが点滅するだけでアクティブになってくれません。(VSのデバック起動では動作します。)
こっちを紹介するべきだったかな。
[DOBON.NET]
┗[外部アプリケーションのウィンドウをアクティブにする]
┗[ウィンドウがアクティブにならない時の対策]
https://dobon.net/vb/dotnet/process/appactivate.html#section4
違反を報告
Javascriptを有効にしてください
この投稿が掲示板のルールに違反しており、何らかの対処が必要であると思われる場合は、以下のフォームを利用して管理人に報告することができます。
マルチポストの報告は、
返信フォーム
の上にある「マルチポストの報告」リンクをご利用ください。
この機能の悪用は絶対にしないでください。
悪用されたと管理人が判断した場合は、予告なしで厳しい対処がなされる可能性があります。
確認等の目的で、入力されたメールアドレス宛に返信メールが送信される可能性があります。メールの受信ができないメールアドレスは入力しないでください。
下のフォームが使用できない場合は、
メールフォーム
を使って管理人にご報告ください。
お名前(必須)
メールアドレス(必須)
本文(必須)
(違反理由など)
引用返信
削除キー/
編集
削除
■35674
/ inTopicNo.4)
Re[3]: AppActiveが正常に機能しない。
▲
▼
■
□投稿者/ 日研迷琉
一般人(2回)-(2025/04/11(Fri) 12:05:21)
お世話になっております。
早速のご回答ありがとうございます。
>> ActiveFmName = IIf(IsNothing(ActiveForm.Name), "", ActiveForm.Name)
> これについては
> ActiveFmName = If(ActiveForm?.Name, "")
> と書くべきかと。
> IIf だと As Object になってしまいますので、Option Strict On との相性も悪いですよね。
ご指摘ありがとうございます。勉強になります。
> 「PCにもって」という動作が何を指しているのか、
すみません。タッチミスで正しくは「PCにもどって」となります。
> 入力位置のキャレットのことを指しているものと推察しました。
はい、そう言うことです。
>>自身がアクティブでない場合に自身をアクティブにするロジックを考えたのですが
> 無線バーコードリーダによる入力が行われていなくても、
> タイマーで強制的にアクティブ化しようとしていますか?
> それはシステムの操作的に問題があるような…。
PCは、バーコード読み取り専用機(サーバ機)として運用するつもりですのでメンテナンス時以外は他の処理は不要となります。
確かにAPI等でメッセージをフックすれば可能なのでしょうけれども、当方には難しすぎてシンプルにアプリケーションを作成したいと思い今回の仕組みにしています。
戴きました情報を基にもう少し勉強してみます。
違反を報告
Javascriptを有効にしてください
この投稿が掲示板のルールに違反しており、何らかの対処が必要であると思われる場合は、以下のフォームを利用して管理人に報告することができます。
マルチポストの報告は、
返信フォーム
の上にある「マルチポストの報告」リンクをご利用ください。
この機能の悪用は絶対にしないでください。
悪用されたと管理人が判断した場合は、予告なしで厳しい対処がなされる可能性があります。
確認等の目的で、入力されたメールアドレス宛に返信メールが送信される可能性があります。メールの受信ができないメールアドレスは入力しないでください。
下のフォームが使用できない場合は、
メールフォーム
を使って管理人にご報告ください。
お名前(必須)
メールアドレス(必須)
本文(必須)
(違反理由など)
引用返信
削除キー/
編集
削除
■35675
/ inTopicNo.5)
Re[4]: AppActiveが正常に機能しない。
▲
▼
■
□投稿者/ 日研迷琉
一般人(3回)-(2025/04/14(Mon) 10:00:10)
お疲れ様です。
魔界の仮面弁士様ご指摘の通り、[ウィンドウがアクティブにならない時の対策]を施し、希望通りの動きを実現することができました。
まっ、ほぼコピペですが...(^^ゞ
と言う事で、この案件は閉めさせて頂きます。ありがとうございました。
解決
済
み!
違反を報告
Javascriptを有効にしてください
この投稿が掲示板のルールに違反しており、何らかの対処が必要であると思われる場合は、以下のフォームを利用して管理人に報告することができます。
マルチポストの報告は、
返信フォーム
の上にある「マルチポストの報告」リンクをご利用ください。
この機能の悪用は絶対にしないでください。
悪用されたと管理人が判断した場合は、予告なしで厳しい対処がなされる可能性があります。
確認等の目的で、入力されたメールアドレス宛に返信メールが送信される可能性があります。メールの受信ができないメールアドレスは入力しないでください。
下のフォームが使用できない場合は、
メールフォーム
を使って管理人にご報告ください。
お名前(必須)
メールアドレス(必須)
本文(必須)
(違反理由など)
引用返信
削除キー/
編集
削除
このトピックをツリーで一括表示
トピック内ページ移動 / <<
0
>>
このトピックに書きこむ
入力内容にタグは利用できません。
引用部分(行頭に「>」や「■」が付いている部分)が全体の 80% 以上のコメントは投稿できません。
半角カナは使用しないでください。文字化けの原因になります。
削除キーを覚えておくと、自分の記事の編集・削除ができます。
記事中に No*** のように書くとその記事にリンクされます(No は半角英字/*** は半角数字)。
使用例)
No123 → 記事No123の記事リンクになります(指定表示)。
No123,130,134 → 記事No123/130/134 の記事リンクになります(複数表示)。
No123-130 → 記事No123〜130 の記事リンクになります(連続表示)。
投稿前に必ずお読みください
初めて投稿される方は、必ず「
書き込みのルールについて(12/4/2更新)
」をお読みください。
読むのが面倒、ルールを守りたくないという方は、「
お気楽掲示板
」へ投稿してください。
質問を投稿する場合は、「
質問をする際のアドバイス
」を参考にしてください。
投稿は、明記のない限り、パブリックドメインになります。
マルチポストされた投稿を報告する時は匿名で投稿し、マルチポストされている場所を併記してください。以下のリンクをクリックしていただくと、自動で下のフォームが埋まりますので、その後「送信」ボタンを押してご投稿ください。
マルチポストの報告をする
マルチポストの報告をするが、マルチポスト先の投稿が嫌がらせである(元の投稿者とは別人が行なっている)可能性が高い
(投稿日時に開きがあり、こちらの投稿の方が早い場合は、その可能性が高いです)
Name
/
E-Mail
/
Title
/
URL
/
Comment/ 通常モード->
図表モード->
(適当に改行して下さい/半角10000文字以内)
■No35675に返信(日研迷琉さんの記事) > お疲れ様です。 > > 魔界の仮面弁士様ご指摘の通り、[ウィンドウがアクティブにならない時の対策]を施し、希望通りの動きを実現することができました。 > まっ、ほぼコピペですが...(^^ゞ > と言う事で、この案件は閉めさせて頂きます。ありがとうございました。
File
/
アップ可能拡張子=> /
.gif
/
.jpg
/
.png
/.zip
1) 太字の拡張子は画像として認識されます。
2) 画像は初期状態で縮小サイズ250×250ピクセル以下で表示されます。
3) 同名ファイルがある、またはファイル名が不適切な場合、
ファイル名が自動変更されます。
4) アップ可能ファイルサイズは1回
20KB
(1KB=1024Bytes)までです。
5) ファイルアップ時はプレビューは利用できません。
6) スレッド内の合計ファイルサイズ:[0/300KB]
残り:[300KB]
Icon
/
ホイールロボ
くるりロボ
ぱんだ
ふとめネコ
ねずみ
こあら
疑問ねこ
ランダム
管理者用
(画像を選択/
サンプル一覧
)
削除キー
/
(半角8文字以内)
解決
済
み!
BOX/
解決したらチェックしてください!(スレッドを閉じる目的ではチェックしないでください!)
クリエイティブ・コモンズ・ライセンス
を Comment の末尾に挿入するには、以下のリンクをクリックしてください。(Javascript で挿入しているだけです。)
表示(CC BY)
|
表示-改変禁止(CC BY-ND)
|
表示-継承(CC BY-SA)
|
表示-非営利(CC BY-NC)
|
表示-非営利-改変禁止(CC BY-NC-ND)
|
表示-非営利-継承(CC BY-NC-SA)
プレビュー/
クッキーに保存しない/
Mode/
通常管理
表示許可
Pass/
HOME
HELP
新規作成
新着記事
ツリー表示
スレッド表示
トピック表示
発言ランク
ファイル一覧
検索
過去ログ
-
Child Tree
-