我是个刚学完Android,老板要把一个C#项目转成java的新人,有些操作不能用java完成,目前正在编写C++代码,遇到一个问题,需要做一个钩子,当有新进程启动时候我需要获取到这个进程的名字做一些操作,现有C#代码如下:
public class GlobalHook
{
//ManagementEventWatcher watch_del = null;
//[DllImport("user32.dll")]
//private static extern bool
//SetForegroundWindow(IntPtr hWnd);
//[DllImport("user32.dll")]
//private static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);
//[DllImport("user32.dll")]
//private static extern bool IsIconic(IntPtr hWnd);
//// 消息函数
//[DllImport("user32.dll", EntryPoint = "PostMessageA")]
//public static extern bool PostMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
//[DllImport("user32.dll")]
//public static extern IntPtr FindWindow(string strclassName, string strWindowName);
//[DllImportAttribute("user32.dll")]
//public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
//public const int WM_SYSCOMMAND = 0x0112;
//public const int SC_MAXIMIZE = 0xF030;
public static ManagementEventWatcher watch_crt = null;
protected tray m_tray;
public GlobalHook(tray mm_tray)
{
this.m_tray = mm_tray;
StartWatchCreateProcess();
}
~GlobalHook()
{
if (watch_crt != null)
watch_crt.Stop();
}
protected void StartWatchCreateProcess()
{
WqlEventQuery query = new WqlEventQuery("__InstanceCreationEvent",
new TimeSpan(0, 0, 1),
"TargetInstance isa \"Win32_Process\"");
watch_crt = new ManagementEventWatcher(query);
watch_crt.EventArrived += new EventArrivedEventHandler(HandleProcessCreateEvent);
watch_crt.Start();
}
//监视进程启动
protected void HandleProcessCreateEvent(object sender, EventArrivedEventArgs e)
{
ManagementBaseObject MBO = (ManagementBaseObject)e.NewEvent["TargetInstance"];
string temp = MBO["Name"].ToString();
if (temp != "")
{
string name = temp;
if (name.Contains("."))
name = temp.Substring(0, temp.IndexOf("."));
this.m_tray.CheckSingleProcessItemHook(name);
}
}
}
C++该怎样写?