情况是:外部程序有一个目录选择对话框,我想在后台通过sendmessage选择指定的目录,已经在SPY++中找到“浏览文件夹"的句柄”,在接下去就找不到其它窗口了,只找到一个“SHBrowseForFolder ShellNameSpace Control”窗口,例如我想选择:"
e:\\vc"这样的路径,只找到“浏览文件夹“句柄,接下去就不知道怎么办了?另外,想知道WM_COPYDATA能不能发送消息给另外一个进程中的static edit框?WM_SETTEXT可以发送,但只是表面上改变了static edit框的内容,实际上是没有改变的,用WM_COPYDATA消息写入COPYDATASTRUCT结构到外部进程的内存中可行不?
下面是发送WM_COPYDATA的代码,麻烦各位帮帮忙,主要看看第一个问题谢谢!
BOOL SetOutPut(HWND Lv,CString str)
{
bool result = false;
DWORD processId = NULL;
GetWindowThreadProcessId(Lv, &processId);
if (processId == NULL) return false;
HANDLE process = ::OpenProcess(PROCESS_VM_OPERATION|PROCESS_VM_WRITE,FALSE,processId);
if (process == NULL) return false;
PVOID buffer = VirtualAllocEx(process,NULL,sizeof(COPYDATASTRUCT),MEM_COMMIT,PAGE_READWRITE);
if(buffer != NULL)
{
COPYDATASTRUCT CopyData;
CopyData.cbData = sizeof(str);
CopyData.dwData = 0;
CopyData.lpData = str.GetBuffer(CopyData.cbData);
WriteProcessMemory(process, buffer, &CopyData, sizeof(COPYDATASTRUCT),NULL);
if (::SendMessage(Lv, WM_COPYDATA, 0, (LPARAM)buffer) != 0) result = true;
VirtualFreeEx(process,buffer,sizeof(CopyData),MEM_DECOMMIT);
}
CloseHandle(process);
return result;
}
return true;
}

解决方案 »

  1.   

    关于跨进程传递数据的示例, 这里有多篇文章介绍过, 请阅读http://www.vckbase.com/document/viewdoc/?id=1512
    http://www.vckbase.com/document/viewdoc/?id=1556
    http://www.vckbase.com/document/viewdoc/?id=1712
      

  2.   

    主要是对“目录选择对话框”的控制弄不了,SHBrowseForFolder ShellNameSpace Control这个是什么东西?laiyiling兄的网址我看过了,向listview控件传数据问题cnzdgs兄已经帮我解决了!还是谢谢你
      

  3.   

    “浏览文件夹”下面有一个树控件和两个按钮,SPY++可以查到,程序中可以用FindWindowEx来找。
    要实现控制树控件是很费劲的,需要循环发TVM_GETNEXTITEM、TVM_GETITEM和TVM_EXPAND消息,逐层查找目标,最终找到后发TVM_SELECTITEM选中目标,再发BN_CLICKED命令消息。
    WM_COPYDATA是进程间利用消息传递数据用的,没有其它作用。static edit是什么意思?是static还是edit?为什么说WM_SETTEXT只改了表面而实际上没有改?
      

  4.   

    原来laiyiling给的第三个网址就是解决这个的,没看清楚不好意思方法就如cnzdgs说的一样。static edit就是static(VB中的label)控件。这个外部程序的static其实是通过"目录浏览对话框"
    获得的路径,我直接用WM_SETTEXT改变它,当实际运行时用的还是之前的路径,这个问题应该是外部程
    序的设计跟我想的不一样。在网上看到WM_COPYDATA可以实现改变外部程序static控件的效果,所以问问,如果不行就慢慢控制树
    控件算了谢谢两位啊!