ShellExecuteExからなぜかWndProcが呼ばれる – 固定ページ 2 – プログラミング – Home

ShellExecuteExからなぜか...
 
通知
すべてクリア

[解決済] ShellExecuteExからなぜかWndProcが呼ばれる

固定ページ 2 / 2

IT
 IT
(@IT)
ゲスト
結合: 11年前
投稿: 1
 

> なんとなくですが・・・書いてること矛盾してません?
> というのは現実的に、再入可能なように設計する ≒ 再入禁止措置
> なような気がするんです。
> ごくごく一部の単純な、すごーく短いハンドラならともかく・・・
> 普通にソフト作る場合のほとんどのハンドラは再入禁止措置しか私には
> 解が思いつきません・・・orz

うーーむ、
もともと、ShellExecuteExはexeファイルを何回も実行させる目的では作られていない
と思います。

本来の使い方は、エクセル・ワードみたいにDDE 通信が可能なアプリケーションを
一つ立ち上げて、DDE 通信を行いながら何かを行う。なのかなぁーと思います。

>ShellExecuteExをCreateProccess/Exで置き換える
これは正解だと思います。
ただ、ハンドル等はメインスレッドで管理するのがいいと思います。


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

すみません、ITOです。


返信引用
tamachan
 tamachan
(@tamachan)
ゲスト
結合: 11年前
投稿: 14
Topic starter  

仲澤さん、ITOさんいろいろ解説ありがとうございます。

> BeginPaint()から制御が「戻る前」にWM_ERASEBKGNDメッセージが、自身に届きます。
私は知らなかったですw。参考になります。
ただこれはWM_ERASEBKGNDしか届かないのでは?やはりShellExecuteExがDDE以外のメッ
セージを処理するのはなんか変(バグ)じゃないのかな~と私はちょっと思います・・・

ーーー
あと解決策なんですが1つ書き忘れていました。今回は別スレッドを立ち上げることは無
いためほぼシングルスレッドみたいなもので、現在のグローバル変数のカウンタ方式でも
一応解決します。
ただWM_DROPFILESにはカウンタのフィルタをかけてないので、極稀にWM_DROPFILESが
ShellExecuteから呼ばれるとダメかも(←不思議なのはこれが発生しないのです。かなり
回数テストしましたが、WM_TIMERしか通過していないように見えます。厳密にテストした
わけじゃないので自信がないのですが・・・)


返信引用
tamachan
 tamachan
(@tamachan)
ゲスト
結合: 11年前
投稿: 14
Topic starter  

ここまで書いてみてもしかしてSetTimerで使っているIDが重複しているのでは?と思い、
IDを1200 -> 12000に変えたら直るんじゃと試してみたけどやっぱりダメでしたw


返信引用
tamachan
 tamachan
(@tamachan)
ゲスト
結合: 11年前
投稿: 14
Topic starter  

あと1つ注釈しておくと、ShellExecuteEx(5回め)で必ず発生するとのことでしたが、こ
れは間違いでした。厳密にいうと私のPCでは必ず5回目に発生します。なのでみなさんの
高速なPCだと8回目だったり発生しないこともあるかも。SetTimerの値を10やもっと小さ
くすれば発生するかと思います。


返信引用
固定ページ 2 / 2

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました