如何实现类似任务管理器中的“切换”功能? ( 积分: 100 )

  • 主题发起人 主题发起人 gsw798
  • 开始时间 开始时间
G

gsw798

Unregistered / Unconfirmed
GUEST, unregistred user!
如何实现类似任务管理器中的“切换”功能?<br>如:运行程序A后,<br>在任务管理器中,选择程序A,在此快捷菜单中,选择“切换”,<br>即到了程序A的界面,<br>如何实现此“切换”功能呢?
 
如何实现类似任务管理器中的“切换”功能?<br>如:运行程序A后,<br>在任务管理器中,选择程序A,在此快捷菜单中,选择“切换”,<br>即到了程序A的界面,<br>如何实现此“切换”功能呢?
 
setforegroundwindow
 
谢谢!!<br><br>但是这个函数适用面很窄,<br>对于只有一个MessageBox的窗体,它就无效,<br>对于有多个窗体同时显示的应用程序,它又可能无效,<br>对于未知的程序,它需要枚举所有窗体的类,它<br>还要记录各个窗体的层次关系及VISIBLE状态。<br><br>朋友,对于只有一个MessageBox的应用程序来说,你是怎么实现的?<br>愿与你交流。<br>我的MSN:chinawsdg@hotmail.com
 
这里有 virtual desktop 的源码,<br>http://prdownloads.sourceforge.net/virtual-desktop/DesktopSources.zip?download<br>有兴趣的朋友,不妨研究一下。
 
Win98 2000 XP下,SetForegroundWindow 已经被 FlashWindowEx 取代。<br>也就是说,任务条上的按钮只闪几下完事,要想把它提到前端,的试试下面的代码了。<br><br>procedure SwitchWindowToTop(wh: THandle);<br>var<br> &nbsp;hCurrWnd: THandle;<br> &nbsp;iMyTID, iCurrTID: integer;<br>begin<br> &nbsp;hCurrWnd := GetForegroundWindow;<br> &nbsp;iMyTID := GetCurrentThreadId;<br> &nbsp;iCurrTID := GetWindowThreadProcessId(hCurrWnd, nil);<br> &nbsp;AttachThreadInput(iMyTID, iCurrTID, True);<br> &nbsp;SetForegroundWindow(wh);<br> &nbsp;AttachThreadInput(iMyTID, iCurrTID, False);<br>end;
 
procedure SwitchWindowToTop(wh: THandle);<br>wh 是窗口句柄?<br>如果是当前程序只有一句MessageBox,<br>你就得不到句柄了吧?
 
procedure SwitchWindowToTop(wh: THandle);<br>wh 是窗口句柄?<br>如果是当前程序只有一句MessageBox,<br>你就得不到句柄了吧?
 
application.Handle &nbsp; ??
 
我也没有搞清楚,<br>我想OopsWare可能指的是窗口的句柄。
 
windows中的control都是有句柄的,如果打开forms.pas看看,会知道Tapplication也是一个窗口。你所说的那个只有一个MessageBox的窗口句柄,好像不是那么容易知道,但是你创建Messagebox时要提供一个父窗口句柄的。也可以用 EnumWindows 枚举出所有的窗口句柄。
 
To OopsWare:<br> &nbsp; &nbsp;关键像MessageBox的程序并不是自己写的,<br>所以,它的父句柄难以得到。
 
后退
顶部