2012-04-02 266 views
0

我想獲取子窗口的句柄,但是不能。 我想在Edit控件中自動插入文字。 以下是我有:在C++中獲取子窗口的句柄

//global var 

int id=0; 

BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam) { 
    id = GetDlgCtrlID(hwnd); 
    HWND hwnd_Child; 
    hwnd_Child = GetDlgItem(hwnd, id); 
    SendMessage(hwnd_Child, WM_SETTEXT, NULL, (LPARAM)"mYtexttttt"); 
    /* other code */ 
    // id is always 0, why ? 
    // return FALSE; // stop enumerating 
    return TRUE; // continue enumeration 
} 

void MyFunction() 
{ 
    HWND hwnd_Parent; 

    hwnd_Parent = FindWindow(NULL,"MyTitle"); if(! hwnd)return; 

    EnumChildWindows(hWnd ,(WNDENUMPROC)EnumWindowsProc, NULL); 
} 

在WinSpy ++,所有組件的控制ID是000000000是否有可能控制ID沒有被定義?

如果我有主窗口的句柄,並且未定義控件ID,如何查找某個特定(編輯框)組件的子句柄?

另外,主窗口是一個運行DirectX的遊戲應用程序,我想。 我想在Edit控件中自動插入文本。

+0

有時ID沒有被定義,但是你的代碼無論如何看起來都是錯誤的。你如何識別孩子窗口?你打算怎麼說你想要哪一個? – 2012-04-02 18:52:37

+0

首先我正在測試,我嘗試將SendMessage發送給EnumChildWindows發現的所有處理程序....但這不起作用,我想自動在Edit控件中插入文本 – Jigberto 2012-04-02 19:46:41

回答

2

如果WinSpy告訴你控件ID是0,那麼從GetDlgCtrlID()返回0是當然的預期結果。你必須做一些其他的事情,比如倒數EnumWindowsProc()調用和/或調用GetClassName(),這樣你才能看到它是一個編輯控件。或者GetWindowRect()按位置走。

+0

好的...我做了你所說的,我使用GetClassName()並且所有組件都具有「編輯」類名稱,並且回調函數sendmessage發送到所有SendMessage(hwnd,WM_SETTEXT,NULL,(LPARAM)「mYtexttttt」); – Jigberto 2012-04-02 19:03:05

1

控制ID是識別子窗口的一種方便方法;但不是唯一的方法。所以控制ID很可能會被設置爲任意(或零)值(在這種情況下,父窗口直接通過它們的手柄來引用它們)。

從您的觀點來看,如果沒有控制ID,您必須通過在標籤序列中的位置應該是恆定的,並且可以通過

+0

在回調函數中,我向所有編輯組件發送消息,代碼如下:SendMessage(hwnd,WM_SETTEXT,NULL,(LPARAM)「mYtexttttt」); 但這不行,爲什麼? – Jigberto 2012-04-02 19:06:03

+0

在回調函數中,我發送消息給所有編輯組件,代碼如下:SendMessage(hwnd,WM_SETTEXT,NULL,(LPARAM)「mYtexttttt」);但這不行,爲什麼? – Jigberto 2012-04-02 19:15:35

+0

不確定你是否可以從外部進程/線程執行此操作 - 對我來說看起來像是一個嚴重的安全風險。 – Elemental 2012-04-03 08:36:17

2

進行迭代,在你的回調方法引用它們,請執行以下操作:

// get the window text 
GetWindowText(hWnd, (LPTSTR)windowText, MAX_PATH); 

// get the window info 
WINDOWINFO objWinInfo; 
GetWindowInfo(hWnd, &objWinInfo) 

以上應該可以幫助您的子窗口。

你也可以做FindWindowEx來得到孩子的窗戶。

+0

請閱讀我的文章,我更新了.....我只想找到Edit控件的句柄並自動在文本框中插入文字......但我無法做到這一點 – Jigberto 2012-04-02 19:50:53