社区
网络编程
帖子详情
窗口句柄能不能跨进程使用!?
xiangshifu99
2003-10-09 02:44:36
窗口句柄能不能跨进程使用!?
有3个进程 A,B,C
在A中取得B进程的一个窗口句柄,现传给C使用,不知道C得到的句柄有没有用?
...全文
676
18
打赏
收藏
窗口句柄能不能跨进程使用!?
窗口句柄能不能跨进程使用!? 有3个进程 A,B,C 在A中取得B进程的一个窗口句柄,现传给C使用,不知道C得到的句柄有没有用?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
18 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
蒋晟
2003-10-12
打赏
举报
回复
同一个桌面上窗口句柄的可以跨进程使用
Command what is yours
Conquer what is not
sevencat
2003-10-12
打赏
举报
回复
GDI句柄可能就不行了。
贴一个枚举GDI句柄的代码。
一般来说GDI对象比较多一点。这个代码就是将所有的GDI对象解码出来。(有的可能没有,但我不知道问题出在什么地方)
是参考的那本windows图形编程里面的。
//gditable.h
#pragma once
#include "resource.h"
typedef unsigned (CALLBACK *proc0)(void);
struct GdiTableCell
{
void *pKernel;
//指向核心内存的指针,你是看不到的,
unsigned short nProcess;
//进程ID,你可以三个键一起按能看到。
unsigned short nCount;
//引用计数?
unsigned short nUpper;
//另一个放进程ID的地方
unsigned short nType;
//类型了,你自己试试看到底是什么类型吧。
void *pUser;
//有的GDI对象会将一些东西放到用户区,这个就是了(有可能DIB的图像区)
};
void init(GdiTableCell *&pGDITable);
// GdiTable.cpp : 定义应用程序的入口点。
//
#include "stdafx.h"
#include "GdiTable.h"
#include <assert.h>
#include <stdio.h>
#include <time.h>
#define EVENT_TIME_FORMAT "%b %d %H:%M:%S"
#define EVENT_TIME_MAXLEN 32
int APIENTRY _tWinMain(HINSTANCE hInstance,HINSTANCE,LPTSTR,int)
{
GdiTableCell *pGDITable;
init(pGDITable);
FILE *filewrite=fopen("log.txt","a");
if(filewrite==NULL)
return 0;
char time_string[EVENT_TIME_MAXLEN];
time_t now;
struct tm * tmnow;
time(&now);
if (!(tmnow = localtime(&now)))
strcpy(time_string,"?");
else
strftime(time_string,EVENT_TIME_MAXLEN,EVENT_TIME_FORMAT,tmnow);
fprintf(filewrite,"Decode Gdi Table %s:\n",time_string);
for(int i=0;i<16384;i++)
{
if((pGDITable->pKernel!=NULL)&&(pGDITable->nProcess!=0))
{
fprintf(filewrite,"%8X %8d %8d %8d %8x %8X\n",pGDITable->pKernel,pGDITable->nProcess,pGDITable->nCount,pGDITable->nUpper,pGDITable->nType,pGDITable->pUser);
}
pGDITable++;
}
return 0;
}
void init(GdiTableCell *&pGDITable)
{
proc0 pGdiQueryTable=(proc0)GetProcAddress(GetModuleHandle("GDI32.dll"),"GdiQueryTable");
assert(pGdiQueryTable);
if(pGdiQueryTable)
pGDITable=(GdiTableCell*)pGdiQueryTable();
else
{
pGDITable=NULL;
MessageBox(NULL,"Error","error",MB_OK);
}
}
jerry
2003-10-12
打赏
举报
回复
窗口句柄是系统级的资源,可以跨进程使用的。
我经常这样用的
szjay
2003-10-12
打赏
举报
回复
这么多人说了,但没一个说得详细的
xiangshifu99
2003-10-10
打赏
举报
回复
大家应该用过SPY以及类似软件,注意了没有,每一个窗口都有一个不变的16进制字符串,如果没有猜错的话,那个应该是一个句柄!?我认为是可以了!
cchuocp
2003-10-10
打赏
举报
回复
句柄可以用,但只有部分消息可以用。
tryber
2003-10-10
打赏
举报
回复
窗口的句柄是在被销毁之前是唯一的,可以跨进程,跨线程, 放心用吧.
wangjs720
2003-10-10
打赏
举报
回复
sure
studyingpersons
2003-10-10
打赏
举报
回复
mark
finix
2003-10-10
打赏
举报
回复
1需要复制
DuplicateHandle
2利用继承性
前提进程间有关系.如A 创建B....
3命名
像CREATEEVENT()有个参数是名字
yaoha2003
2003-10-09
打赏
举报
回复
我只知道句柄在系统的某一时刻是唯一的,你这样能不能用我不知道,UP
szclm
2003-10-09
打赏
举报
回复
其实能不能用特别的标识呢,我们即然能枚举进程,那我们当然可以通过A进程,去枚举出B进程呀!如果你有对应的B进程的类格式,不就可以引用了吗?呵呵,不知我这样说对不对!
sevencat
2003-10-09
打赏
举报
回复
假如行的话,我能用这个句柄进行操作吗?
假如我能用他,就意味着我可以对任意的窗口进行操作?
有些GDI句柄是全局的(好像是画刷吧,用得比较多的那玩意儿)
句柄结构表一般是放在系统区的一个地方(不同的进程这个表的虚拟内存地址可能还不一样,不过有个未公开的API可以得到他)
很遗憾,句柄表是一个很长的数据(好像是64位的),有数据的真实地址,另外还有进程号,还有我记不清了,因此每个API调用句柄可能都会先查一下这个句柄是不是属于你这个进程的,假如不是的,根本不可能调用成功。
Agemo
2003-10-09
打赏
举报
回复
一个简单明了的怀疑就是,系统创建进程时,都相应给每个进程创建一个句柄索引表,既然句柄索引表是process-dependent的,那么肯定不能如楼主所述的那样使用。
Agemo
2003-10-09
打赏
举报
回复
我表示怀疑,不过没有细考虑。凭我现在大脑里的印象,我认为不可以的根据是:每个进程创建的时候,系统都给创建一个句柄表,其实每个进程所获得的句柄都是对系统资源的参考的索引,应该是indirect的,就是不是直接引用的。所以两个进程对同一个系统资源的句柄是未必相同的。所以对同一个进程A所创建的窗口,A使用此窗口的句柄是A进程的句柄索引表中的一个索引,B通过一个api函数调用,获得的同一个窗口资源的句柄是和A中的不一样的,虽然有可能两个索引都一样,同理,进程C必须自己调用api函数获得此窗口句柄才行,不能用B进程传过来的那个,虽然会因为巧合而可以使用。我的猜想是,当B进程调用api函数获得那个窗口资源时,所做的工作就是在进程B的句柄索引表中增加一项,真正的资源引用指针被作为值插入,对应此指针的有一个索引,此索引就被当作句柄返回给了用户进程使用。可以看windows核心编程,我的记忆力不太好,再加上工作后没有搞过windows的东西,所以可能记忆有误。反正我现在的回答是:不可以。
fengzi_zhu
2003-10-09
打赏
举报
回复
句柄是系统资源在句柄所对应的对象生存期内该句柄是唯一的。也就是不用进程在不同时刻使用同一个句柄时,不能保证该句柄的对象是否是同一个。
xiaohyy
2003-10-09
打赏
举报
回复
可以。。
yintongshun
2003-10-09
打赏
举报
回复
先形成实例再用
相关推荐
Android中
跨
进程
通信的核心技术
深入详细的讲解Android中
跨
进程
通信的核心技术。通过丰富的案例,手把手的帮助同学们理解
跨
进程
通信中的每一个知识点与核心技术1、快速掌握AIDL的
使用
2、深入了解反射的详细
使用
3、Android IPC框架实战。通过实战加深对
跨
进程
通信知识的理解
HWND
窗口
句柄
跨
进程
共享
HWND
窗口
句柄
跨
进程
共享 ...
如何用WM_COPYDATA
跨
进程
传递
窗口
句柄
要
使用
WM_COPYDATA
跨
进程
传递
窗口
句柄
, 可以按照以下步骤进行: 在发送方
进程
中创建一个 COPYDATASTRUCT 结构体,并将要发送的
窗口
句柄
存储在其中。 我们首先检查传递的数据大小是否为
窗口
句柄
的大小,以确保正确提取数据。然后我们可以
使用
传递的
窗口
句柄
来执行任何需要与该
窗口
交互的操作。
解决 WPF 嵌套的子
窗口
在改变
窗口
大小的时候闪烁的问题
因为 Win32 的
窗口
句柄
是可以
跨
进程
传递的,所以可以用来实现
跨
进程
UI。不过,本文不会谈论
跨
进程
UI 的具体实现,只会提及其实现中的一个重要缓解,
使用
子
窗口
的方式。 你有可能在
使用
子
窗口
之后,发现拖拽改变
窗口
大小的时候,子
窗口
中的内容不断闪烁。如果你也遇到了这样的问题,那么正好可以阅读本文来解决。 本文内容问题解决原因 问题 你可以看一下下面的这张动图,感受一下
窗口
的闪烁: 实际上在拖...
day4 –
跨
进程
使用
句柄
和
进程
间操作内存
openprocess getwindowthreadprocessid findwindow getcurrentprocess 0xffffffff 伪
句柄
duplicatehandle writeprocessmemery virtualprotectex 内存分页
跨
进程
使用
句柄
获取
进程
句柄
OpenProcess : 打开现有的本地处理对象 HANDLE OpenProcess( ...
网络编程
18,338
社区成员
64,245
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告