相关疑难解决方法(0)

C#(.NET 2.0)中Windows的进程间通信

我以前从未在Windows上做过IPC.目前我正在开发一对程序,一个标准的GUI/CLI应用程序和一个Windows服务.该应用程序必须告诉服务该做什么.因此,假设通信只是本地通信,那么这两个进程的最佳通信方法是什么?

最好的地方被定义为更健壮,更不容易出错,不是最高性能也不是最容易编码.

代码示例将非常受欢迎,但不是必需的:-)

注意我只是询问使用什么,标准TCP套接字,命名管道或其他一些通信方式.

谢谢!

.net c# ipc

52
推荐指数
2
解决办法
5万
查看次数

WaitForInputIdle不能以编程方式启动mspaint

我正在尝试打开"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)

c++ winapi mfc atl

2
推荐指数
1
解决办法
1143
查看次数

标签 统计

.net ×1

atl ×1

c# ×1

c++ ×1

ipc ×1

mfc ×1

winapi ×1