很有意思的一个问题!大家帮帮忙!我在程序中取得了别一个De 找零售管理
我在程序中取得了别一个Delphi程序的Application句柄想用API隐藏和显示程序的主窗口
但对的Application句柄用只能隐藏它在任务栏的那个按钮,我想只有得到主窗口句柄对它
用才行!我想用GetWindowThreadProcessId打开进程来找可能OK!但我不会!请大家帮帮
忙!
showwindow(主窗口句柄,SW_HIDE);//隐藏
showwindow(主窗口句柄,SW_SHOW);//显示
还有我用了SetWindowPos(Handle,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE Or SWP_NOSIZE);
使别的程序[总在最前]就是窗口最前!请问要用什么方法才能去除它的[总在最前]就是
窗口最前呢?和Windows的程序管理器(Ctrl+Alt+Del)的菜单第二项中的[前端显示]!
2楼: 使用EnumWindows能列这进程的全部窗口
如:
窗口句柄:3343832,窗口类名:TForm4,窗口标题:Form4
窗口句柄:4261458,窗口类名:TForm1,窗口标题:Form1
窗口句柄:14222950,窗口类名:TForm3,窗口标题:Form3
窗口句柄:26019376,窗口类名:TForm2,窗口标题:Form2
窗口句柄:4064762,窗口类名:TApplication,窗口标题:Project1
窗口句柄:1574610,窗口类名:MSCTFIME UI,窗口标题:M
窗口句柄:2295382,窗口类名:IME,窗口标题:Default IME
但我没有法在它们中找到主窗口!
大家帮帮忙! 如零售管理
3楼: 分不明谁是主窗口
4楼: 想通过Application获得外部程序主窗口不太容易.
VCL和MFC一样.都是Application是一个1X1的不可见窗口.他们才是真正的主窗口.任务栏上面的按钮对应的就是他们.而我们的主Form其实对他们来说也是一个普通的Form而已.
建议你现确定它们的主Form类的类名.以后用FindWindow这个API来查找到对应的窗口.
H := FindWindow(''主窗口的类名'',nil);
if H = 0 then
begin
//没找到
end
else
begin
//找到了
end;
5楼: 用这个判断:
function IsMainWindow(AHandle: THandle): Boolean;
var
nParentWnd: THandle;
nExStyle: DWORD;
begin
if IsWindowVisible(AHandle) then
begin
nParentWnd := GetWindowLong(AHandle, GWL_HWNDPARENT);
nExStyle := GetWindowLong(AHandle, GWL_EXSTYLE);
Result := ((nParentWnd = 0) or (nParentWnd = GetDesktopWindow)) and
((nExStyle and WS_EX_TOOLWINDOW = 0) or (nExStyle and WS_EX_APPWINDOW <> 0));
end
else Result := False;
end;
6楼: to LSUPER
你的这个function IsMainWindow(AHandle: THandle): Boolean;只能确认Application窗口
财务软件版7楼: 那么我用了SetWindowPos(Handle,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE Or SWP_NOSIZE);
使别的程序[总在最前]就是窗口最前!请问要用什么方法才能去除它的[总在最前]就是
窗口最前呢?和Windows的程序管理器(Ctrl+Alt+Del)的菜单第二项中的[前端显示]!
回答这个我一样给全分!!@!!@!
8楼: 毛了哟,一个一个试三,一般Form1是主窗口,因为是第一个创建