2009-06-12 40 views
1

自動的にポップアップするダイアログを閉じたいが、動作させるのに問題がある。私のWin32プログラミングは、限られた使用の数年後に少し錆びています。C#の別のウィンドウでボタンをクリックしてシミュレートする

私はFindWindowExを使用して、ダイアログボックスとクリックしたいボタンのハンドルを取得しています。私は、WM_COMMANDをダイアログに送り、wParamパラメータのボタンハンドルを使ってトリックを行うという印象を受けました。

Window window = Window.FindWindow("TSomeDialog", null); 
Window cancelButton = Window.FindWindow("TButton", "Cancel", window); 

Message message = Message.Create(window.HWnd, 0x0111, cancelButton.HWnd, IntPtr.Zero); 
PostMessage(message); 

public void PostMessage(Message message) 
{ 
    // Win32 API import 
    PostMessage(message.HWnd, message.Msg, message.WParam, message.LParam); 
} 

Windowは、IWin32Windowを実装し、Win32 API呼び出しをラップするクラスです。私はWM_COMMAND(0x111)の定数をインライン化しました。

私は間違っていますか? :)

答えて

2

WM_COMMANDのドキュメントによれば、lParamはコントロールのウィンドウへのハンドルでなければなりません(wParamで渡すように見えます)。

wParamの上位ワードはBN_CLICKEDに、下位ワードはコントロールの識別子と同じにする必要があります。

(あなたがこれを取得するためにGWL_IDとGetWindowLongを使用しますが、おそらくそのIDCANCELすることができます。)

+0

ありがとう、私はちょうど私がlParamを代わりに使うべきであることを自分自身に知った。他の人が正しいものを書いていると仮定しないでください:( – Thorarin

0

なぜSC_CLOSEパラメータでWM_SYSCOMMANDメッセージを送信しないのですか?それは窓を閉めるべきです。

0

代わりにWM_CLOSEメッセージを送信してみませんか?

+0

私はこのケースで特定のボタンを押す必要があります。それは...特別なダイアログです。 – Thorarin

関連する問題