能否通过windows消息,在子窗体上的某特定坐标上执行单击操作?解决方案
能否通过windows消息,在子窗体上的某特定坐标上执行单击操作?
如题:
目的是,当鼠标单击父窗体某按钮时,执行单击子窗体工具条中一“打开”按钮的操作,或执行菜单中“文件”的下拉菜单中“打开”操作。
由于菜单项和工具条按钮都没有句柄,所以:
1:我想通过用坐标定位“工具条中“打开”按钮的坐标”,然后单击的方式,执行此操作。
2:先获得菜单上“文件”的句柄,让子窗体获得焦点,然后用windows消息,执行单击操作,然后再发送键盘消息。
以上第一种想法根本我就不会。第二种我能获取“文件”的句柄,但是不能对“文件”执行单击操作。
还听 网友说,要先获取 菜单项的ID ,然后发WW_COMMAND消息,这个俺也不会...
希望有各位能帮我一把 谢谢了
------解决方案--------------------
把“子窗体工具条中一“打开”按钮的操作”写成公共函数,单击父窗体按钮时调用该函数即可。
菜单也可以这样操作
------解决方案--------------------
------解决方案--------------------
看看这个范例程序,里面有类似的操作过程
VB源码:外壳程序范例
http://download.****.net/source/2117506
------解决方案--------------------
楼主描述问题不够清晰。
下面的例子是单击 Windows画图工具(msPaint.exe) 文件->另存为 按钮的示例代码。
如题:
目的是,当鼠标单击父窗体某按钮时,执行单击子窗体工具条中一“打开”按钮的操作,或执行菜单中“文件”的下拉菜单中“打开”操作。
由于菜单项和工具条按钮都没有句柄,所以:
1:我想通过用坐标定位“工具条中“打开”按钮的坐标”,然后单击的方式,执行此操作。
2:先获得菜单上“文件”的句柄,让子窗体获得焦点,然后用windows消息,执行单击操作,然后再发送键盘消息。
以上第一种想法根本我就不会。第二种我能获取“文件”的句柄,但是不能对“文件”执行单击操作。
还听 网友说,要先获取 菜单项的ID ,然后发WW_COMMAND消息,这个俺也不会...
希望有各位能帮我一把 谢谢了
------解决方案--------------------
把“子窗体工具条中一“打开”按钮的操作”写成公共函数,单击父窗体按钮时调用该函数即可。
菜单也可以这样操作
------解决方案--------------------
------解决方案--------------------
看看这个范例程序,里面有类似的操作过程
VB源码:外壳程序范例
http://download.****.net/source/2117506
------解决方案--------------------
楼主描述问题不够清晰。
下面的例子是单击 Windows画图工具(msPaint.exe) 文件->另存为 按钮的示例代码。
- VB code
Sub MakeThis(gPathFileName As String) Dim ret As Long Dim pHwnd As Long, lpString As String, TextLength As Long ret = ShellExecute(Me.hwnd, "open", "msPaint.exe", """" & gPathFileName & """", vbNullString, SW_NORMAL) If ret <> 0 Then Do DoEvents pHwnd = FindWindow("MSPaintApp", Mid(gPathFileName, InStrRev(gPathFileName, "\") + 1) & " - 画图") 'pHwnd = FindWindow("MSPaintApp", vbNullString) Loop Until pHwnd <> 0 If pHwnd > 0 Then TextLength = GetWindowTextLength(pHwnd) lpString = Space(TextLength) Call GetWindowText(pHwnd, lpString, TextLength + 1) 'Debug.Print lpString Dim hMenu As Long, hSubMenu As Long, hMenuItem As Long Dim mString As String, mStrLen As Long hMenu = GetMenu(pHwnd) If hMenu > 0 Then hSubMenu = GetSubMenu(hMenu, 0) hMenuItem = GetMenuItemID(hSubMenu, 3) mStrLen = GetMenuString(hSubMenu, hMenuItem, mString, 0, MF_BYCOMMAND) mString = Space(mStrLen) GetMenuString hSubMenu, hMenuItem, mString, mStrLen + 1, MF_BYCOMMAND 'Debug.Print mString PostMessage pHwnd, WM_COMMAND, hMenuItem, 0 End If End If End If End Sub