取得上一個視窗,並且使它 Actived ? |
尚未結案
|
solitarygo
一般會員 發表:4 回覆:12 積分:3 註冊:2004-07-30 發送簡訊給我 |
請問一下,我想要取得上一個視窗,
並且把它設為 Actived,
下列是我的程式碼: void __fastcall TForm1::Button1Click(TObject *Sender)
{
HWND hWnd=FindWindow(NULL, "Form1");
HWND hWndPrev;
hWndPrev=GetNextWindow(hWnd, GW_HWNDPREV);
if(hWndPrev!=NULL)
{
char WCaption[256];
GetWindowText(hWndPrev, WCaption, 255);
Label1->Caption=String(WCaption);
ShowWindow(hWndPrev, SW_SHOW);
BringWindowToTop(hWndPrev);
}
else
Label1->Caption="NULL";
}
每次我點取 Button1時, Label1的文字都是出現 Default IME,
請問我要如何做? 才能夠做到我要的功能呢?
"Default IME",我不了解這是什?可請知道的大大解惑一下嗎?謝謝^^
|
pwipwi
版主 發表:68 回覆:629 積分:349 註冊:2004-04-08 發送簡訊給我 |
|
solitarygo
一般會員 發表:4 回覆:12 積分:3 註冊:2004-07-30 發送簡訊給我 |
pwipwi您好:
我已經照你的方法去取下一個視窗的Handle,但似乎不是先前的視窗,
我還特地用迴圈一直取下一個視窗的Handle,每次的迴圈值都不一樣,
測試結果出現了好多怪怪的框架,如:SysFader、NetDDE Agent,
而且這些框架都關不掉=.=
我的程式碼如下:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
HWND hWnd=FindWindow(NULL, "Form1");
HWND hWndPrev;
hWndPrev=GetNextWindow(hWnd, GW_HWNDPREV);
for(int i=0;i<2;i ) // 改變 i 值,看取得的結果
hWndPrev=GetNextWindow(hWndPrev, GW_HWNDPREV);
if(hWndPrev!=NULL)
{
char WCaption[256];
GetWindowText(hWndPrev, WCaption, 255);
Label1->Caption=String(WCaption);
ShowWindow(hWndPrev, SW_SHOW);
BringWindowToTop(hWndPrev);
}
else
Label1->Caption="NULL";
}
|
solitarygo
一般會員 發表:4 回覆:12 積分:3 註冊:2004-07-30 發送簡訊給我 |
pwipwi您好:
我已經照你的方法去取下一個視窗的Handle,但似乎不是先前的視窗,
我還特地用迴圈一直取下一個視窗的Handle,每次的迴圈值都不一樣,
測試結果出現了好多怪怪的框架,如:SysFader、NetDDE Agent,
而且這些框架都關不掉=.=
我的程式碼如下:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
HWND hWnd=FindWindow(NULL, "Form1");
HWND hWndPrev;
hWndPrev=GetNextWindow(hWnd, GW_HWNDPREV);
for(int i=0;i<2;i ) // 改變 i 值,看取得的結果
hWndPrev=GetNextWindow(hWndPrev, GW_HWNDPREV);
if(hWndPrev!=NULL)
{
char WCaption[256];
GetWindowText(hWndPrev, WCaption, 255);
Label1->Caption=String(WCaption);
ShowWindow(hWndPrev, SW_SHOW);
BringWindowToTop(hWndPrev);
}
else
Label1->Caption="NULL";
}
|
pwipwi
版主 發表:68 回覆:629 積分:349 註冊:2004-04-08 發送簡訊給我 |
|
solitarygo
一般會員 發表:4 回覆:12 積分:3 註冊:2004-07-30 發送簡訊給我 |
我試過了,還是不行。
程式碼如下:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
HWND hWnd=FindWindow(NULL, "Form1");
HWND hWndPrev;
hWndPrev=GetWindow(hWnd, GW_HWNDPREV);
if(hWndPrev!=NULL)
{
while(!IsWindowVisible(hWndPrev))//沒有顯示的視窗排除
hWndPrev=GetWindow(hWndPrev, GW_HWNDPREV); char WCaption[256];
GetWindowText(hWndPrev, WCaption, 255);
Label1->Caption=String(WCaption);
ShowWindow(hWndPrev, SW_SHOW);
BringWindowToTop(hWndPrev);
}
else
Label1->Caption="NULL";
}
結果不知道 handle 的視窗跑哪去了,因為 Label1 是空字串。
請問還有其他的方法嗎?
|
pwipwi
版主 發表:68 回覆:629 積分:349 註冊:2004-04-08 發送簡訊給我 |
我把你的Code修改了一下,試試看能不能運作囉。
HWND hWnd=FindWindow(NULL, "Form1"); HWND hWndPrev; hWndPrev=GetWindow(hWnd, GW_HWNDFIRST); if(hWndPrev!=NULL) { while(hWndPrev != Application->Handle)//沒有顯示的視窗排除 hWndPrev=GetWindow(hWndPrev, GW_HWNDNEXT); hWndPrev=GetWindow(hWndPrev, GW_HWNDNEXT); char WCaption[256]; GetWindowText(hWndPrev, WCaption, 255); Label1->Caption=String(WCaption); ShowWindow(hWndPrev, SW_SHOW); SetForegroundWindow(hWndPrev); } else Label1->Caption="NULL"; |
solitarygo
一般會員 發表:4 回覆:12 積分:3 註冊:2004-07-30 發送簡訊給我 |
|
pwipwi
版主 發表:68 回覆:629 積分:349 註冊:2004-04-08 發送簡訊給我 |
|
solitarygo
一般會員 發表:4 回覆:12 積分:3 註冊:2004-07-30 發送簡訊給我 |
我使用了 SendMessage(Handle, WM_GETTEXT, 255, (long)str);
仍舊不能把視窗的標題取出來,
我的程式碼如下:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
HWND hWnd=FindWindow(NULL, "Form1");
HWND hWndPrev;
hWndPrev=GetWindow(hWnd, GW_HWNDFIRST);
if(hWndPrev!=NULL)
{
while(hWndPrev != Application->Handle)
hWndPrev=GetWindow(hWndPrev, GW_HWNDNEXT);
hWndPrev=GetWindow(hWndPrev, GW_HWNDNEXT);
char WCaption[256];
memset(WCaption, '\0', 256);
SendMessage(hWndPrev, WM_GETTEXT, 255, long(&WCaption[0]));
Label1->Caption=(String)WCaption;
ShowWindow(hWndPrev, SW_SHOW);
BringWindowToTop(hWndPrev);
}
else
Label1->Caption="NULL";
}
請問我上面的做法有錯嗎?
取出來 Label1->Caption 仍然是 "M",
因為我剛學不久,程式碼大部分都是去看別人的程式碼去拼拼湊湊來的。
還有我使用 GetClassName(hWndPrev, WCaption, 1024);
去取出 hWndPrev 的類別名稱,但似乎不是視窗的類別?
取出來的 Label1->Caption 的字串為 "MSCTFIME UI"。
|
pwipwi
版主 發表:68 回覆:629 積分:349 註冊:2004-04-08 發送簡訊給我 |
我把所有的Code重寫一下,你試試看合不合乎你的需要。
void __fastcall TForm1::Button2Click(TObject *Sender) { char WCaption[256]; HWND hWnd = Application->Handle; do{ if(!(hWnd=GetWindow(hWnd, GW_HWNDNEXT))) break; memset(WCaption, '\0', 256); SendMessage(hWnd, WM_GETTEXT, 255, (int)WCaption); } while(!(GetWindowLong(hWnd,GWL_STYLE) & WS_BORDER) || !IsWindowVisible(hWnd) || !WCaption[0]); Label1->Caption = WCaption; ShowWindow(hWnd, SW_SHOW); BringWindowToTop(hWnd); }M這個視窗好像和輸入法有關係… |
solitarygo
一般會員 發表:4 回覆:12 積分:3 註冊:2004-07-30 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |