ホーム   フォーラム   FAQ
 
メインメニュー
ログイン
ユーザー名:

パスワード:


パスワード紛失

FlashWindowEx関数の利用について

  • このフォーラムに新しいトピックを立てることはできません
  • このフォーラムではゲスト投稿が禁止されています
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 .2 | 投稿日時 2012-2-8 13:57
maki  半人前   投稿数: 33
いつもおせわになっております。

以下何か情報お持ちの方がいらっしゃいましたらよろしくお願いいたします。


【現状】
・uniPaaSアプリケーションのタスクバー・タイトルバーを、
 Windows APIのuser32.dllのFlashWindowEx関数を利用して点滅させたい。
・しかしながら、うまくいきません。

【環境】
uniPaaS V1
Windows XP SP3

【開発概略】
<データビュー>
構造体用のBLOB型変数を定義

<ロジックエディタ>
イベント(タイマーイベントで10秒毎、ボタン押下イベント)

1.以下のように、BufSetNum関数で以下のようにFlashWindowEx関数の構造体に値をセット

 FLASHWINFO構造体のサイズ…BufSetNum ('A'VAR,1,2048,2,4)
 点滅対象のウィンドウ・ハンドル…BufSetNum ('A'VAR,5,WinHWND(0),2,4)
 以下の「FLASHWのパターン」…BufSetNum ('A'VAR,9,3,2,4)
 点滅する回数…BufSetNum ('A'VAR,13,5,2,4)
 点滅する間隔(ミリ秒単位)…BufSetNum ('A'VAR,17,0,2,4)

2.FlashWindowEx関数
 ・コール UDP   @user32.dll.FlashWindowEx
 ・コール時の受け渡しパラメータ
     #1 'T2'
     #2 構造体用のBLOB型の変数


【試したこと】
・上記開発概略.2.FlashWindowEx関数の受け渡しパラメータの#1で、
マスク関数、T(=構造体)と組み合わせる全12種類
・BufSetNum関数でセットした構造体を、BufGetNum関数でセットした値は全て取得できました。

【参考】
Mastering uniPaaS.pdf(150p〜152p)の
GetSystemTime 関数を参考例にしています。


以上何卒よろしくお願いいたします。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 .2 | 投稿日時 2012-2-8 16:51 | 最終変更
null  長老   投稿数: 191
FLASHWINFO 構造体のサイズと点滅対象のウィンドウ・ハンドルが違います。
WinHWND(0) で取得出来るのは MDI の中のウィンドウハンドルなので親ハンドルを求める必要があります。

BufSetNum('A'VAR,1,20,2,4)
BufSetNum('A'VAR,5,CallDLL('USER32.GetAncestor','444',WinHWND(0),2),2,4)
BufSetNum('A'VAR,9,3,2,4)
BufSetNum('A'VAR,13,5,2,4)
BufSetNum('A'VAR,17,0,2,4)


ちなみに、レジストリの ForegroundLockTimeout がゼロになっている場合は点滅しないはずです。
投票数:1 平均点:10.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2012-2-9 15:37
maki  半人前   投稿数: 33
nullさん
ありがとうございました。

>BufSetNum('A'VAR,5,CallDLL('USER32.GetAncestor','444',WinHWND(0),2),2,4)

上記のように修正したら、期待通りにタスクバーが点滅しました!
本当に助かりました。ありがとうございました。


以上です。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2012-2-9 17:18
maki  半人前   投稿数: 33
nullさん

・すみません、もう少し教えたくださいますか?

・FLASHWINFO 構造体のサイズは、

 BufSetNum('A'VAR,1,20,2,4)

 とお教え頂きました。

・なぜ上記のように「20」なのでしょうか?

 もしでしたら、ご教授頂ければ幸いでございます。


以上です。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2012-2-9 18:43
null  長老   投稿数: 191
> なぜ上記のように「20」なのでしょうか?
FLASHWINFO 構造体のサイズが 20 だからです。
BufSetNum() でも 20 byte までしかセットしてないでしょ?

C での記述例を見れば判りますが cbSize は
sizeof() で FLASHWINFO 構造体のサイズを取得しています。

--
FLASHWINFO info;
info.cbSize = sizeof(info);
--

FLASHWINFO の構造体は以下のようになっていますから、
アライメント(構造体の詰め物) は無しで単純に 4+4+4+4+4 = 20 となります。

typedef struct {
UINT cbSize; ← 4 byte
HWND hwnd; ← 4 byte
DWORD dwFlags; ← 4 byte
UINT uCount; ← 4 byte
DWORD dwTimeout; ← 4 byte
}
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2012-2-9 18:54
maki  半人前   投稿数: 33
nullさん

早速のご回答ありがとうございました。

勉強不足でした。ご丁寧に教えて頂きありがとうございました。

本当に助かりました。


以上です。
投票数:0 平均点:0.00

  条件検索へ


Copyright (C) Magic Software Japan K.K. All Rights Reserved.
個人情報保護方針 会員規約