Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 如何编写在其中运行另一个GUI程序的程序_Windows_Launcher - Fatal编程技术网

Windows 如何编写在其中运行另一个GUI程序的程序

Windows 如何编写在其中运行另一个GUI程序的程序,windows,launcher,Windows,Launcher,我不知道该怎么问这个问题,所以这里有一张我想到的一些想法的图片 例如,当你运行我的“CustomLauncher”时,它会显示一个窗口,旁边有几个按钮,你可以给它赋值。当您单击按钮时,相应的程序将在右侧的大面板中运行(在窗口模式下) 当然,这都是从用户的角度出发的。他们只会看到他们想要运行的程序出现在该面板中。实际实现可能与“一个程序在另一个程序中运行”无关 我自己的用例仅限于windows桌面平台,但如果可以推广,那也很好 这真的可能吗?我可以编写这样一个程序,在面板中运行另一个程序吗?启动

我不知道该怎么问这个问题,所以这里有一张我想到的一些想法的图片

例如,当你运行我的“CustomLauncher”时,它会显示一个窗口,旁边有几个按钮,你可以给它赋值。当您单击按钮时,相应的程序将在右侧的大面板中运行(在窗口模式下)

当然,这都是从用户的角度出发的。他们只会看到他们想要运行的程序出现在该面板中。实际实现可能与“一个程序在另一个程序中运行”无关

我自己的用例仅限于windows桌面平台,但如果可以推广,那也很好


这真的可能吗?我可以编写这样一个程序,在面板中运行另一个程序吗?启动的程序可能是其他人的,如MS paint或calculator。

仅扩展我的上述评论,以下是一种可能适用于您的方法:伪造它。:)

启动程序时,截取所有发送到程序的windows消息,这些消息控制程序在屏幕上的位置。通过这种方式,它看起来是固定的,但实际上它仍然连接到普通的Windows桌面

以下是一些给你的浅显读物:

钩子是应用程序拦截事件的机制, 例如消息、鼠标操作和按键。一个函数 截取特定类型的事件称为钩子过程。A. 钩子过程可以对它接收到的每个事件进行操作,然后修改或删除 放弃该事件


我建议不要在商业应用程序中使用它,因为您正在修改您不拥有的软件的行为-该软件可能会假设其父窗口是什么,但在实验中使用Win32函数

我能想到的唯一方法就是编写一个定制的显示驱动程序。。你能把你想要达到的目标再扩大一点吗?可能有一种更简单的方法。[也就是说,为什么程序需要在面板中]我想创建一个基本上在顶部有徽标的启动程序应用程序,它已经被编程为启动的实际程序在面板中运行。该程序可能是任意的。我没有想到这个想法会带来什么有用的东西,但这个想法似乎很有趣。我的意思是,我可以把快捷方式放在桌面上,让操作系统来处理程序的运行,但是它没有标识!听起来你正在寻找的是远程桌面服务,以前称为终端服务。我认为无论你最终得到什么,都将是一个非常大的黑客攻击——Windows并不是为让你这样做而设计的。有两种创造性的方法可以考虑1)以后台用户的身份运行它,并尝试在屏幕上显示2)以普通程序的形式运行它,但使用PeekMessage截获指向该程序的所有windows消息。拦截并阻止任何试图移动/调整大小/最大/最小窗口的消息。在这种情况下,这似乎不是一个好主意。我可能会接受类似的启动器想法,除了不在里面运行程序,只做其他启动器所做的事情,让windows处理程序执行。然后它只是一个常规的启动程序应用程序(这是一个术语吗?),不需要对窗口进行子类化。只需设置其位置并删除可调整大小的窗口样式。如果你移动你的launcher窗口,你也会移动Launche窗口。挂钩非常有趣。我可能会在其他想法中使用它们。谢谢你的链接。@Dan-o同意了。不需要对窗口进行子类化。这一切都可以通过一个完全独立的应用程序(启动器)完成。子类化是90年代的一个术语,它意味着钩住另一个窗口的消息——通常通过SetWindowLong和GWL_WNDPROC。它在面向对象编程中有着不同的含义。