Winexec 调用 在应用程序 A.exe 中用 Winexec 调用 B.exe;现在想打开 B.exe 后,A.exe 不能用直到 B.exe 关闭;就好象 B.showmodal 一样有什么办法??? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用绑架窗体,不能知道行不行,我只是试过一次,还可以,但不知道能不能帮到你.“绑架窗体”:顾名思义,就是将其它应用程序甚至系统程序的窗体活生生地拖进本程序的窗体内。这种未征得其它程序同意的强行“绑架”行为在某些场合下却能发挥出非常独特的作用。本文将讨论“绑架”窗体的技术及应用,并给出了一个完整的“强盗”程序的例子。从技术上讲,为了实现“绑架”,“强盗”程序中必须要有一个 MDIForm对象。 实现“绑架”的第二个条件,是必须知道被“绑架”窗体的句柄。做到这一点并不难。比如,当鼠标在屏幕上滑动时,我们可以用 API函数GetCursorPos来获得鼠标指针的当前位置坐标,然后用另一个 API函数 WindowFromPoint来获得指定点窗口的句柄。或者使用FindWindow获得窗口句柄。有了上述两个条件,“强盗”程序就可以开始实施“绑架”了:首先用 API函数GetWindow 的GW_CHILD命令来寻找本程序第一个子窗口的句柄;然后用另一个 API函数 SetParent为被“绑架”窗体指定一个“新父”,即指向上面的子窗口的句柄。立刻,两个原本毫无关系的窗体具有了“父子”关系:被“绑架”窗口出现在“强盗”窗体内部!二、“绑架”的安全性 不分青红皂白地进行“绑架”是非常危险的。但只要遵守以下两个原则就可以保证安全性: 第一,在关闭“强盗”程序之前,把被“绑架”窗体用 SetParent函数“释放”掉,即恢复被“绑架”者的原来的“父亲”。 第二,不要“绑架”系统窗口。系统窗口一般有:任务栏窗口、按下“开始”产生的窗口、按下“Ctrl+Alt+Del”产生的窗口,点击鼠标右键产生的窗口,等等。 绑架”技术在VB中有广泛的应用,例如,可在程序运行中将控件置入容器控件内部(比如将一个按钮设成图象或窗体控件的子窗口),或者将控件从一个容器移至窗体中的另一个。代码:在窗体的private中定义 hwndOldParent:HWND;hwndNotePad:HWND;将窗口的FormStyle设为fsMDIFormprocedure TForm1.Button1Click(Sender: TObject);beginhwndNotePad:=FindWindow(PChar('Notepad'),0);hwndOldParent:=GetParent(hwndNotePad);Windows.SetParent(hwndNotePad,handle);end;procedure TForm1.FormDestroy(Sender: TObject);beginWindows.SetParent(hwndNotePad,hwndOldParent);end; 用CreateProcess调用外部程序,并得到其进程句柄,用WaitForSingleObject检查该进程是否结束。 放一个timer每隔0.n秒查下一系统进程中是否有 B.exe 如果有在A的所有控件enabled:=false onclose 中 exit 。如果没有b.exe 相反操作 messagebox,变量中使用换行. 请问下用过indy的朋友,救命啊!!!!!!!!! Delphi中如何编写 sftp客户端,连接Linux默认的sftp服务器? 求一SQL语句 关于拖动image控件的问题。 你们喜欢出差吗? 问两个小问题,关于TableScope与HDC的。 关于TFileStream的问题。 高手请进!多层中(DCOM连接),直接启动客户端程序和先启动服务器端程序有何分别? 请问如何把select语句中的table设置为变量,请举例!谢谢! ClientDataSet提交数据问题! sql 急问 大家看看这个语句错在哪里
从技术上讲,为了实现“绑架”,“强盗”程序中必须要有一个 MDIForm对象。
实现“绑架”的第二个条件,是必须知道被“绑架”窗体的句柄。做到这一点并不难。比如,当鼠标在屏幕上滑动时,我们可以用 API函数GetCursorPos来获得鼠标指针的当前位置坐标,然后用另一个 API函数 WindowFromPoint来获得指定点窗口的句柄。或者使用FindWindow获得窗口句柄。
有了上述两个条件,“强盗”程序就可以开始实施“绑架”了:首先用 API函数GetWindow 的GW_CHILD命令来寻找本程序第一个子窗口的句柄;然后用另一个 API函数 SetParent为被“绑架”窗体指定一个“新父”,即指向上面的子窗口的句柄。立刻,两个原本毫无关系的窗体具有了“父子”关系:被“绑架”窗口出现在“强盗”窗体内部!
二、“绑架”的安全性
不分青红皂白地进行“绑架”是非常危险的。但只要遵守以下两个原则就可以保证安全性:
第一,在关闭“强盗”程序之前,把被“绑架”窗体用 SetParent函数“释放”掉,即恢复被“绑架”者的原来的“父亲”。
第二,不要“绑架”系统窗口。系统窗口一般有:任务栏窗口、按下“开始”产生的窗口、按下“Ctrl+Alt+Del”产生的窗口,点击鼠标右键产生的窗口,等等。
绑架”技术在VB中有广泛的应用,例如,可在程序运行中将控件置入容器控件内部(比如将一个按钮设成图象或窗体控件的子窗口),或者将控件从一个容器移至窗体中的另一个。
代码:
在窗体的private中定义
hwndOldParent:HWND;
hwndNotePad:HWND;将窗口的FormStyle设为fsMDIFormprocedure TForm1.Button1Click(Sender: TObject);
begin
hwndNotePad:=FindWindow(PChar('Notepad'),0);
hwndOldParent:=GetParent(hwndNotePad);
Windows.SetParent(hwndNotePad,handle);end;procedure TForm1.FormDestroy(Sender: TObject);
begin
Windows.SetParent(hwndNotePad,hwndOldParent);
end;
B.exe
如果有在A的所有控件enabled:=false onclose 中 exit 。如果没有b.exe 相反操作