主页
Top.Mail.Ru Yandeks.Metrika
论坛:“主要”;
当前存档:2002.04.25;
下载:[xml.tar.bz2];

向下

发布另一个程序。 找到类似的分支


DenKop   (2002-04-11 13:35) [0]

该程序不接受该消息吗?
我这样发送:

过程TForm1.Button1Click(Sender:TObject);
VAR
Wnd:hWnd;
buff:ARRAY [0..127] Char;
开始
Wnd:= GetWindow(Handle,gw_HWndFirst);
当Wnd <> 0 DO
开始
IF(IsWindowVisible(Wnd))和
(GetWindow(Wnd,gw_Owner)= 0)并且
(GetWindowText(Wnd,buff,sizeof(buff))<> 0)
以前
开始
GetWindowText(Wnd,buff,sizeof(buff));
如果(StrPas(buff)=“ Project1”),则
开始
SendMessage(WND,1000000,0,0);
ShowMessage(StrPas(Buff)+“ Handle =” + IntToStr(wnd));
退出;
结束;
结束;
Wnd:= GetWindow(Wnd,gw_hWndNext);
结束;
结束;

尝试接受这样的内容:

procedure TForm1.FormCreate(Sender:TObject);
开始
Application.OnMessage:= AppMessage;
结束;

procedure TForm1.AppMessage(var Msg:TMsg; var Handled:Boolean);
开始
如果Msg.message = 1000000,则ShowMessage(IntToStr(Msg.message));
结束;

发送完消息后,什么都没有发生,谁能告诉我我在做什么错?



Игорь Шевченко   (2002-04-11 14:10) [1]

美好的一天,

Application.OnMessage仅接收PostMessage排队的消息。 SendMessage上的消息无法到达那里。

真诚的,伊戈尔舍甫琴科



Song   (2002-04-11 15:05) [2]

2Igor Shevchenko©(11.04.02 14:10)
是的,是的! 为什么这突然呢?



PVOzerski   (2002-04-11 15:07) [3]

为什么不这样看:
类型
tForm1 =类
....
私立
过程MyCustomHandler(var Msg:tMsg);消息1000000;
结束;
......
过程tForm1.MyCustomHandler(var Msg:tMsg);
开始
ShowMessage(IntToStr(Msg.message));
结束;



Игорь Шевченко   (2002-04-11 15:11) [4]

美好的一天,宋,

有了“帮助”,当然...

使用OnMessage可以捕获发布到应用程序中所有窗口的任何或所有Windows消息。 当应用程序收到Windows消息时,就会发生OnMessage。 OnMessage仅接收发布到消息队列中的消息,而不接收通过Windows API SendMessage函数直接发送的消息。

真诚的,伊戈尔舍甫琴科



Song   (2002-04-11 15:34) [5]

好,
例如,我在程序中捕获了WM_SYSCOMMAND,并处理了SC_MINIMIZE;

而且您认真地认为,如果我执行SendMessage(Application.Handle,WM_SYSCOMMAND,SC_MINIMIZE,0); 我听不到此讯息? 废话 一切正常。



Игорь Шевченко   (2002-04-11 16:13) [6]

早上好,歌,



if PeekMessage(Msg, 0, 0, 0, PM_REMOVE) then
begin
Result := True;
if Msg.Message <> WM_QUIT then
begin
Handled := False;
if Assigned(FOnMessage) then FOnMessage(Msg, Handled);
if not IsHintMsg(Msg) and not Handled and not IsMDIMsg(Msg) and
not IsKeyMsg(Msg) and not IsDlgMsg(Msg) then
begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
end
else
FTerminate := True;
end;


这是调用OnMessage处理程序的唯一位置。

阅读帮助:

PeekMessage函数检查线程消息队列中是否有消息,并将该消息(如果有)放置在指定的结构中。

SendMessage函数将指定的消息发送到一个或多个窗口。 该函数调用指定窗口的窗口过程,直到该窗口过程处理完该消息后才返回。 相反,PostMessage函数将消息发布到线程的消息队列中并立即返回。

还需要其他来源吗? :-)

真诚的,



Song   (2002-04-11 16:22) [7]

我举了一个例子。 它可以100%工作。



Song   (2002-04-11 16:25) [8]

那又怎样 从此“该函数调用指定窗口的窗口过程,直到该窗口过程处理完该消息后才返回”,这表明SendMessage不发送消息,因此可以被onMessage捕获?



Игорь Шевченко   (2002-04-11 16:30) [9]

美好的一天,宋,

是的,这意味着:-)由于SendMessage不会将消息排队,这意味着PeekMessage无法将消息带出那里...

真诚的,



Song   (2002-04-11 16:36) [10]

“该函数调用“窗口”用于所选窗口的过程,并且在消息生成结束之前不会返回结果。 那又怎样
2伊戈尔·舍甫琴科©(11.04.02/16/30 XNUMX:XNUMX p.m.),对您表示敬意,但您为何飞升? 您曾经尝试过吗?



Alx2   (2002-04-11 16:40) [11]

>歌曲©(11.04.02 16:36)
>“函数调用”窗口
恰好是窗户。 马上。 直截了当。 :)



Игорь Шевченко   (2002-04-11 16:42) [12]

美好的一天,宋,

我试过了。

如果在同一过程中发送和接收消息,则SendMessage使用Call命令直接而不是通过消息队列调用窗口过程。 OnMessage只适用于从队列中选择的消息,因为它是在Help中编写的,是否也悬浮在Help中? :-)

真诚的,



Song   (2002-04-11 16:42) [13]

好的,伊戈尔,让我们总结一下:“您不能通过SendMessage发送消息-使用PostMessage或Perform。而且我可以-总是这样做,只有当某些东西可以挂起并且SendMessage的结果不会返回时,例外-关于您在帮助中实际选择的说法是“。 我们保留我们的意见。



Игорь Шевченко   (2002-04-11 16:46) [14]

美好的一天,宋,

我可以通过SendMessage发送消息,但无法在OnMessage事件中接收这些消息:-)

再次从TApplication.OnMessage
“注意:OnMessage仅接收发布到消息队列的消息,而不接收直接通过Windows API SendMessage函数发送的消息。”

此外,我们可以保留我们的意见:-)

真诚的,



Alx2   (2002-04-11 16:50) [15]

>歌曲©(11.04.02 16:42)
伊戈尔是对的。 从异步消息队列处理程序中调用OnMessage。 SendMessage不会进入队列。 它直断了:)



Виктор Щербаков   (2002-04-11 16:54) [16]

到宋。
Igor Shevchenko©和Alx2©已经告诉您SendMessage直接调用窗口过程。 所以在处理程序中 发展称为res。 尽管将调用窗口过程,但我们不会将消息从队列中移出!
如果在调用上下文中为同一个线程的窗口调用SendMessage,则为true。



Набережных С.   (2002-04-11 17:22) [17]


> Victor Shcherbakov©(11.04.02 16:54)


>如果为该窗口调用了SendMessage,则为true
>在调用上下文中使用相同的线程。

无论如何都是如此。



Song   (2002-04-11 17:32) [18]

好吧,我很愚蠢。



DenKop   (2002-04-11 18:49) [19]

to Song>我不是消息的高手,但这是我在上面的示例中从实践中学到的:
当我通过SendMessage发送消息时,没有找到任何结果,并且当我发送PostMessage函数时,接收器程序用“吃”消息回答了我。也就是说,在这种情况下,SendMessage不起作用。
全部>感谢您的澄清。

还有一个有趣的问题:
为什么WinSight不能从我的程序中捕获消息。 我尝试了上述所有功能(PreForm,SendMessage,PostMessage),但是我从未在消息列表中看到消息。



Fantasist   (2002-04-11 23:14) [20]

我不明白的是,这真的是新帖子吗? 我想大约三四个月前(整个分支)就看到了。 谁是越野车?



Alx2   (2002-04-12 07:33) [21]

>歌曲©(11.04.02 17:32)
还没有;)



REA   (2002-04-12 11:13) [22]

主持人越野车:)



Страницы: 1 整个分支

论坛:“主要”;
当前存档:2002.04.25;
下载:[xml.tar.bz2];

楼上





内存:0.62 MB
时间:0.049 c
1-80944
budhha
2002-04-10 22:56
2002.04.25
实地记录


1-80961
EternalWonderer
2002-04-11 12:52
2002.04.25
IIF


1-80889
Darlok
2002-04-14 15:03
2002.04.25
程序文件目录


1-80866
SunVit
2002-04-13 16:21
2002.04.25
报告问题


6-81013
Sozonov Evgeny
2002-02-14 10:17
2002.04.25
获取信息(谁?做了什么?访问时间?)关于访问您的计算机。





南非荷兰语 阿尔巴尼亚人 阿拉伯语 亚美尼亚 阿塞拜疆 巴斯克 白俄罗斯 保加利亚语 加泰罗尼亚 简体中文 中国(繁体) 克罗地亚 捷克 丹麦语 荷兰人 英语 爱沙尼亚语 菲律宾人 芬兰 法语
加利亚西语 格鲁吉亚语 德语 希腊语 海地克里奥尔语 希伯来语 印地语 匈牙利 北日耳曼语 印度尼西亚人 爱尔兰语 意大利语 日本 韩语 拉脱维亚 立陶宛 马其顿 马来语 马耳他语 挪威语
波斯语 波兰语 葡萄牙语 罗马尼亚 俄语 塞尔维亚 斯洛伐克 斯洛文尼亚 西班牙语 斯瓦希里 瑞典语 泰国人 土耳其 乌克兰 乌尔都语 越南人 威尔士语 意第绪语 孟加拉 波斯尼亚
宿务 世界语 古吉拉特语 豪萨语 苗族 伊博 爪哇 卡纳达语 高棉 老挝 拉丁语 毛利 马拉 蒙古人 尼泊尔 旁遮普 索马里 淡米尔文 泰卢固语 约鲁巴语
祖鲁
英文 Французский Немецкий Итальянский Португальский 俄文 Испанский