一个很奇怪的现象... ( 积分: 50 )

  • 主题发起人 主题发起人 l0v3_y1n9
  • 开始时间 开始时间
L

l0v3_y1n9

Unregistered / Unconfirmed
GUEST, unregistred user!
一个很奇怪的现象...
A的特性:自身隐藏窗口,而已用了内存映射文件等函数,主要为了实现进程方面的通信.
注意:第一个问题在用到内存映射文件等函数才出现的,没用的话,一切正常!
1.我的父进程A打开子进程B,无论用SW_SHOW,SW_SHOWNORMAL,SW_SHOWMAXIMIZED等等的参数打开的时候,子进程B是实现了各种打开方式,但是它的窗口都是在所有窗口的最底层.就比如我用最大化的方式打开B,子进程B的窗口实现了最大化,但是它自身的窗口并不是在当前窗口的,而是在所有窗口的最后面...我的表达能力不是很好,望见谅!
2.还有就是我的父进程如果用外面流传的纯API代码来隐藏进程的话,它所打开的任意文件的进程也一样隐藏,但子进程根本没有隐藏进程的代码,真是搞不懂!连隐藏进程也被子进程所继承...

如下是这两个问题都用到在网上流传的打开文件函数
function WinExecFile(FileName: string; ShowCmd: DWORD; wait: Boolean; ProcID:PDWORD): Longword;
var
StartupInfo: TStartupInfo;
ProcessInfo: TProcessInformation;
begin
FillChar(StartupInfo, SizeOf(StartupInfo), #0);
StartupInfo.cb := SizeOf(StartupInfo);
StartupInfo.dwFlags := STARTF_USESHOWWINDOW or STARTF_FORCEONFEEDBACK;
StartupInfo.wShowWindow := ShowCmd;
if not CreateProcess(nil,
@FileName[1],
nil,
nil,
False,
CREATE_NEW_CONSOLE or
NORMAL_PRIORITY_CLASS,
nil,
nil,
StartupInfo,
ProcessInfo)
then
Result := WAIT_FAILED
else
begin
if wait = FALSE then
begin
if ProcID <> nil then
ProcID^ := ProcessInfo.dwProcessId;
result := WAIT_FAILED;
exit;
end;
WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
GetExitCodeProcess(ProcessInfo.hProcess, Result);
end;
if ProcessInfo.hProcess <> 0 then
CloseHandle(ProcessInfo.hProcess);
if ProcessInfo.hThread <> 0 then
CloseHandle(ProcessInfo.hThread);
end;

以上两种情况均出现在Win2K+SP4和Win2K3+SP1的虚拟机上,在本机WinXP+SP2测试一切正常!
各位大牛,知道是什么现象不?可能是函数的问题吧,但是我用Winexec和ShellExecute测试都一样的结果,这个问题困扰了我一周多,我快疯了,望帮忙解决一下...~_~ [:(]
 

Similar threads

后退
顶部