怎样让一个VB程序的窗体刚好在另一个程序的窗体上方(就是不挡住最顶上的程序)

怎样让一个VB程序的窗体刚好在另一个程序的窗体上方(就是不挡住最顶上的程序),第1张

貌似这个比较复杂,

第一步:找句柄。先根据窗口名字找到在下面的那个窗口的句柄,用api findwindow

第二步,放钩子。用获得的句柄给那个窗口放一个钩子,截获WM_SIZE消息,用api setwindowshook。

第三部,获得该窗口位置。截获WM_SIZE消息后,获得下面窗口的位置 , 用api getwindowrect '若果我没有记错的话,应该是这个api

第四步:调整本窗口的位置。根据上一步获得的窗口位置,调整本窗口的位置,用api setwindowslong。

第五步:将信息传回给下面窗口。WM_SIZE消息放还给下面窗口,不然下面窗口就不动了。貌似用到的api是 CallNextHookEx

最后一步:退出程序的时候不要忘记释放钩子,api UnhookWindowsHookEx

以上给个思路,api、钩子不懂的去百度下,会有很详细的解说。

其实核心是放钩子,取得下面窗口变更大小和位置时候的消息。

如果那个窗口不动的话完全可以省略放钩子的过程,直接取得窗口位置就可以了。

粗略的看了一下,最明显的就是那个CallNextHookEx不应该在else子句中调用,应该放到外面来,也就是在函数最后写上return CallNextHookEx(Hook, nCode, wParam, lParam);

你这个每当F12被按下时,CallNextHookEx就会被忽略,从而导致消息不能被传送到下一个钩子,也就不能被系统所处理。(相当于把F12屏蔽掉了)

---------------------------------------------------------------------------

要模拟键盘输入不是那么简单的,好像还应该处理WM_CHAR消息。当按下键盘后,会产生WM_KEYDOWN消息,这个谁都知道,但如果按下的是字符键,还会紧接着产生WM_KEYCHAR消息,最后才是WM_KEYUP。所以重点要在WM_CHAR上做文章。另一种思路是,把keybd_event函数换成SendMessage或PostMessage再试试,但前提是要先知道窗口句柄,囧~

f(VK_F2==wParam)

{

HWND VKWnd = GetFocus();

SendMessage(VKWnd,WM_CHAR,'9',0);

这儿改成

if(VK_F2==wParam && 1 == (lParam>>30 & 1))

{

HWND VKWnd = GetFocus();

SendMessage(VKWnd,WM_CHAR,'9',0);

}

发送两次消息的原因是,按键时会触发按下和松开两个消息。

1 == (lParam>>30 & 1)这个是用来决断当前键是否松开,这样就只会发送一次消息了,当然你也可以通过GetKeyState来判断键是按下还是松开,然后执行一次发送消息。

以上就是关于怎样让一个VB程序的窗体刚好在另一个程序的窗体上方(就是不挡住最顶上的程序)全部的内容,包括:怎样让一个VB程序的窗体刚好在另一个程序的窗体上方(就是不挡住最顶上的程序)、VC++编程键盘DLL调试不通,高手来帮忙看看啊~~~、vc 键盘钩子 拦截按键,再SendMessage,但是为何SendMessage发送两次等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9642269.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-30
下一篇2023-04-30

发表评论

登录后才能评论

评论列表(0条)

    保存