2015-05-21 78 views
0

我花了很多天將文本值發送到C#中其他應用程序的聚焦文本框。必須發送文本以聚焦其他應用程序的文本框

我的代碼:

IntPtr txtLot = FindWindowEx(orderdialog, new IntPtr(0), "Edit", null); 

SendMessage(txtLot, WM_SETTEXT, 0, lot.ToString()); 

我想我的兩個選擇的任何一種解決方案。

選擇1: 我在spy ++中發現了三個編輯控件。在上面的代碼中,我只有第一個編輯控件。但我需要獲得第二編輯控件值的IntPtr發送一些字符串。

選擇2: 我們可以使用tab鍵來聚焦第二個編輯控件。在那裏,第二個控件是重點,但我無法發送字符串。因爲我不知道集中控制文本框的IntPtr。如何獲得集中控制的IntPtr。

請告訴我哪個選擇適合。

請幫幫我。

回答

0

可以使用第二個參數FindWindowEx方法遍歷所有控件。

按照MSDN:

hwndChildAfter [中,可選]

類型:HWND

的句柄,子窗口。

搜索從Z順序的下一個子窗口開始。兒童 窗口必須是hwndParent的直接子窗口,而不僅僅是 後代窗口。如果hwndChildAfter爲NULL,則搜索從hwndParent的第一個子窗口 開始。

所以,你可以使用簡單的循環:

IntPtr fromHandle = IntPtr.Zero; 
while (true) 
{ 
    IntPtr txtLot = FindWindowEx(orderdialog, fromHandle, "Edit", null); 
    if (txtLot == IntPtr.Zero) break; // not found 
    if (/*check if control satisfy some conditions*/) { 
     SendMessage(txtLot, WM_SETTEXT, 0, lot.ToString()); 
    } 
    fromHandle = txtLot; 
} 
+0

感謝您的答覆。但上面的代碼與我的代碼相同。 「orderdialog」有3個編輯控件,如果我們使用這個「FindWindowEx(orderdialog,fromHandle,」Edit「,null);」,它將只獲得第一個編輯控件。我想要第二個編輯控件。 **對於Ex **:txtlot是第一個編輯控件,txtprice是第二個編輯控件。我想要的是txtprice 2nd編輯控件。 – Praveen

+0

不,這是不一樣的。它將遍歷所有的文本框。我特別提到了第二個參數。我們在循環中更改'fromHandle'(設置爲當前找到的控件),所以下一個'FindWindowEx'調用將查找下一個文本框。這是我舊項目稍作修改的工作示例。 – kreig

+0

我會嘗試..任何選擇的可能性2.如何獲得集中的文本框控件的IntPtr。 – Praveen

相關問題