Nedanstående rutin funkar på önskat sätt i W98, men i W2000 verkar inte TerminateProcess fungera, så programmet "zipwarn" avslutas inte. Ska du inte lägga till flaggan PROCESS_TERMINATE. Win 9x kanske inte känslig för det med tror win2000(NT) är känsligt för det. Dessvärre hjälper det inte med flaggan PROCESS_TERMINATE. Har du kollat vad hProcess har för värde efter OpenProcess? om det är NULL så anropa GetLastError för att få felkoden. Om inte så kolla om TerminateProcess returnerar False, isåfall kan du anropa GetLastError därefter för att få felkoden.?? TerminateProcess i W2000 ??
Är den någon som vet hur det bör se ut för att funka???
- Hans
If Time$ < de Then 'Låsfilen är färsk
ProcessId = Shell("zipwarn", vbNormalFocus)
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, False, ProcessId)
Do While Dir("C:\pa") <> "" And Time$ < de
start = Timer
Do While Timer < start + 2
DoEvents
Loop
Loop
TerminateProcess hProcess, 0
End IfSv: ?? TerminateProcess i W2000 ??
Skulle oxå rekomendera att du använder en timmer för att vänta. Kräver betydlig mindre prestanda än din loop. Vilket du kan göra mindre resurskrävande genom att lägga till anrop till API anropet Sleep.
Ur MSDN:
OpenProcess
The OpenProcess function returns a handle to an existing process object.
HANDLE OpenProcess(
DWORD dwDesiredAccess, // access flag
BOOL bInheritHandle, // handle inheritance flag
DWORD dwProcessId // process identifier
);
Parameters
dwDesiredAccess
Specifies the access to the process object. For operating systems that support security checking, this access is checked against any security descriptor for the target process. Any combination of the following access flags can be specified in addition to the STANDARD_RIGHTS_REQUIRED access flags:
PROCESS_ALL_ACCESS
Specifies all possible access flags for the process object.
PROCESS_CREATE_PROCESS
Used internally.
PROCESS_CREATE_THREAD
Enables using the process handle in the CreateRemoteThread function to create a thread in the process.
PROCESS_DUP_HANDLE
Enables using the process handle as either the source or target process in the DuplicateHandle function to duplicate a handle.
PROCESS_QUERY_INFORMATION
Enables using the process handle in the GetExitCodeProcess and GetPriorityClass functions to read information from the process object.
PROCESS_SET_INFORMATION
Enables using the process handle in the SetPriorityClass function to set the priority class of the process.
PROCESS_TERMINATE
Enables using the process handle in the TerminateProcess function to terminate the process.
PROCESS_VM_OPERATION
Enables using the process handle in the VirtualProtectEx and WriteProcessMemory functions to modify the virtual memory of the process.
PROCESS_VM_READ
Enables using the process handle in the ReadProcessMemory function to read from the virtual memory of the process.
PROCESS_VM_WRITE
Enables using the process handle in the WriteProcessMemory function to write to the virtual memory of the process.
SYNCHRONIZE
Windows NT: Enables using the process handle in any of the wait functions to wait for the process to terminate.
bInheritHandle
Specifies whether the returned handle can be inherited by a new process created by the current process. If TRUE, the handle is inheritable.
dwProcessId
Specifies the process identifier of the process to open. Sv: ?? TerminateProcess i W2000 ??
Man kan använda enbart den i W95/98 det funkar där men inte i W2000 :-(
- HansSv: ?? TerminateProcess i W2000 ??