06-09-2017, Saat: 22:58
(Son Düzenleme: 06-09-2017, Saat: 23:57, Düzenleyen: ismailkocacan.
Sebep: memesi olacak
)
1. uygulamada Sleep ile thread bloklanıp, 2. uygulamadan da windows mesajı gönderilip aynı zamanda 2. uygulamanın donmaması/kilitlenmemesi isteniyorsa PostMessage ve SendMessage dışında SendMessageCallback callback fonksiyonu kullanılabilir.
SendMessageCallback fonksiyonu ile ilgili pencereye Windows mesajı gönderilir ve Windows procedure'ün çalışması beklenmeden hemen geriye dönülür.Windows procedure ilgili mesajı işledikten sonra yani çalıştıktan sonra, belirtilen callback fonksiyonu çağırarak mesajı işlediğini bildirir.
Dolayısı ile 1. uygulama Sleep ile bloklansa bile, 2. uygulamadan SendMessageCallback ile mesaj gönderildiğinde bir kilitlenme meydana gelmez.
Callback fonksiyon prototipi.
SendMessageCallback fonksiyonu ile ilgili pencereye Windows mesajı gönderilir ve Windows procedure'ün çalışması beklenmeden hemen geriye dönülür.Windows procedure ilgili mesajı işledikten sonra yani çalıştıktan sonra, belirtilen callback fonksiyonu çağırarak mesajı işlediğini bildirir.
Dolayısı ile 1. uygulama Sleep ile bloklansa bile, 2. uygulamadan SendMessageCallback ile mesaj gönderildiğinde bir kilitlenme meydana gelmez.
Callback fonksiyon prototipi.
VOID CALLBACK SendAsyncProc( _In_ HWND hwnd, _In_ UINT uMsg, _In_ ULONG_PTR dwData, _In_ LRESULT lResult );
procedure SendAsyncProc(HWND: HWND; Msg: UINT; wParam: wParam; dwData: ULONG_PTR; lResult: LRESULT); begin ShowMessage('mesaj işlendi'); end; procedure TForm1.Button3Click(Sender: TObject); var p1Handle: HWND; dwData: UIntPtr; begin p1Handle := FindWindow(nil, 'MainApp'); if p1Handle = 0 then exit; if not IsWindow(p1Handle) then exit; dwData := 31; SendMessageCallback(p1Handle, WM_P2, 0, 0, @SendAsyncProc, dwData); ShowMessage('DONE'); end;