我以前从未在Windows上做过IPC.目前我正在开发一对程序,一个标准的GUI/CLI应用程序和一个Windows服务.该应用程序必须告诉服务该做什么.因此,假设通信只是本地通信,那么这两个进程的最佳通信方法是什么?
最好的地方被定义为更健壮,更不容易出错,不是最高性能也不是最容易编码.
代码示例将非常受欢迎,但不是必需的:-)
注意我只是询问使用什么,标准TCP套接字,命名管道或其他一些通信方式.
谢谢!
我正在尝试打开"mspaint"并在初始化之后立即找到它的句柄.但FindWindow回报NULL,如果我打电话WaitForInputIdle.如果我尝试使用Sleep(1000)它的功能.但我不认为这是等待程序准备就绪的正确方法.这个代码有解决方案吗?
CString strWindowDirectory;
GetSystemDirectory(strWindowDirectory.GetBuffer(MAX_PATH), MAX_PATH);
SHELLEXECUTEINFO sei = { 0 };
sei.cbSize = sizeof(SHELLEXECUTEINFO);
sei.fMask = SEE_MASK_NOCLOSEPROCESS;
sei.lpVerb = L"open";
sei.lpFile = L"mspaint";
sei.lpDirectory = strWindowDirectory;
sei.nShow = SW_SHOWNORMAL;
HWND hPaint = NULL;
if(ShellExecuteEx(&sei))
{
int r = ::WaitForInputIdle(sei.hProcess, INFINITE);
ATLTRACE(L"WaitForInputIdle %d\n", r);
if (sei.hProcess == NULL) return;
hPaint = ::FindWindow(L"MSPaintApp", NULL);
ATLTRACE(L"Handle %d\n", hPaint);
if (!hPaint) return;
}
else
{
MessageBox(L"Couldn't find mspaint program");
return;
}
Run Code Online (Sandbox Code Playgroud)