比如,一共有两个程序,每个程序的界面上都有一个按钮,要实现的功能是,在点击其中一个程序的按钮时,控制另一个程序让,另一个程序的按钮也被点击!
13 个解决方案
#1
FindWindow(....)
SendMessage(hWnd,WM_COMMAND,..)
SendMessage(hWnd,WM_COMMAND,..)
#2
PostMessage
SendMessage
SendMessage
#3
如上面两位所说,
1、FindWindows() 根据窗口标题取得这个窗口的句柄
2、SendMessage() 发送一个按钮被单击的消息给这个窗口
这两个函数怎么用自己去查阅MSDN吧
1、FindWindows() 根据窗口标题取得这个窗口的句柄
2、SendMessage() 发送一个按钮被单击的消息给这个窗口
这两个函数怎么用自己去查阅MSDN吧
#4
ghgk(GHGK):如果那个窗口是“无标题”的呢!!!!!!!!!
#5
可以用WindowFromPoint ()返回指定点的窗口句柄,用鼠标确定窗口位置。再获得鼠标位置通过这个函数取得该点所在的窗口句柄。
#6
那个按钮怎么会无标题呢?即使无标题也可以用""来FINDWINDOW呀
#7
edit89(烟斗丢了)
窗口的handle不是窗口上的标题,每一个窗口都有自己唯一的标识的,操作系统就是用handle来区分窗口的
多说一句话,按纽也是一个窗口
窗口的handle不是窗口上的标题,每一个窗口都有自己唯一的标识的,操作系统就是用handle来区分窗口的
多说一句话,按纽也是一个窗口
#8
那能否做一个程序,让它在显示时,一直显示在目标程序之上,遮住目标程序。并且还能根据目标程序的改变大小和移动位置而改变。我的意思是两个程序都运行,但其中一个程序一直在另一个的上一层,使得用户看到的是这个程序,而不是底层的那个程序,底层的程序需要被完全遮住!请问各位高手,这该如何实现?
#9
可以呀,你底层的程序移动的时候发消息给上面的程序跟着一块移呀
不过底下的程序都被挡住了怎么移呀?也没必要挡住呀,隐藏不好吗?
不过底下的程序都被挡住了怎么移呀?也没必要挡住呀,隐藏不好吗?
#10
可以让上层的程序界面上一部分是透明的,一部分不透明吗?
就是说让界面上一部分透明好露出下面程序的界面!另一部分不透明显示的是上面程序的界面,这该如何实现?
就是说让界面上一部分透明好露出下面程序的界面!另一部分不透明显示的是上面程序的界面,这该如何实现?
#11
HWND hWnd=::FindWindow(NULL,"窗口名称")
::SendMessage(hWnd,WM_COMMAND,按钮的ID,0)
::SendMessage(hWnd,WM_COMMAND,按钮的ID,0)
#12
学习
#13
装个钩子控制.
extern "C" _declspec (dllexport) LRESULT WINAPI HookProc(int nCode,WPARAM wParam,LPARAM lParam)
{
static BOOL bSubClass=FALSE;//子类化标志,初始为假
if(hWnd==NULL)//如果以前未找到Notepad窗口,继续查找,找到后发送初始化消息
{
hWnd=FindWindow("Notepad",NULL);
if(IsWindow(hWnd))
PostMessage(hWnd,WM_NULL,0,0);
}
else
{
if(!IsWindow(hWnd))
{
bSubClass=FALSE;
hWnd=NULL;
}
}
//如果以前运行过Notepad,但此时已经关闭,置窗口句柄为空,子类化标志为假
if((!bSubClass)&&(nCode==HC_ACTION)&&(wParam==PM_REMOVE)&&(((MSG*)lParam)->hwnd==hWnd)&&(((MSG*)lParam)->message==WM_NULL))
{
lpOriginalProc=(WNDPROC)SetWindowLong(hWnd,GWL_WNDPROC,(LONG)NewWndSubClassProc);//设置钩子过程,进行窗口子类化
HMENU hMenu;
hMenu=GetMenu(hWnd);//获取Notepad窗口菜单
int nMenuItemCount=GetMenuItemCount(hMenu);//获得Notepad窗口菜单记数
for(int i=0;i<nMenuItemCount;i++)//遍历一级菜单
{
char lpString[128]="\0";
int nMenuItemStringLen=GetMenuString(hMenu,i,lpString,128,MF_BYPOSITION);//获取菜单标题文本
if(lstrcmp(lpString,_T("帮助(&H)"))!=0)
continue;//针对文件,编辑,格式菜单项跳过
HMENU hSubMenu=GetSubMenu(hMenu,i);//取得帮助菜单句柄
AppendMenu(hSubMenu,MF_SEPARATOR,102,"-");
AppendMenu(hSubMenu,MF_BYCOMMAND|MF_STRING,About,"关于监控");//添加菜单项,About为上面定义的枚举常数
}
DrawMenuBar(hWnd);//菜单重绘
bSubClass=TRUE;//设置子类化标志
}
return CallNextHookEx(hHook,nCode,wParam,lParam);//传递钩子到下一级钩子链
}
extern "C" _declspec (dllexport) LRESULT WINAPI HookProc(int nCode,WPARAM wParam,LPARAM lParam)
{
static BOOL bSubClass=FALSE;//子类化标志,初始为假
if(hWnd==NULL)//如果以前未找到Notepad窗口,继续查找,找到后发送初始化消息
{
hWnd=FindWindow("Notepad",NULL);
if(IsWindow(hWnd))
PostMessage(hWnd,WM_NULL,0,0);
}
else
{
if(!IsWindow(hWnd))
{
bSubClass=FALSE;
hWnd=NULL;
}
}
//如果以前运行过Notepad,但此时已经关闭,置窗口句柄为空,子类化标志为假
if((!bSubClass)&&(nCode==HC_ACTION)&&(wParam==PM_REMOVE)&&(((MSG*)lParam)->hwnd==hWnd)&&(((MSG*)lParam)->message==WM_NULL))
{
lpOriginalProc=(WNDPROC)SetWindowLong(hWnd,GWL_WNDPROC,(LONG)NewWndSubClassProc);//设置钩子过程,进行窗口子类化
HMENU hMenu;
hMenu=GetMenu(hWnd);//获取Notepad窗口菜单
int nMenuItemCount=GetMenuItemCount(hMenu);//获得Notepad窗口菜单记数
for(int i=0;i<nMenuItemCount;i++)//遍历一级菜单
{
char lpString[128]="\0";
int nMenuItemStringLen=GetMenuString(hMenu,i,lpString,128,MF_BYPOSITION);//获取菜单标题文本
if(lstrcmp(lpString,_T("帮助(&H)"))!=0)
continue;//针对文件,编辑,格式菜单项跳过
HMENU hSubMenu=GetSubMenu(hMenu,i);//取得帮助菜单句柄
AppendMenu(hSubMenu,MF_SEPARATOR,102,"-");
AppendMenu(hSubMenu,MF_BYCOMMAND|MF_STRING,About,"关于监控");//添加菜单项,About为上面定义的枚举常数
}
DrawMenuBar(hWnd);//菜单重绘
bSubClass=TRUE;//设置子类化标志
}
return CallNextHookEx(hHook,nCode,wParam,lParam);//传递钩子到下一级钩子链
}
#1
FindWindow(....)
SendMessage(hWnd,WM_COMMAND,..)
SendMessage(hWnd,WM_COMMAND,..)
#2
PostMessage
SendMessage
SendMessage
#3
如上面两位所说,
1、FindWindows() 根据窗口标题取得这个窗口的句柄
2、SendMessage() 发送一个按钮被单击的消息给这个窗口
这两个函数怎么用自己去查阅MSDN吧
1、FindWindows() 根据窗口标题取得这个窗口的句柄
2、SendMessage() 发送一个按钮被单击的消息给这个窗口
这两个函数怎么用自己去查阅MSDN吧
#4
ghgk(GHGK):如果那个窗口是“无标题”的呢!!!!!!!!!
#5
可以用WindowFromPoint ()返回指定点的窗口句柄,用鼠标确定窗口位置。再获得鼠标位置通过这个函数取得该点所在的窗口句柄。
#6
那个按钮怎么会无标题呢?即使无标题也可以用""来FINDWINDOW呀
#7
edit89(烟斗丢了)
窗口的handle不是窗口上的标题,每一个窗口都有自己唯一的标识的,操作系统就是用handle来区分窗口的
多说一句话,按纽也是一个窗口
窗口的handle不是窗口上的标题,每一个窗口都有自己唯一的标识的,操作系统就是用handle来区分窗口的
多说一句话,按纽也是一个窗口
#8
那能否做一个程序,让它在显示时,一直显示在目标程序之上,遮住目标程序。并且还能根据目标程序的改变大小和移动位置而改变。我的意思是两个程序都运行,但其中一个程序一直在另一个的上一层,使得用户看到的是这个程序,而不是底层的那个程序,底层的程序需要被完全遮住!请问各位高手,这该如何实现?
#9
可以呀,你底层的程序移动的时候发消息给上面的程序跟着一块移呀
不过底下的程序都被挡住了怎么移呀?也没必要挡住呀,隐藏不好吗?
不过底下的程序都被挡住了怎么移呀?也没必要挡住呀,隐藏不好吗?
#10
可以让上层的程序界面上一部分是透明的,一部分不透明吗?
就是说让界面上一部分透明好露出下面程序的界面!另一部分不透明显示的是上面程序的界面,这该如何实现?
就是说让界面上一部分透明好露出下面程序的界面!另一部分不透明显示的是上面程序的界面,这该如何实现?
#11
HWND hWnd=::FindWindow(NULL,"窗口名称")
::SendMessage(hWnd,WM_COMMAND,按钮的ID,0)
::SendMessage(hWnd,WM_COMMAND,按钮的ID,0)
#12
学习
#13
装个钩子控制.
extern "C" _declspec (dllexport) LRESULT WINAPI HookProc(int nCode,WPARAM wParam,LPARAM lParam)
{
static BOOL bSubClass=FALSE;//子类化标志,初始为假
if(hWnd==NULL)//如果以前未找到Notepad窗口,继续查找,找到后发送初始化消息
{
hWnd=FindWindow("Notepad",NULL);
if(IsWindow(hWnd))
PostMessage(hWnd,WM_NULL,0,0);
}
else
{
if(!IsWindow(hWnd))
{
bSubClass=FALSE;
hWnd=NULL;
}
}
//如果以前运行过Notepad,但此时已经关闭,置窗口句柄为空,子类化标志为假
if((!bSubClass)&&(nCode==HC_ACTION)&&(wParam==PM_REMOVE)&&(((MSG*)lParam)->hwnd==hWnd)&&(((MSG*)lParam)->message==WM_NULL))
{
lpOriginalProc=(WNDPROC)SetWindowLong(hWnd,GWL_WNDPROC,(LONG)NewWndSubClassProc);//设置钩子过程,进行窗口子类化
HMENU hMenu;
hMenu=GetMenu(hWnd);//获取Notepad窗口菜单
int nMenuItemCount=GetMenuItemCount(hMenu);//获得Notepad窗口菜单记数
for(int i=0;i<nMenuItemCount;i++)//遍历一级菜单
{
char lpString[128]="\0";
int nMenuItemStringLen=GetMenuString(hMenu,i,lpString,128,MF_BYPOSITION);//获取菜单标题文本
if(lstrcmp(lpString,_T("帮助(&H)"))!=0)
continue;//针对文件,编辑,格式菜单项跳过
HMENU hSubMenu=GetSubMenu(hMenu,i);//取得帮助菜单句柄
AppendMenu(hSubMenu,MF_SEPARATOR,102,"-");
AppendMenu(hSubMenu,MF_BYCOMMAND|MF_STRING,About,"关于监控");//添加菜单项,About为上面定义的枚举常数
}
DrawMenuBar(hWnd);//菜单重绘
bSubClass=TRUE;//设置子类化标志
}
return CallNextHookEx(hHook,nCode,wParam,lParam);//传递钩子到下一级钩子链
}
extern "C" _declspec (dllexport) LRESULT WINAPI HookProc(int nCode,WPARAM wParam,LPARAM lParam)
{
static BOOL bSubClass=FALSE;//子类化标志,初始为假
if(hWnd==NULL)//如果以前未找到Notepad窗口,继续查找,找到后发送初始化消息
{
hWnd=FindWindow("Notepad",NULL);
if(IsWindow(hWnd))
PostMessage(hWnd,WM_NULL,0,0);
}
else
{
if(!IsWindow(hWnd))
{
bSubClass=FALSE;
hWnd=NULL;
}
}
//如果以前运行过Notepad,但此时已经关闭,置窗口句柄为空,子类化标志为假
if((!bSubClass)&&(nCode==HC_ACTION)&&(wParam==PM_REMOVE)&&(((MSG*)lParam)->hwnd==hWnd)&&(((MSG*)lParam)->message==WM_NULL))
{
lpOriginalProc=(WNDPROC)SetWindowLong(hWnd,GWL_WNDPROC,(LONG)NewWndSubClassProc);//设置钩子过程,进行窗口子类化
HMENU hMenu;
hMenu=GetMenu(hWnd);//获取Notepad窗口菜单
int nMenuItemCount=GetMenuItemCount(hMenu);//获得Notepad窗口菜单记数
for(int i=0;i<nMenuItemCount;i++)//遍历一级菜单
{
char lpString[128]="\0";
int nMenuItemStringLen=GetMenuString(hMenu,i,lpString,128,MF_BYPOSITION);//获取菜单标题文本
if(lstrcmp(lpString,_T("帮助(&H)"))!=0)
continue;//针对文件,编辑,格式菜单项跳过
HMENU hSubMenu=GetSubMenu(hMenu,i);//取得帮助菜单句柄
AppendMenu(hSubMenu,MF_SEPARATOR,102,"-");
AppendMenu(hSubMenu,MF_BYCOMMAND|MF_STRING,About,"关于监控");//添加菜单项,About为上面定义的枚举常数
}
DrawMenuBar(hWnd);//菜单重绘
bSubClass=TRUE;//设置子类化标志
}
return CallNextHookEx(hHook,nCode,wParam,lParam);//传递钩子到下一级钩子链
}