Хорошо. Есть наша программа, есть сторонний процесс, который мы запускаем нашей программой, функцией createprocess далее, нам нужно полуать уведомления, когда тот процесс пытается создать окно или закрыть или появить и т д, сейчас, я это более менее могу делать так -
Код:
library dll;
uses
SysUtils,
windows,
Classes,dialogs,messages;
var
Hook:HHOOK;
Handle:THandle;
HCBT2:longword;
function CreateWND(code: integer; wParam: word;lParam: longword): longword; stdcall;
var
list:TStringList;
begin
if Code<0 then
begin
Result := CallNextHookEx(Hook, code, WParam, LParam);
exit;
end;
if(code=HCBT_CREATEWND)then
begin
Handle:=wParam;
list:=TStringList.Create;
if(FileExists('1.txt'))then
list.LoadFromFile('1.txt');
list.Add(inttostr(code)+' '+inttostr(lParam));
list.SaveToFile('1.txt');
list.Destroy;
//UnhookWindowsHookEx(Hook);
// exit;
end;
Result := CallNextHookEx(Hook, code, WParam, LParam);
end;
function SetWnd(const HCBT,dwThreadId:longword):THandle;
begin
result:=SetWindowsHookEx(WH_CBT,@CreateWND,HInstance,dwThreadId);
end;
exports
SetWnd;
end.
запускаю библиотеку так -
Код:
with StartInfo do
begin
cb := SizeOf(StartInfo);
end;
CreateProcessA(nil,'process.exe',nil,nil,false,0,nil,nil,StartInfo,ProcInfo);
WaitForInputIdle(ProcInfo.hProcess, INFINITE);
@SetWNDD:=GetProcAddress(dll,'SetWnd');
if(@SetWNDD<>nil)then
Handle:=SetWNDD(WM_CREATE,ProcInfo.dwThreadId);//}
а вот как сообщать своей программе что делает тот процесс, не знаю, окон у меня нет, поэтому вариант передачи мне месаджа не сработает, пытался оле и дде, но не полуилось( не работал с ними сам ещё,
мне бы библиотеку переделать так, чтобы моё приложение, после вызова функции библиотеки задумалось до тех пор, пока библиотека не вернёт хендл окна с которым произошла операция,(создалось уничтожилось, активизировалось и т д)
типо такой функции
Handle:=WaitForMessage(dwThreadId,HCBT_CREATEWND);