Help!Help!已知一个窗口的句柄HWND,如何强制关闭它?

CKEN 2000-03-09 09:29:00
...全文
1175 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
NoBug 2000-03-10
  • 打赏
  • 举报
回复
向窗口发送WM_CLOSE消息应该是可以的,如果不行可能是因为窗口停止响应,可用如下方法:
...
DWORD dwThreadId,dwProcessId;
HANDLE hProcess;
dwThreadId = GetWindowThreadProcessId(hWnd,&dwProcessId);
hProcess = OpenProcess(PROCESS_TERMINATE,FALSE,dwProcessId);
if(hProcess==NULL) return FALSE;
// so bad !
TerminateProcess(hProcess);
...
不过,这不是一个好方法,以为这样终止一个进程,有时会产生意想不到的后果。


CKEN 2000-03-10
  • 打赏
  • 举报
回复
请问lu0,如何向一个窗口发送带有sc_close的wm_syscommand消息,sendmessage的
api具体如何写?
meijg 2000-03-10
  • 打赏
  • 举报
回复
NoBug的方法是对的,把分给他,如果有问题在来找我
土豆 2000-03-10
  • 打赏
  • 举报
回复
无聊的话题
Lin 2000-03-10
  • 打赏
  • 举报
回复
CKEN:
再试试:SendMessage(hWnd, WM_SYSCOMMAND, SC_CLOSE, 0);
CKEN 2000-03-10
  • 打赏
  • 举报
回复
BOOL SendMessage(

HWND hWnd, // handle of destination window
UINT Msg, // message to post
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
);
中的WPARAM与LPARAM 应该如何填写呢?(消息是WM_CLOSE)
kxy 2000-03-09
  • 打赏
  • 举报
回复
sorry,放错了地方:)
kxy 2000-03-09
  • 打赏
  • 举报
回复
delphi中(d4)中如果编译,要保存才可以,BCB不要保存吗?
olo 2000-03-09
  • 打赏
  • 举报
回复
请问 guzhigang :
怎样取得该窗口的程序INSTANCE,又怎样取得程序的主窗口?有分的。100分。
halfdream 2000-03-09
  • 打赏
  • 举报
回复
你可以确定HWND找对了吗?
我曾试过几次你说的类似情况。一般情况下,
送WM_CLOSE消息多半可以,要是不行送WM_DESTROY消息。
要不然,再试试SendMessage(用法同PostMessage).
另外,还有一点,HWND窗口是程序的主窗口的话可以结束程序。
HWND如果是非主窗口,那情况可能要复杂一些:)
如果有问题的话,可以说得再具体些吗?
guzhigang 2000-03-09
  • 打赏
  • 举报
回复
应设法取得该窗口的程序INSTANCE,然后取得程序的主窗口,在发关闭消息,
lu0 2000-03-09
  • 打赏
  • 举报
回复
嘿嘿,有很多很多窗口都不对WM_CLOSE反应的:)
通常情况下,他们都对WM_SYSCOMMAND里的SC_CLOSE作出反应关闭窗口.如果该函数不
行,看来你需要HOOK一番了.
CKEN 2000-03-09
  • 打赏
  • 举报
回复
我要关的是另一个程序窗口
CKEN 2000-03-09
  • 打赏
  • 举报
回复
不行,没反应,窗口关不了
Lin 2000-03-09
  • 打赏
  • 举报
回复
向窗口发送WM_CLOSE,一般来说,将导致该窗口被关闭(如果它愿意的话)。
刚试过的,应该是没问题的。

注意:如果是用Delphi或者BCB做的程序的话, 一般来说,Application.Handle才是主窗口(0,0,0,0)句柄,而一般显示在桌面上的只是Application.MainForm
mutant 2000-03-09
  • 打赏
  • 举报
回复
如果要强制销毁的话使用
BOOL DestroyWindow(
HWND hWnd // handle to window to destroy
);
就可以了
929 2000-03-09
  • 打赏
  • 举报
回复
我想可以通过向窗口发送WM_CLOSE或WM_DESTROY消息来试试。
BOOL PostMessage(

HWND hWnd, // handle of destination window
UINT Msg, // message to post
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
);
forgettor 2000-03-09
  • 打赏
  • 举报
回复
PostMessage(hwnd,WM_QUIT/WM_CLOSE,0,0)行不行?
CKEN 2000-03-09
  • 打赏
  • 举报
回复
我记得好像大部分窗口都可以用alt+f4关闭,api如何写,我有几个控件,那些控件在
win98下烂的很,就是说,如何引发一个系统级的键盘事件(我可以先把那个设为活动
窗口,那样这个窗口就会得到ALT+F4关闭).
forgettor 2000-03-09
  • 打赏
  • 举报
回复
如果想暴力关闭整个程序,用GetWindowThreadProcessID得到窗口所属的进程,然后用TerminateProcess关闭.

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧