日期:2014-05-18  浏览次数:20398 次

使用xp_cmdshell调用win32控制台程序,程序中能否使用Postmessage()
我在SQL SERVER 2005上使用命令:exec master..xp_cmdshell 'C:\Notify.exe',但执行中SQL SERVER发出WIN32异常的通知。Notify.exe是一个用VC写的win32控制台程序,在人工调用执行正常,里面使用到Postmessage函数,主要代码如下:

void main(int argc,char * argv[])
{
  CWnd *pWnd = CWnd::FindWindow(NULL, "目标程序"); 
  pWnd->PostMessage(WM_IDMSG, 0, 0); //传输消息至目标程序,WM_IDMSG是自己定义的消息
  return;
}

我将Postmessage那句删除就没有出现上述问题,请问各位知道是什么原因或者有没其他方法代替。这个东西很急,麻烦大家帮忙了。谢谢啦~~~

------解决方案--------------------
在PostMessage前,应先判断pWnd是否有效(是否已取得目标窗体)
------解决方案--------------------
楼主可以看一下这个贴子。

http://topic.csdn.net/t/20060726/04/4904795.html

服务类程序及xp_cmdshell产生的进程都与桌面应用程序不在同一桌面,所以是无法获得窗口句柄的。

还是建议你试一下取进程,而不是取窗口。可以试下枚举进程。