感谢提示.所以我应该使用P / Invoke.这是完整的代码:
using System; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServices; namespace CuckooCoach { class Monitor { [DllImport("user32.dll")] private static extern IntPtr GetForegroundWindow(); [DllImport("user32.dll")] static extern int GetWindowTextLength(IntPtr hWnd); // int GetWindowText( // __in HWND hWnd,// __out LPTSTR lpString,// __in int nMaxCount // ); [DllImport("user32.dll")] private static extern int GetWindowText(IntPtr hWnd,StringBuilder lpString,int nMaxCount); // DWORD GetWindowThreadProcessId( // __in HWND hWnd,// __out LPDWORD lpdwProcessId // ); [DllImport("user32.dll")] private static extern uint GetWindowThreadProcessId(IntPtr hWnd,out uint lpdwProcessId); //HANDLE WINAPI OpenProcess( // __in DWORD dwDesiredAccess,// __in BOOL bInheritHandle,// __in DWORD dwProcessId //); [DllImport("kernel32.dll")] private static extern IntPtr OpenProcess(uint dwDesiredAccess,bool bInheritHandle,uint dwProcessId); [DllImport("kernel32.dll")] private static extern bool CloseHandle(IntPtr handle); // DWORD WINAPI GetModuleBaseName( // __in HANDLE hProcess,// __in_opt HMODULE hModule,// __out LPTSTR lpBaseName,// __in DWORD nSize // ); [DllImport("psapi.dll")] private static extern uint GetModuleBaseName(IntPtr hWnd,IntPtr hModule,StringBuilder lpFileName,int nSize); // DWORD WINAPI GetModuleFileNameEx( // __in HANDLE hProcess,// __out LPTSTR lpFilename,// __in DWORD nSize // ); [DllImport("psapi.dll")] private static extern uint GetModuleFileNameEx(IntPtr hWnd,int nSize); public static string GetTopWindowText() { IntPtr hWnd = GetForegroundWindow(); int length = GetWindowTextLength(hWnd); StringBuilder text = new StringBuilder(length + 1); GetWindowText(hWnd,text,text.Capacity); return text.ToString(); } public static string GetTopWindowName() { IntPtr hWnd = GetForegroundWindow(); uint lpdwProcessId; GetWindowThreadProcessId(hWnd,out lpdwProcessId); IntPtr hProcess = OpenProcess(0x0410,false,lpdwProcessId); StringBuilder text = new StringBuilder(1000); //GetModuleBaseName(hProcess,IntPtr.Zero,text.Capacity); GetModuleFileNameEx(hProcess,text.Capacity); CloseHandle(hProcess); return text.ToString(); } } }