我們有一個C#2012 WCF服務,它與VB6中構建的桌面應用程序進行交互的次數不少,並且在使用Windows API調用進行下拉選擇時遇到問題。Windows API調用CB_SELECTSTRING
實際上,當應用程序在其中工作時,應用程序的工作方式是首先在下拉框中選擇一個條目。然後在下面的文本框中輸入信息。您在下拉框中選擇另一個條目,將這些字段重置爲空白文本框。下游應用程序中的代碼將文本框信息與下拉列表中的選擇相關聯。這就是特定的應用程序的作品。
我們的問題是自動執行此過程。我們使用的Win32 API調用在下降到設定信息下使用下列內容:
[DllImport("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, int uMsg, [Out] int wParam, string lParam);
// Actual call to the downstream app.
SendMessage(hWnd, (int)CB_SELECTSTRING, 0, strValue);
的問題是,當我們嘗試設置在下拉框中的第二個值。文本框未被重置。我們也嘗試過使用以下調用:
SendMessage(hWnd, (int)CB_SELECTSTRING, -1, strValue);
SendMessage(hWnd, (int)CB_SETCURSEL, 0, strValue);
SendMessage(hWnd, (int)CB_SETCURSEL, -1, strValue);
這些消息都沒有完成任務。我們需要調用來模擬Selected Index Changed事件。我們在這裏沒有使用正確的作品嗎?或者我們是否需要向父母發送消息來解除該事件?
我翻遍了我們的解決方案,沒有找到CBN_SELCHANGE任何地方或任何API調用,將它發送給父母。
這裏的任何想法的人?
可能不相關,但你的sendmessage的聲明看起來很腥http://pinvoke.net/default.aspx/user32/SendMessage.html – dkackman
看看在vb6應用程序中檢索組合框的hwnd的代碼是有幫助的 – dkackman
這些消息不能按原樣工作,所傳遞的字符串指針僅在您的進程中有效,而不是在vb6進程中有效。要使字符串指針有效,需要很多很多的代碼。不要去那裏,而是使用UI自動化庫。 –