STARTUPINFO si;
PROCESS_INFORMATION pi;
HMODULE hRemoteModule = NULL;
bool bSuccess = false;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_HIDE;
if (CreateProcess(NULL, FILE_PROG.c_str(), 0, 0, FALSE, 0, 0, 0, &si, &pi))
{
DWORD res = WaitForInputIdle(pi.hProcess, 3000);
if (res == WAIT_TIMEOUT)
{
TerminateProcess(pi.hProcess, 0);
} else
{
LPVOID p = VirtualAllocEx(pi.hProcess, 0, FILE_DLL.Length() + 1, MEM_COMMIT, PAGE_READWRITE);
if (p)
{
if (WriteProcessMemory(pi.hProcess, p, FILE_DLL.c_str(), FILE_DLL.Length() + 1, NULL))
{
FARPROC fp = GetProcAddress(GetModuleHandle("kernel32.dll"), "LoadLibraryA");
if (fp)
{
HANDLE hThread = CreateRemoteThread(pi.hProcess, 0, 0, (LPTHREAD_START_ROUTINE)fp, (LPVOID)p, 0, NULL);
if (hThread)
{
res = WaitForSingleObject(hThread, 3000);
if (res == WAIT_TIMEOUT)
{
TerminateThread(hThread, 0);
}
GetExitCodeThread(hThread, (LPDWORD)&hRemoteModule);
if (hRemoteModule)
{
bSuccess = true;
}
CloseHandle(hThread);
}
}
}
VirtualFreeEx(pi.hProcess, p, FILE_DLL.Length() + 1, MEM_FREE);
}
}
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
}
Не работает wShowWindow при CreateProcess
Пытаюсь подгрузить dll в другую программу, но скрыть эту программу от глаз. Что делаю:
Код:
Почему-то программа все равно видна... я и так, и сяк... ничего не выходит :( Что я не так делаю?
PS: попутно - как корректно закрыть приложение из создаваемого в подключенной DLL потока? А то у меня, как я понял, руки корявые - или ошибка, или NULL-действие, т.е. приложение остается работать...
А с чего ты решил, что wShowWindow будет всегда работать? Это только параметр, передаваемый запускаемому приложению, а оно может его и не использовать.
а как сделать, чтобы оно его использовало? как запустить, например, блокнот, скрытым? именно через CreateProcess, ведь мне надо будет после запуска подключать еще и dll к этому блокноту
---
Попробовал этот CreateProcess с notepad.exe в Delphi 6 - всё нормально, невидимый блокнот.
хм... а в чем может быть дело? почему у меня запускаемая программа все равно видна?