2) Имеется код, который ищет окно другой программы и выполняет там нажатие конкретного пункта меню: [Code] procedure TMAIN.controlsClick(Sender: TObject); Var Men :HMenu; Hnd,HndDialog,HndControl,HndAsc,HndBtn :HWnd; ...code:
procedure TMAIN.runClick(Sender: TObject); begin MAIN.Close; ShellExecute(Application.Handle,PChar('open'),PChar('programpath\Start.exe'),nil,nil,SW_SHOW) end;
Но, как я понимаю F1, GetProcAddress работает для процедур из dll. А как то же самое сделать, если моя процедура как обы ...code:
type myproc = procedure; stdcall; procedure Proc1; begin ShowMessage('Hello From Proc1'); end; procedure TForm1.Button1Click(Sender: TObject); var p: myproc; h: HWND; begin h := GetModuleHandle(nil); p := GetProcAddress(h,'Proc1'); ShowMessage(IntToStr(h)); p; // вот он сам вызов процедуры p := nil; end;
Пишу на Delphi, даже не компилируется :( [Co ...code:
typedef void (* DECODE_NOTIFY_CALLBACK)(void *buf, DWORD DataLen); FSC_API int __stdcall EnableDecodeNotify(HCONNECT hConnect, HANDLE hWnd, DWORD Option, void *Buffer, DWORD BufferSize, DECODE_NOTIFY_CALLBACK callback);
У меня возник вопрос, можно ли как-то передать структуру Type, чтобы принимающая процедура сама раскладывала Pointer на поля согласно структ ...code:
procedure WriteType(p:pointer); begin writeln(pInteger(p)^); inc(pInteger(p)); writeln(pAnsiString(p)^); end; type TMy=record i:integer; s:AnsiString; end; var f:TMy; begin f.i:=22227777; f.s:='abcdefgh'; WriteType(@f); readln; end.
Ло ...code:
procedure TForm1.wmParentNotify(var msg: TMessage); //где Form1.FormStyle = fsMDIForm begin inherited; //Например так If TWMParentNotify(Msg).Event = WM_DESTROY then begin showMessage('form closed!'); msg.result := 0; end; //Или так if msg.WParamLo = WM_DESTROY then begin showMessage('form closed!'); msg.result := 0; end; end;