我有一个后台跑的windows服务,以前我用控制台程序来启动调试,通过获取窗体句柄,向窗体应用程序PostMessage,已经实现,但是现在如果我不用控制台程序启动,而是使用标准的windows服务,窗体应用程序则没有输出,难道windows服务不能跟窗体应用程序通信?
关键代码如下
这里通过arg参数动态实现是以windows服务方式启动,还是以控制台方式启动服务
下面是查找窗体的代码,通过控制台方式已经测试通过
private IntPtr ip = IntPtr.Zero; const int WM_COPYDATA = 0x004A; int WINDOW_HANDLER = 0; /// <summary> ///查找窗体 /// </summary> /// <param name="lpClassName"></param> /// <param name="lpWindowName"></param> /// <returns></returns> [DllImport("User32.dll", EntryPoint = "FindWindow")] private static extern int FindWindow(string lpClassName, string lpWindowName); /// <summary> /// 消息 /// </summary> public struct COPYDATASTRUCT { public IntPtr dwData; public int cbData; [MarshalAs(UnmanagedType.LPStr)] public string lpData; }