H
hs-kill
Unregistered / Unconfirmed
GUEST, unregistred user!
用CreateDesktop来创建个桌面以后,可以在他的上面运行新程序,这都好办<br>但是我想把我本身创建虚拟桌面的程序也转到这个新的虚拟桌面上.......这么办<br>也就是说我的程序:<br>1.启动后创建一个虚拟桌面<br>2.把自己转移到虚拟桌面上<br>3.做事<br>4.把自己转回原来的桌面<br>5.关闭虚拟桌面<br><br>现在创建关闭都好办,但是转移桌面这问题一直没搞定<br>我用下面代码:<br>program Project1;<br><br>uses<br> Windows,Forms;<br><br>{$R *.res}<br><br>var<br> hSta:HDESK;<br> olddh,desktophandle:HDESK;<br>const<br> newdtname='111111';<br>begin<br> Application.Initialize;<br> desktophandle:=CreateDesktop(pchar(newdtname),<br> Nil, Nil, 0,<br> DESKTOP_CREATEMENU or<br> DESKTOP_CREATEWINDOW or<br> DESKTOP_SWITCHDESKTOP or<br> DESKTOP_READOBJECTS or<br> DESKTOP_WRITEOBJECTS or<br> STANDARD_RIGHTS_REQUIRED,<br> Nil <br> if not SetProcessWindowStation(desktophandle) then<br> messagebox(0,'SetProcessWindowStation error','',mb_ok);<br> if not SetThreadDesktop(desktophandle) then<br> messagebox(0,'SetThreadDesktop error','',mb_ok)<br> else<br> SwitchDesktop(desktophandle);<br> Application.Run;<br>end.<br><br>在使用SetProcessWindowStation和SetThreadDesktop的时候过不去<br>按照MSDN上说明SetThreadDesktop的进程不能有任何UI和hook之类的东西<br>我把这些放到了project里,按说应该不存在任何UI和hook的东西了,为什么还是失败<br>难道必须重新create一个进程?还是我的理解错了?<br><br>请各位高手指点下.........<br><br>至于其他方法.....我想了一个,把要运行的程序当作资源加进另一个exe里,执行后先释放这个资源,然后创建桌面,在那个桌面执行这个exe.........<br>不过万不得以我是实在不想这么做.......