Текущий архив: 2003.04.10;
Скачать: CL | DM;
Вниз
Как послат message Найти похожие ветки
← →
Borys (2003-02-17 11:36) [0]Как послат message процессу без окна, известен PID.
← →
Digitman (2003-02-17 11:53) [1]процессу нельзя послать сообщение
сообщение можно послать кодовому потоку процесса (если известен ThreadId - см. PostThreadMessage()) или окнам (см. PostMessage, SendMessage и т.п.)
← →
Digitman (2003-02-17 12:00) [2]иными словами, знание PID процесса для адресации сообщений недостаточно.
необходимо, зная PID, найти ThreadID нужного код.потока целевого процесса (в контексте каждого стартуемого процесса Win32 автоматически создает как минимум один - основной - код.поток) и только после этого, получив ThreadId, посылать сообщение
перечислить код.потоки процесса можно с пом. ф-ции NtQuerySystemInformation либо с пом. ф-ций Thread32First/Next из состава ToolHelp32-интерфейса
← →
Borys (2003-02-17 12:47) [3]спасибо
← →
Borys (2003-02-17 14:46) [4]Еще вопрос.
Все работает но как только я запускаю приложение как сервис то не работает говорит не верный идентификатор
← →
Digitman (2003-02-17 15:14) [5]
> запускаю приложение как сервис
Какое приложение ?
> говорит не верный идентификатор
Кто говорит ? Кому ?
В "угадайку" будем играть сейчас)))
← →
Borys (2003-02-17 15:22) [6]Я написал приложение которое может работать как сервис и просто как консольное приложение. И другое приложение которое управляет первым. Когда запускаю его как приложение то второе приложение может ему посылать сообщения (PostThreadMessage) а если запускаю как сервис не может говорит не верный идентификатор Thread уже пробовал посылать всем Thread связанных с этим процессом.
← →
Digitman (2003-02-17 16:21) [7]ну и как ты определяешь целевой ThreadId в приложении, которое должно по этому ThreadId сообщения слать ? Код покажи
← →
Borys (2003-02-17 16:29) [8]hSnapshot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if hSnapshot = INVALID_HANDLE_VALUE then begin
exit;
end;
Entry.dwSize := sizeof(Entry);
if not(PROCESS32First(hSnapshot, Entry)) then begin
CloseHandle(hSnapshot);
exit;
end;
// Ищу вначале процесс по имени
repeat
R:="";
for i:=0 to MAX_PATH-1 do begin
if Entry.szExeFile[i]=#0 then break;
if Entry.szExeFile[i]="\" then begin
R:="";
j:=0;
continue;
end;
R:=R+Entry.szExeFile[i];
end;
//Нашли процесс ищем Thread
if R=PrName then begin
Result:=0;
CloseHandle(hSnapshot);
hSnapshot := CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, Entry.th32ProcessID);
Entry1.dwSize := sizeof(Entry1);
if not(THread32First(hSnapshot, Entry1)) then begin
CloseHandle(hSnapshot);
exit;
end;
i:=0;
repeat
//здесь смотрю ThreadID а так как их несколько (у меня 3 шт.)
//то из внешнего цикла выбираю их все по порядку (но никому
//не посылается
if Entry1.th32OwnerProcessID=Entry.th32ProcessID then begin
//Нашли нужный Thread
Result:=Entry1.th32ThreadID;
inc(i);
if i=Number then begin
break;
end;
end;
Entry1.dwSize := sizeof(Entry1);
until not(THread32Next(hSnapshot, Entry1));
CloseHandle(hSnapshot);
exit;
end;
Entry.dwSize := sizeof(Entry);
until not(PROCESS32Next(hSnapshot, Entry));
← →
Digitman (2003-02-17 16:49) [9]во-первых, ToolHelp32-интерфейс не подходит для поиска процесса, зарегистрированного при старте как сервис-процесс
пользуйся для этого NtQuerySystemInformation()
во-вторых, ты занимаешься ерундой
зарегистрируй в обоих приложениях при старте некое именованное Win-сообщение (см. RegisterWindowMessage) и посылай на здоровье сообщения в любом направлении. Главное - создать в приложении-приемнике сообщения окно верхнего уровня, тогда приложение-передатчик сможет послать это сообщение (см. SendMessage(HWND_BROADCAST..)) всем верхнеуровневым окнам системы, но отреагирует на него лишь приложение-приемник, ибо оно зарегистрировало код именованного сообщения и заинтересовано в его приеме
← →
Borys (2003-02-17 17:26) [10]А как в сервисе зарегистрировать окно верхнего уровня, он же без окон.
← →
Digitman (2003-02-17 17:36) [11]
> Borys
Как в сервисе, так и не в сервисе - обычный вызов CreateWindow[Ex]
Страницы: 1 вся ветка
Текущий архив: 2003.04.10;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.006 c