110,536
社区成员
发帖
与我相关
我的任务
分享
public partial class frmMain : Form
{
[DllImport("user32.dll")]
private static extern int SendMessage(IntPtr hwnd, int msg, int p1, int p2);
IntPtr buttonHwnd = IntPtr.Zero;
frmDialog dialog;
public frmMain()
{
InitializeComponent();
}
private void frmMain_Load(object sender, EventArgs e)
{
Thread thread = new Thread(createTimer);
thread.IsBackground = true;
thread.Start();
}
private void btnDialog_Click(object sender, EventArgs e)
{
frmDialog f = new frmDialog();
f.NewFormCreated += new EventHandler<NewFormCreatedEventArgs>(f_NewFormCreated);
f.ShowDialog();
buttonHwnd = IntPtr.Zero;
f.NewFormCreated -= new EventHandler<NewFormCreatedEventArgs>(f_NewFormCreated);
}
private void f_NewFormCreated(object sender, NewFormCreatedEventArgs e)
{
buttonHwnd = e.ButtonHwnd;
}
private void createTimer()
{
System.Threading.Timer timer = new System.Threading.Timer(timerCallback, null, 0, 5000);
Thread.Sleep(int.MaxValue);
}
private void timerCallback(object p)
{
if (buttonHwnd != IntPtr.Zero)
{
int r = SendMessage(buttonHwnd, 0xf5, 0, 0);
MessageBox.Show(string.Format("发送消息成功,返回:{0}", r));
}
}
//建议方案
//仅提供思路及证明对话框不会阻塞线程,未考虑多个frmDialog实例及定时器回收等问题。
private void btnShowDialog2_Click(object sender, EventArgs e)
{
System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
timer.Interval = 5000;
timer.Tick += new EventHandler(timer_Tick);
timer.Enabled = true;
dialog = new frmDialog();
dialog.ShowDialog();
}
private void timer_Tick(object sender, EventArgs e)
{
if (dialog != null && !dialog.IsDisposed)
{
dialog.btnClose_Click(this, new EventArgs());
}
}
}
对话框窗体代码:
public partial class frmDialog : Form
{
public frmDialog()
{
InitializeComponent();
}
public event EventHandler<NewFormCreatedEventArgs> NewFormCreated;
public void btnClose_Click(object sender, EventArgs e)
{
DialogResult = DialogResult.OK;
}
private void frmDialog_Load(object sender, EventArgs e)
{
if (NewFormCreated != null)
{
NewFormCreated(this, new NewFormCreatedEventArgs(btnClose.Handle));
}
}
}
事件参数类(为了传递按句柄)代码:
public class NewFormCreatedEventArgs : EventArgs
{
public IntPtr ButtonHwnd
{
get;
private set;
}
public NewFormCreatedEventArgs(IntPtr buttonHwnd)
{
ButtonHwnd = buttonHwnd;
}
}
SendMessage(hwnd_bt, 0x0201, 0, 0);
SendMessage(hwnd_bt, 0x0202, 0, 0);
这个是我的点击按钮消息