【转】[C#.NET][VB.NET] 用 Win32 API 控制 外部應用程式選單
来源:互联网 发布:机械工业信息及网络 编辑:程序博客网 时间:2024/05/17 23:11
1.這並不是用SendKey所組成的,所以不管應用程式是否在最上層,都能控制的到。
2.匯入 System.Runtime.InteropServices 及 System.Threading 命名空間
3.選單控制主要由下列三隻API組成
[DllImp
public static extern int GetMenu(
int hwnd
);
[DllImp
public static extern int GetSubMenu(
int hMenu,
int nPos
);
[DllImp
public static extern int GetMenuItemID(
int hMenu,
int nPos
);
4.GetMenu所指的就是"主選單"工具列,如下圖所示。
而GetSubMenu指的就是"主選單"內的"子選單",由下圖可看到項目有五個"子選單",分別為:檔案(F)、編輯(E)、格式(O)、檢視(V)、說明(H)。
GetMenuItemID則是"子選單"中的"項目"
5.選單API的啟始值是0,GetSubMenu(gm, 0)表示第1個選單
GetSubMenu(gm, 1)表示第2個選單
6.GetMenuItemID用法同如上所示 ,int id = GetMenuItemID(gm, 3),表示第4個項目。
7.完整範例
C#
using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Diagnostics;
using System.Threading;
namespace CS_ControlMenu
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private const int WM_COMMAND = 0x111;
[DllImp
public static extern int FindWindow(
string lpClassName,
string lpWindowName
);
[DllImp
public static extern int GetMenu(
int hwnd
);
[DllImp
public static extern int GetSubMenu(
int hMenu,
int nPos
);
[DllImp
public static extern int GetMenuItemID(
int hMenu,
int nPos
);
[DllImp
public static extern int PostMessage(
int hwnd,
int wMsg,
int wParam,
int lParam
);
private void button1_Click(object sender, EventArgs e)
{
//呼叫外部程式
Process.Start(@"C:\windows\system32\notepad.exe");
//等執行程式一下下
Thread.Sleep(100);
//取得外部程式的Handle
int NotepadHwnd = FindWindow("notepad", null);
//取得外部程式的選單Handle
int gm = GetMenu(NotepadHwnd);
//取得第一個子選單Handle
gm = GetSubMenu(gm, 0); //選單的句柄 改變後面的0,就可以得到不同選單的句柄
//取得子選單的ID
int id = GetMenuItemID(gm, 3); //子選單"另存新檔"的ID
//執行子選單
PostMessage (NotepadHwnd, WM_COMMAND, id, 0);
}
}
}
转载地址:http://www.dotblogs.com.tw/yc421206/archive/2009/07/06/9142.aspx
- 【转】[C#.NET][VB.NET] 用 Win32 API 控制 外部應用程式選單
- [C#.NET][VB.NET] 程式執行時拖曳控制項
- [C#.NET][VB.NET] Process 類別 / 如何 列舉執行中的程式
- .NET用 SendKyes 结合 Process 或 API FindWindow、SendMessage(PostMessage) 等控制外部程序[转]
- vb.net c#.net API 查询工具
- VB.NET 获取程式路径
- 建立ASP.NET Ajax應用程式
- VB.NET 使用WIN32 API函数,VB.NET使用Windows API函数
- VB.Net程序设计:用队列控制多线程。
- 用API函数控制光驱的开关(VB6/VB.net 示例)
- Win32 API .net Class
- .NET 调用 Win32 API
- 感温报警程式源码(vb.net)
- 程式执行——vb.net
- VS2005中水晶報表在C#.NET WEB應用程式中與ADO.NET的結合
- ListView 控制 VB.net
- vb.net 鼠标控制
- Vb.net声明API
- 【转】C#启动外部应用程序
- 页面技巧 加载与内容的变化
- 【转】C#启动另一应用程序
- 页面的公用变量
- C# 调用外部程序
- 【转】[C#.NET][VB.NET] 用 Win32 API 控制 外部應用程式選單
- Excel Vba集锦一
- web-inf目录结构
- DateTime类型在后台怎么判断是否为空
- 深度学习——白化
- 【转】C#.NET使用AnimateWindow制作淡入淡出特殊效果的窗体
- dblink
- 【转】C#检测目标机器上是否安装Microsoft .NETFramework平台
- synchronized和lock的实现原理