兩個Application互傳資料其中一個Application視窗最小化時收不到訊息 |
尚未結案
|
ybmh
一般會員 發表:20 回覆:14 積分:6 註冊:2004-01-14 發送簡訊給我 |
|
m8815010
版主 發表:99 回覆:372 積分:289 註冊:2003-11-13 發送簡訊給我 |
引言: 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去送則有送卻收不到。 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |