C#调用api 如何关闭弹出的窗体 在keydown之前开一个线程然后这里面去点击确定 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 是API函数,不是系统命令发送消息。SendMessageA (窗口句柄, 16, 0, 0)网上找的 据说能解决 你要找到弹出窗口的hWnd,发一条WM_CLOSE消息过去,一般都可以把他关闭。你怕卡死在那可以用SendMessageTimeOut()去发 试试 这个SetMessage (int hWnd,int Msg, int wParam,int lParam ) Msg 为2或16 可以关闭指定句柄窗口, 好像我用过这个我 的意思 是 不关闭 窗体 如果 关闭窗体 那我就 获取 不到 窗体上面 的button 按钮 的句柄了 啊,我 想实现 的 是 弹出 窗体 之后 我 执行 获取 button 按钮 句柄 的代码,现在是 窗体弹出 值后 程序 就 停留 在 SendMessage(intPtr, WM_KEYDOWN, 13, 0); 这个函数 里了,不继续 向下执行 ,有什么方法 让 窗体 弹出 之后 继续 向下 执行 函数 +1其实楼主犯难的不是如何关闭窗体,而是SendMessage(intPtr, WM_KEYDOWN, 13, 0);之后,代码卡在那里了(试过就知道了),所以开子线程可以有效解决这个问题。 private void SendEnterClick(IntPtr intPtr) { Thread thread = new Thread(CloseWin); thread.Start(); SendMessage(intPtr, WM_KEYDOWN, 13, 0); SendMessage(intPtr, WM_CHAR, 13, 0); SendMessage(intPtr, WM_KEYUP, 13, 0); GetHsCodeHandle(); GetOkHandle(); SendMessage(intPtrOk, WM_LBUTTONDOWN, 0, 20 + (5 << 16)); SendMessage(intPtrOk, WM_LBUTTONUP, 0, 20 + (5 << 16)); } public const int WM_SYSCOMMAND = 0x0112; public const int SC_CLOSE = 0xF060; private void CloseWin() { while(true) { IntPtr intPtr = FindWindow(null, "弹出界面"); if (intPtr != IntPtr.Zero) { SendMessage(intPtr, WM_SYSCOMMAND, SC_CLOSE,0); break; } Thread.Sleep(1000); } } +1其实楼主犯难的不是如何关闭窗体,而是SendMessage(intPtr, WM_KEYDOWN, 13, 0);之后,代码卡在那里了(试过就知道了),所以开子线程可以有效解决这个问题。 private void SendEnterClick(IntPtr intPtr) { Thread thread = new Thread(CloseWin); thread.Start(); SendMessage(intPtr, WM_KEYDOWN, 13, 0); SendMessage(intPtr, WM_CHAR, 13, 0); SendMessage(intPtr, WM_KEYUP, 13, 0); GetHsCodeHandle(); GetOkHandle(); SendMessage(intPtrOk, WM_LBUTTONDOWN, 0, 20 + (5 << 16)); SendMessage(intPtrOk, WM_LBUTTONUP, 0, 20 + (5 << 16)); } public const int WM_SYSCOMMAND = 0x0112; public const int SC_CLOSE = 0xF060; private void CloseWin() { while(true) { IntPtr intPtr = FindWindow(null, "弹出界面"); if (intPtr != IntPtr.Zero) { SendMessage(intPtr, WM_SYSCOMMAND, SC_CLOSE,0); break; } Thread.Sleep(1000); } }问题是 我 的这些 代码 已经 是 在 一个线程 里了啊 ,不是 主线程 如果 子线程 中 在开 一个 线程 这样 合理吗 看了7楼才明白楼主的意思。修改一下 private void SendEnterClick(IntPtr intPtr) { Thread thread = new Thread(CloseWin); thread.Start(); SendMessage(intPtr, WM_KEYDOWN, 13, 0); } private void CloseWin() { while(true) { IntPtr intPtr = FindWindow(null, "弹出界面"); if (intPtr != IntPtr.Zero) { SendMessage(intPtr, WM_CHAR, 13, 0); SendMessage(intPtr, WM_KEYUP, 13, 0); GetHsCodeHandle(); GetOkHandle(); SendMessage(intPtrOk, WM_LBUTTONDOWN, 0, 20 + (5 << 16)); SendMessage(intPtrOk, WM_LBUTTONUP, 0, 20 + (5 << 16)); break; } Thread.Sleep(1000); } } 2个winForm窗体a,b,关闭b时,让a窗体中dataGridView控件刷新 关于新浪微博发布微博信息 socket数据包传输失败 哪位大侠有《WebMIS.NET平台CS架构源码V2.5》的数据库 怎么给EXE文件传参数 水晶报表中的 “无效对象类型 ”错误 SendMessage向另一个程序发送鼠标移动的消息 求一个格式化浮点数问题~! HttpWebRequest 超时问题 大家推荐提点一下,那些书籍适合C#入门与掉高 C# DataGridView 中如何使CheckBoxCell和图片一起显示在同一单元格? c# winform的资源文件问题
SendMessageA (窗口句柄, 16, 0, 0)
网上找的 据说能解决
SetMessage (int hWnd,int Msg, int wParam,int lParam )
Msg 为2或16 可以关闭指定句柄窗口,
其实楼主犯难的不是如何关闭窗体,而是SendMessage(intPtr, WM_KEYDOWN, 13, 0);之后,代码卡在那里了(试过就知道了),所以开子线程可以有效解决这个问题。 private void SendEnterClick(IntPtr intPtr)
{
Thread thread = new Thread(CloseWin);
thread.Start(); SendMessage(intPtr, WM_KEYDOWN, 13, 0);
SendMessage(intPtr, WM_CHAR, 13, 0);
SendMessage(intPtr, WM_KEYUP, 13, 0);
GetHsCodeHandle();
GetOkHandle();
SendMessage(intPtrOk, WM_LBUTTONDOWN, 0, 20 + (5 << 16));
SendMessage(intPtrOk, WM_LBUTTONUP, 0, 20 + (5 << 16));
} public const int WM_SYSCOMMAND = 0x0112;
public const int SC_CLOSE = 0xF060;
private void CloseWin()
{
while(true)
{
IntPtr intPtr = FindWindow(null, "弹出界面");
if (intPtr != IntPtr.Zero)
{
SendMessage(intPtr, WM_SYSCOMMAND, SC_CLOSE,0);
break;
}
Thread.Sleep(1000);
}
}
其实楼主犯难的不是如何关闭窗体,而是SendMessage(intPtr, WM_KEYDOWN, 13, 0);之后,代码卡在那里了(试过就知道了),所以开子线程可以有效解决这个问题。 private void SendEnterClick(IntPtr intPtr)
{
Thread thread = new Thread(CloseWin);
thread.Start(); SendMessage(intPtr, WM_KEYDOWN, 13, 0);
SendMessage(intPtr, WM_CHAR, 13, 0);
SendMessage(intPtr, WM_KEYUP, 13, 0);
GetHsCodeHandle();
GetOkHandle();
SendMessage(intPtrOk, WM_LBUTTONDOWN, 0, 20 + (5 << 16));
SendMessage(intPtrOk, WM_LBUTTONUP, 0, 20 + (5 << 16));
} public const int WM_SYSCOMMAND = 0x0112;
public const int SC_CLOSE = 0xF060;
private void CloseWin()
{
while(true)
{
IntPtr intPtr = FindWindow(null, "弹出界面");
if (intPtr != IntPtr.Zero)
{
SendMessage(intPtr, WM_SYSCOMMAND, SC_CLOSE,0);
break;
}
Thread.Sleep(1000);
}
}
问题是 我 的这些 代码 已经 是 在 一个线程 里了啊 ,不是 主线程 如果 子线程 中 在开 一个 线程 这样 合理吗
private void SendEnterClick(IntPtr intPtr)
{
Thread thread = new Thread(CloseWin);
thread.Start();
SendMessage(intPtr, WM_KEYDOWN, 13, 0);
}
private void CloseWin()
{
while(true)
{
IntPtr intPtr = FindWindow(null, "弹出界面");
if (intPtr != IntPtr.Zero)
{
SendMessage(intPtr, WM_CHAR, 13, 0);
SendMessage(intPtr, WM_KEYUP, 13, 0);
GetHsCodeHandle();
GetOkHandle();
SendMessage(intPtrOk, WM_LBUTTONDOWN, 0, 20 + (5 << 16));
SendMessage(intPtrOk, WM_LBUTTONUP, 0, 20 + (5 << 16));
break;
}
Thread.Sleep(1000);
}
}