Форум: "Основная";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
ВнизAV при использовании юнита Variants Найти похожие ветки
← →
Leonid Troyanovsky © (2010-03-11 18:05) [36]
> Сергей М. © (11.03.10 15:21) [35]
> получении управления в одном из потоков (как правило - в
> основном) процесса "нужного" приложения.
Года 3 назад здесь пару раз обсуждался вопрос о получении управления
над первичным потоком до входа в WinMain.
Вот одно из обсуждений:
http://delphimaster.net/view/1-1179920037
Еще одно, к сожалению, обрезалось.
Если я ничего не запамятовал, то после полной инициализации процесса
его первичный поток попадает в alertаble state, в котором опустошает
очередь APC перед входом в WinMain.
Т.е., если после обнаружение стартовавшего потока послать ему
QueueUserAPC, то она выполнится первичным потоком в нужное время.
Вот простой пример:
// Включить звуковую схему. Not Windows.MessageBeep!
procedure TForm1.Button1Click(Sender: TObject);
var
pi: TProcessInformation;
si: TStartupInfo;
p : Pointer;
d:DWord;
begin
Fillchar(si, SizeOf(si),0);
CreateProcess(
nil,
"notepad.exe",
nil,
nil,
False,
CREATE_SUSPENDED,
nil,
nil,
si,
pi
);
p := GetProcAddress( GetModuleHandle( "user32.dll" ), "MessageBeep");
QueueUserAPC(p, pi.hThread, MB_OK);
ResumeThread(pi.hThread);
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
end;
Насчет AppInit_Dlls, т.е. посылки APC в момент инициализации user32.dll
ничего не скажу, не знаю (да, и пробовать не хочу :)
Но, IMHO, уважаемая Riply рассказывала об успешных опытах в
том числе и с оным.
--
Regards, LVT.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.083 c