小编Cha*_*ent的帖子

使用WM_COPYDATA在进程之间发送数据

我希望在进程之间发送文本.我已经找到了很多这方面的例子,但没有一个我可以开始工作.这是我到目前为止:

发送部分:

COPYDATASTRUCT CDS;
CDS.dwData = 1;
CDS.cbData = 8;
CDS.lpData = NULL;
SendMessage(hwnd, WM_COPYDATA , (WPARAM)hwnd, (LPARAM) (LPVOID) &CDS);
Run Code Online (Sandbox Code Playgroud)

接收部分:

case WM_COPYDATA:
COPYDATASTRUCT* cds = (COPYDATASTRUCT*) lParam;
Run Code Online (Sandbox Code Playgroud)

我不知道如何构建COPYDATASTRUCT,我刚刚提出了一些似乎有用的东西.调试时,执行WM_COPYDATA情况,但我不知道如何处理COPYDATASTRUCT.

我想在这两个进程之间发送文本.

你可能会说我刚刚开始,我在Code :: Blocks中使用GNU GCC编译器,我试图避免MFC和依赖.

c++ windows ipc wm-copydata

18
推荐指数
1
解决办法
3万
查看次数

在另一个用户上下文中执行代码

我有一个带有清单的应用程序需要以管理员身份运行,但应用程序的一部分是使用WNetAddConnection2映射驱动器,我相信由于凭据等原因,它需要在普通用户上下文中运行.有没有办法执行此操作普通用户上下文中的一些代码,无需创建单独的进程.

编辑

从我的评论到目前为止,但它不起作用.我预计它不会因为我真的不明白我应该如何使用它.如果我打开一个新问题,也许最好?

class Program
{
    [DllImport("advapi32.DLL")]
    public static extern bool ImpersonateLoggedOnUser(IntPtr hToken);
    [DllImport("advapi32.DLL")]
    public static extern bool RevertToSelf();

    static void Main(string[] args)
    {
        IntPtr phToken = IntPtr.Zero;
        ImpersonateLoggedOnUser(phToken);
        MapDrives();
        RevertToSelf();
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑

如果当前用户具有管理员权限,那么主进程将使用清单提升,在提升的代码中我想在用户非提升空间中运行命令,因为这似乎具有不同的环境变量等.我相信曾经线程启动它不能改变自己,它需要运行一个新的.

.net c# pinvoke winapi uac

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

标签 统计

.net ×1

c# ×1

c++ ×1

ipc ×1

pinvoke ×1

uac ×1

winapi ×1

windows ×1

wm-copydata ×1