全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1053
推到 Plurk!
推到 Facebook!

兩個Application互傳資料其中一個Application視窗最小化時收不到訊息

尚未結案
ybmh
一般會員


發表:20
回覆:14
積分:6
註冊:2004-01-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-01-30 11:23:56 IP:210.202.xxx.xxx 未訂閱
兩個Application互傳資料 用SendMessage ... 等API來實做 現有兩個Application分別為ApplicationA,ApplicationB ApplicationA在Focus的狀態中 ApplicationB視窗最小化縮在右下角 這種情況下ApplicationB似乎就收不到Application送過來的訊息了 怎樣解決ㄋ??
m8815010
版主


發表:99
回覆:372
積分:289
註冊:2003-11-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-01-30 12:40:16 IP:61.63.xxx.xxx 未訂閱
引言: ybmh你好: 感覺是可以的,不論ApplicationB是縮到右下角變成trayicon或是Minimize,或甚至是隱藏狀況! 我的簡單測試:拿自已寫範例程式做ApplicationA,free小程式"HandleView.exe"做ApplicationB "HandleView.exe"程式應該可由本站查到!
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 HWND hwnd=NULL;
 hwnd=FindWindow(NULL,"Handle View"); <-----Mark 1     if (hwnd==NULL) {
     ShowMessage("Can't find!");
     return;
 }     ShowMessage((LONG)hwnd);
 ShowMessage((LONG)GetWindow(hwnd,GW_OWNER));  <-----Mark 2     char* buf="試試可否送訊息給AppicationB";
 SendMessage(hwnd,WM_SETTEXT,0,(LPARAM)buf);  <-----Mark 3
}
這個範例是ApplicationA把ApplicationB的Form Caption改變,以驗證是否有送訊息成功! 幾個你可能失敗送達訊息的推測是上面的3個Mark處! Mark 1. 是否真能找到要送訊息的視窗的hwnd值? 如果找不到或是找錯了(更糟),那麼一定是有送沒有到。FindWindow只是一個可用的方法,並不一定正確,比較可行的是用ApplicationA開啟ApplicationB , 以得到ApplicationB的ProcessId,然後去核對ProcessId、CaptionName、ClassName、是否可見…等等來找到正確所需視窗的HWND值(相關討論本站有很多前輩寫的很好)。 Mark 2. 訊息是要送給ApplicationB的MainForm視窗還是Application視窗? 送給MainForm視窗可由Mark 1找HWND值,送給Application視窗可由上例Mark 2找HWND值。 Mark 3. 有些訊息的送法不同,像上例Mark 3處,WM_SETTEXT訊息如果用PostMessage去送則有送卻收不到。
系統時間:2024-04-20 15:41:29
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!