如何在WIN95/98下中断一个正在运行的程序,处理后再从中断处恢复程序的运行。(200分)

  • 主题发起人 主题发起人 jseven
  • 开始时间 开始时间
J

jseven

Unregistered / Unconfirmed
GUEST, unregistred user!
我想编一个记事本程序,在任何时候敲热键后中断正在运行的程序(指前台的ACTIVE窗口),处理完记事本后在恢复原来运行的程序.
 
你的想法很怪,这似乎不符合windows多任务的风格.
虽然从理论上来说可以实现,但是我认为没必要.

你把你的要求说的再详细一点,肯定有更好的解决方案.
 
下面给出一段在 Delphi 中关闭“计算器”程序为例:
...
var
HWndCalculator : HWnd;
begin
// find the exist calculator window
HWndCalculator := Winprocs.FindWindow(nil, '计算器');

// close the exist Calculator }
if HWndCalculator <> 0 then
SendMessage(HWndCalculator, WM_CLOSE, 0, 0);
end;
在此特意再摘录一段 Win32 SDK 中的说明文字:
Typically, an application sends the WM_CLOSE message before
destroying awindow, giving the window the opportunity to
prompt the user for confirmation before the window is destroyed.
A window that includes a System menu automatically receives the
WM_CLOSE message when the user chooses the Close command from
the menu. If the user confirms that the window should be destroyed,
the application calls DestroyWindow. [END]
 
恐怕只能是在任何时候敲热键后切换程序,
从正在运行的程序(指前台的ACTIVE窗口)到记事本,
完后再按某热键切换加原程序。

要不然就看看TR吧,不过那是调试程序的。
 
把自己的优先级设置到最高。
 
我想很难随时中断,随时再继续的。
除非前台程序是你自己写的,可以设置一个全局变量,
bContinue := true;
在你这个程序某些处理的地方:
while not bContinue do Application.ProcessMessages;
当你想中断的时候(比如用了热键),通过记事本程序给前台
发送消息,让前台程序设置bContinue := false;
前台就在那里循环等待。
等你的记事本处理完毕,再发送消息给前台程序,设置bContinue := true;
 
1、用Findwindow得到窗口Handle
2、根据窗口Handle用GetWindowThreadProcessID得到进程hprocess和创建此窗口线程的ThreadID
3、用SuspendThread(ThreadID),将此线程挂起。
这样此程序就被中断了,这里只对单线程的程序。
如果是多线程,还要在将他所有的线程挂起。
 
别忘了用ResumeThread(ThreadID)恢复被中断的程序。
 
很感兴趣,我觉得和FPE,或者金山游侠的机制差不多,具体我就
不清楚了,愿听大侠们解说!
 
;这是典型得Dos下得TSR编程。Win98/nt好象没这概念,任务切换由系统完成!
jseven。如果是Dos下得TSR编程,我可以帮助你,我以前写在日记本上得,
For C得,200分,我可以将它输入电老发给你
{B-)
 
"FPE,或者金山游侠"能中断别的程序吗? 好像不能吧?
 
就以FPE2000为例,如果它不中断正在运行的程序,当玩家跳转回游戏的时候,玩家岂不是已经被电脑敲毙了(比如即时游戏)?其实我主要是想编写一个能在WINDOWS游戏运行过程中随时调出一本攻略的程序,有人也许要问了,你就启动一个记事本,需要的时候切换任务不就得了,可是实际情况是有一些游戏是不能切换的,切换后就不能切换回来了,所以我才想到要用中断,把游戏当前的位置记下来,切换到攻略后再还原,这的确有点TSR的味道,可是我想不到更好的方法,因为有些游戏不能用ALT+TAB切换!谢谢大家的建议不过我还是没有得到好一点的提示,所以给各位每人加25吧,表示谢意。
 
后退
顶部