北東崎鳳凰−記録帳
DiaryINDEXpastwill


2006年10月24日(火) 所定の動作が出来て道一割

if((GetWindowLong(hwnd, GWL_STYLE) && WS_DISABLED))
{
//予約するな
}


やれやれ
LONG g1;g1=::GetWindowLong(yo1, (LONG)(-16));
bool g2=(g1 & 0x08000000L);
if(g2)
{
//予約するな
}
なんだかこんなところでつっかえてました。
&&だと、常にtrueを返してしまうんですよね・・・。
あと、GWL_STYLEやWS_DISABLEDの実数値まで
ヘルプ見て引っ張り出す始末。
自Formなら、Button1->Enabledを調べれば
すぐ片付くものが、他アプリのボタン状態を
調べるとなると GetWindowLongを
引っ張り出さないと分からんということに。

&一個だと、ポインタ絡みに使ってきた経緯有るので
試験にはちと慎重になったり。

//指定ウインドウを(0,0)に移動
if(dp)
{
RECT re;
::GetWindowRect(GT,&re);
if(re.left=!0)
{
::SetWindowPos(GT,HWND_NOTOPMOST,0,0,0,0,1);
}
}
とかね。

8-75 12-107 450
有用な運用数値を叩き出すようになって来ました。
急に安定してきました。
(0,0)移動や、その他の画面の640外移動が
かなり効いた模様・・・。
まぁ、邪魔が入る時間を極力減らすために
何やらあれこれ手を打つ必要がある ということで。
あとは・・・ウインドウ切り替えに伴うチラつきを
減らせれば・あるいは無くせれば
かなり良い感じに。
しかし、具体的にどうするかはまだ思い浮かばず。

APIもやたらと使います。
EnumWindows
EnumChildWindows
このふたつのコールバック系APIは必須ですが
GetWindowRectやGetWindowLongまで
使うとは当初は思っても居ませんでした。

GetWindowThreadProcessId
今のところ二箇所に集約。
こいつを知らなければ 今回のプログラミングは
成立しませんでした・・・。
大功臣。
ウインドウハンドルさえ入手できれば
そいつのスレッド・プロセスの情報が入手でき
実行アプリ名まで判明するという
何とも有難い代物です。

まぁその為にも
CreateToolhelp32Snapshot系
ツールヘルプAPI群も
常用することになるのですが・・・。
まぁこいつらは、もうほぼ使用パターンは固定化されました。
アプリ名→プロセスの照合に使うということで。
水戸黄門の印籠のようなもの(笑)


チラつきに関しては・・・何か記事が有ったような気はします。
余り簡単で無い気がする上に
実装するとなると、プログラム全体の枠組みから
作り直す必要も有り得ます。

あとは、エラー対策。
即効で効くのを一つ、あと回線落ち対策など。
エラー対策も かなり奥は深いです・・・。
所定の動作はするようになりましたが
更に安定化させるためには・・・
まぁ、ようやく一割くらいは実装にこぎつけた
というところでしょうか。

基本サイクルは
調査→情報取得→この印籠が目に入らぬか→サイクル繋げる諸作業→調査
こんなとこですかね。









あー
二つの事態で混迷の度は増します。
まず、このプログラム
「Win98マシンでは 動作しません」
情報取得のGetWindowThreadProcessIdが
誤動作起こしていると思しき挙動・・・。
あるいは ツールヘルプが麻痺しているか・・・。
画面が動きません。

そして、
オークションで競り落としたマシンが到着し
すこぶる好調に動作発進  ってな具合。
文句無しです。音は定常的にハードディスク音が
しますが、大したことも無く、別の部屋に置いておけば気にならない・・・。

あと、騒音マシン
HDD再フォーマットしつつXPインストし直したら
復活しました・・・。
音はうるさいまま。別部屋に追放。

うーん・・・
Win98マシンの処遇に困りますね。
どこでどのように誤動作起こしているか
突き止めましょうか・・・。
手間かかりそうですね・・・。


北東崎鳳凰 |MAILHomePage