2012-04-02 264 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