首页
学习
活动
专区
圈层
工具
发布

WPF 同一窗口内的多线程多进程 UI(使用 SetParent 嵌入另一个窗口)

WPF 同一窗口内的多线程/多进程 UI(使用 SetParent 嵌入另一个窗口) 发布于 2018-07-11 13:35...阅读本文将收获一份 Win32 函数 SetParent 及相关函数的使用方法。...后者使用的是 Win32 的方式,实际效果非常类似 WindowsFormsHost,新线程中的 UI 在原来的所有 WPF 控件上面遮挡。另外,后者不止可以是跨线程,还可以跨进程。...准备必要的 Win32 函数 完成基本功能所需的 Win32 函数是非常少的,只有 SetParent 和 MoveWindow。...呃……就是 Windows 自诞生以来的那种传统。在传统的 Win32 应用程序中,每一个控件都有自己的窗口句柄,它们之间通过 SetParent 进行连接;可以说一个 Button 就是一个窗口。

4.8K10

使用 SetParent 跨进程设置父子窗口时的一些问题(小心卡死)

在微软的官方文档中,说 SetParent 可以在进程内设置,也可以跨进程设置。当使用跨进程设置窗口的父子关系时,你需要注意本文提到的一些问题,避免踩坑。...如果我没记错的话,SetParent 的文档曾经包含一个严厉的警告表明它不受支持,但现在这段备注似乎已经不存在了。我就遇到过一个客户跨进程设置窗口之间的父子关系,然后他们的应用程序间歇性不稳定。...也就是说,如果你有 A、B、C、D 四个窗口,分属不同进程,A 是 B、C、D 窗口的父窗口,那么当 A 在处理消息的时候,B、C、D 的消息循环就会卡在 GetMessage 的调用。...如何解决 对于 SetParent 造成的这些问题,实际上没有官方的解决方案,你需要针对你不同的业务采用不同的解决办法。...,需要跨越进程到顶层窗口来操作; ---- 参考资料 windows - Good or evil - SetParent() win32 API between different processes

2.2K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    vb api函数用法_VB调用apdl

    1、API函数 API的英文全称(Application Programming Interface),WIN32 API也就是MicrosoftWindows32位平台的应用程序编程接口,在window...它们把常用的API函数的组合在一起成为一个控件或类库,并赋予其方便的使用方法,所以极大的加速了WINDOWS应用程序开发的过程。...对此,你只要记住任何API函数声明都必须写这个语句就可以了。 Iib: 指明包含所声明过程或函数的动态链接库或代码资源。也就是说,它说明的是,函数或过程从何而来的问题。...当然,也可以是不同的。...byval的作用:这跟VB的参数传递方式有关,在默认情况下VB是通过地址传递方式传递函数的参数、而有些API函数要求必须采用传值方式来传递函数参数(这两种参数传递方式是不同的,前者传递的是一个指针,而后者要求是参数真实的值

    2.6K30

    使用 SetParent 制作父子窗口的时候,如何设置子窗口的窗口样式以避免抢走父窗口的焦点

    制作传统 Win32 程序以及 Windows Forms 程序的时候,一个用户看起来独立的窗口本就是通过各种父子窗口嵌套完成的,有大量窗口句柄,窗口之间形成父子关系。...不过,对于 WPF 程序来说,一个独立的窗口实际上只有一个窗口句柄,窗口内的所有内容都是 WPF 绘制的。...如果你不熟悉 Win32 窗口中的父子窗口关系和窗口样式,那么很有可能遇到父子窗口之间“抢夺焦点”的问题,本文介绍如何解决这样的问题。...---- “抢夺焦点” 下图中的上下两个部分是两个不同的窗口,他们之间通过 SetParent 建立了父子关系。...注意看下面的窗口标题栏,当我在这些不同区域间点击的时候,窗口标题栏在黑色和灰色之间切换: 这说明当子窗口获得焦点的时候,父窗口会失去焦点并显示失去焦点的样式。

    1.6K60

    关于WPF空域的问题

    空域概念意味着,在应用程序生命周期内,所有试图在该像素之上进行渲染的图层或其他窗口都必须属于同一互操作技术。...试图在Win32上呈现WPF像素会导致不希望的结果,并且通过互操作API尽可能不被允许(这段话是抄的啦)这里有介绍,简单的来说就是不同的渲染技术导致了空域的产生,最常见现象,wpf 上放一个winform...但是至少给我很大启发,仔细研究demo以及查阅资料,想到有没有一种办法,我把wpf window 作为一个usercontrol嵌入到wpf中,查阅官方文档发现一个HwndHost 类,查阅官方文档这个类描述为将 Win32...IntPtr hWnd, int nIndex, int dwNewLong);         [DllImport("user32.dll")]         static extern IntPtr SetParent...            {                 SetWindowLong(this.ChildHandle, GWL_STYLE, WS_CHILD);                 SetParent

    2.1K60

    window32api_win32api与硬件设备

    Win32API 相关文章如下: Win32利用CreateEvent 实现简单的 —— 线程同步 Win32消息处理机制与窗口制作 Win32远程线程注入 .dll 文件 Win32删除目录下的所有文件....dll、ntdll.dll 四种方式实现 —— 枚举进程 (一)Win32进程通信 —— 自定义消息实现 (二)Win32进程通信 —— 内存映射文件 (三)Win32进程通信 —— 数据复制消息...(四)Win32进程通信 —— 剪贴板的使用 (五)Win32进程通信 —— 匿名管道 (六)Win32进程通信 —— 邮槽的使用 ---- 常用的 Api汇总如下所示: 线程与进程 ZeroMmory...,molloc new 在分配好的内存上 再分配 假分配 Heap Memory HeapCreate // 预定内存,返回一个句柄 HeapAlloc // 分配内存 HeapFree...GetDriveType // 获取驱动器的类型 GetVolumeInformation // 获取驱动器的信息 二、目录相关 API CreateDirectory // 创建目录

    1K10

    进程注入1:通过LoadLibrary注入DLL

    请注意,具有相同基本文件名和扩展名但在不同目录中找到的两个DLL不被视为相同的DLL。 系统在名为LoadLibrary或LoadLibraryEx的线程的上下文中调用入口点函数。...所述的GetModuleHandle仅当DLL模块被加载时联或由先前调用已经映射到进程的地址空间中函数成功的LoadLibrary或LoadLibraryEx。...与LoadLibrary或LoadLibraryEx不同,GetModuleHandle不会增加模块引用计数。...构造注入程序 LoadLibrary是Windows API中的一个函数,它可以将一个DLL加载到调用进程和调用的内存中DLLMain(将指定的模块加载到调用进程的地址空间中) 使用语法 C ++ HMODULE.../api/libloaderapi/nf-libloaderapi-getprocaddress // https://docs.microsoft.com/en-us/windows/win32/api

    3K30

    由一道面试题来了解进程间的通信

    因此,进程不必使用文件I/O操作,只需简单的指针操作就可读取和修改文件的内容。   Win32 API允许多个进程访问同一文件映射对象,各个进程在它自己的地址空间里接收内存的指针。...2  共享内存   Win32 API中共享内存(Shared Memory)实际就是文件映射的一种特殊情况。...不同于匿名管道的是命名管道可以在不相关的进程之间和不同计算机之间使用,服务器建立命名管道时给它指定一个名字,任何进程都可以通过该名字打开管道的另一端,根据给定的权限和服务器进程通信。   ...6  剪贴板   剪贴板(Clipped Board)实质是Win32 API中一组用来传输数据的函数和消息,为Windows应用程序之间进行数据共享提供了一个中介,Windows已建立的剪切(复制)-...粘贴的机制为不同应用程序之间共享不同格式数据提供了一条捷径。

    2.5K70

    百度2014软件开发工程师笔试题详解

    因此,进程不必使用文件I/O操作,只需简单的指针操作就可读取和修改文件的内容。 共享内存:Win32 API中共享内存(SharedMemory)实际就是文件映射的一种特殊情况。...由于共享内存是用文件映射实现的,所以它也有较好的安全性,也只能运行于同一计算机上的进程之间。 匿名管道:管道(Pipe)是一种具有两个端点的通信通道:有一端句柄的进程可以和有另一端句柄的进程通信。...管道可以是单向-一端是只读的,另一端点是只写的;也可以是双向的一管道的两端点既可读也可写。 命名管道:命名管道(Named Pipe)是服务器进程和一个或多个客户进程之间通信的单向或双向管道。...不同于匿名管道的是命名管道可以在不相关的进程之间和不同计算机之间使用,服务器建立命名管道时给它指定一个名字,任何进程都可以通过该名字打开管道的另一端,根据给定的权限和服务器进程通信。...剪贴板:剪贴板(Clipped Board)实质是Win32 API中一组用来传输数据的函数和消息,为Windows应用程序之间进行数据共享提供了一个中介,Windows已建立的剪切(复制)-粘贴的机制为不同应用程序之间共享不同格式数据提供了一条捷径

    1.7K20

    如何绕过IsDebuggerPresent的反调试

    /en-us/windows/win32/api/debugapi/nf-debugapi-isdebuggerpresent 确定调用过程是否正在由用户模式调试器调试。...确定是否正在调试指定的进程。...本来这里可以搜索字符串,但我发现定位有些问题 换一种思路,定位API,以前写win32程序的时候,要想在dialog中输出一段字符串,用SetWindowText,这里可以用这个api定位 bp SetWindowTextW.../windows/win32/api/sysinfoapi/nf-sysinfoapi-gettickcount64 2.获取输入的密码长度,如果长度小于15,或大于25,就赋值flag=false,然后...后记 作为学习反反调试初级,重要的是使用x64 debug和ida pro分析的过程,这个还是很有帮助的。 脑海中又浮现了海哥的话:"没有好的正向基础就不会有好的逆向基础。" ?

    2.9K20

    操作系统概念学习笔记 9 线程

    资源共享:线程默认共享它们所属进程的内存和资源。代码和数据共享的优点是它允许一个应用程序在同一地址空间有多个不同的活动线程。 经济:进程创建所需要的内存和资源的分配比较昂贵。...由于线程能共享它们所属进程的资源,所以创建和切换线程会更为经济。 多处理器体系结构的利用:多线程的优点之一是能充分使用多处理器体系结构。以便每个进程能并行运行在不同的处理器上。...目前使用的三种主要的线程库是: (1)POSIX Pthread (2)Win32 (3)Java Pthread作为POSIX标准扩展,可以提供用户级或内核级的库。...Win32线程库是适用于Windows操作系统的内核级线程库。Java线程API允许线程在java程序中直接创建和管理。...Win32线程:Win32 API必须包括windows.h头文件 线程的创建使用了CreateThread() 将一组线程的属性传递给此函数。

    71720

    操作系统课设详细解答

    大家好,又见面了,我是你们的朋友全栈君。...每一进程都以调用 ExitProcess() 或 TerminateProcess() API 函数终止。通常应用程序的框架负责调用 ExitProcess() 函数。...在程序中加入跟踪语句,或调试运行程序,同时参考 MSDN 中的帮助文件 CreateProcess()的使用方法,理解父子进程如何传递参数。给出程序执行过程的大概描述。...一、题目二 实验二 Linux 进程管理 二、实验目的 通过进程的创建、撤销和运行加深对进程概念和进程并发执行的理解,明确进程和程序之间的区别。...图2-3 实现一个简单的 shell输出结果 四、详细设计 数据结构 一个进程创建多个子进程时,则子进程之间具有兄弟关系,数据结构为链表结构,也运用了一些C++库函数。

    1.3K20

    linux工具类之流量监视

    facilities  accessed  through  the main menu. ipband nethogs 安装nethogs yum -y install nethogs (1)、可以实时查看系统当前进程的流量.../configure;make;make install 使用 直接用nload回车即可,也可以指定网卡,如nload eth1 还可以指定是以K或M来显示流量,如nload -u M显示的流量是以MB...Win32 native or through Cygwin (using the GetIfTable call)....CactiEZ ~]# netstat -s [root@CactiEZ ~]# sar -n DEV 1 [root@CactiEZ ~]# sar -n EDEV 1 2 -n参数很有用,他有6个不同的开关...rxerr/s:每秒钟接收的坏数据包 txerr/s:每秒钟发送的坏数据包 coll/s:每秒冲突数 rxdrop/s:因为缓冲充满,每秒钟丢弃的已接收数据包数 txdrop/s:因为缓冲充满,每秒钟丢弃的已发送数据包数

    1.5K30

    窗口之间Parent和Own关系的区别

    窗口之间Parent和Own关系有本质上区别,平常都简单叫做父子关系,其实是错误的。...Parent关系(Parent-Child)叫做父子关系,比如对话框窗口与对话框内部的控件之间的关系就是Parent关系,其特点: 第一,Child窗口在创建时带有WS_CHILD属性 第二,Child...CreateWindow() API中的参数hWndParent,虽然参数名称带有Parent,其实当dwStyle带有WS_POPUP或WS_OVERLAPPED时是指定Own窗口。...一般,在CreateWindow()时都会指定Parent窗口或Own窗口,但极个别场景下需要修改Parent或Own窗口时,可以使用SetParent() API修改Parent窗口,使用SetWindowLong...如果原窗口是POPUP或OVERLAPPED窗口调用SetParent()API时会建立Parent关系,但出于兼容考虑SetParent()内部还是保留原窗口属性(未修改为WS_CHILD),所以SPY

    1.7K40

    钩子原理及实例:实现键盘钩子截获密码

    大家好,又见面了,我是你们的朋友全栈君。 钩子原理及实例:利用鼠标键盘钩子截获密码 钩子原理 钩子能截获系统并得理发送给其它应用程序的消息,能完成一般程序无法完成的功能。...Windows 消息提供了应用程序与应用程序之间、应用程序与Windows 系统之间进行通讯的手段。应用程序要实现的功能由消息来触发,并靠对消息的响应和处理来完成。...安装、卸载钩子的相关函数 安装钩子: 实现Win32的系统钩子,必须调用SDK中的API函数SetWindowsHookEx来安装这个钩子函数,这个函数的原型是 HHOOK SetWindowsHookEx...(线程载入),DLL_THREAD_DETACH(线程卸载),DLL_PROCESS_DETACH(进程卸载),在DLLMain函数中可以对传递进来的这个参数的值进行判别,并根据不同的参数值对DLL进行必要的初始化或清理工作...大家知道,在Win16环境中,DLL的全局数据对每个载入它的进程来说都是相同的;而在Win32环境中,情况却发生了变化,当进程在载入DLL时,系统自动把DLL地址映射到该进程的私有空间,而且也复制该DLL

    2.5K21

    通过 NT 符号链接重定向杀死 Defender,同时保持其不受打扰

    对这两种路径之间细微差别的完整分析超出了本文的范围,但James Forshaw 已经很好地解释了它。本质上,Win32 路径是更完整的 NT 路径的简化版本,并且严重依赖于 NT 符号链接。...Win32 路径是我们每天都使用的熟悉路径,带有盘符的路径,而 NT 路径使用不同的树结构,Win32 路径映射在该树结构上。...要真正重写这种符号链接,我们需要使用本机 API,因为没有 Win32 API。 代码 我将向您介绍我们项目unDefender中滥用此行为的一些代码片段。...GetSystem.cpp在这里,我们基本上使用API打开winlogon.exe了一个在每个 Windows 会话中不受保护地运行的 SYSTEM 进程。...\TrustedInstaller授予系统或管理员,而不授予系统或管理员。

    1.8K80
    领券