今天热门
热点:

mian() 句柄,mian句柄


1.我想知道main()应用程序本身有没有句柄。
        我在网上看到main()应用程序是可以GetMessage()的。并且可以接受到消息的。用setTimer(NULL,...)函数测试,确实能接受到WM_TIMER消息。既然都能接受到消息了,那么肯定是有句柄的我猜。
2.如果有句柄的话,那么如何获得它呢?setTimer()的第一个参数是NULL并可以使用,但是其他的SendMessage()是需要句柄才能发消息的(我也设为NULL,并没有用)。
        使用GetModuleHandle(NULL)总是获得0x40000.
3.虽然我用了个隐藏的窗口来处理这些消息了,但是我还是想知道这些可不可以不用隐藏的窗口实现。

解决方案

http://www.cnblogs.com/Sniper-quay/archive/2011/04/27/2030018.html
参考DLL使用定时器

没有窗口哪来的句柄?

没有创建窗口就没有窗口句柄。SetTimer设置计时器后将有WM_TIMER消息发到线程的消息队列,每个线程都有一个消息队列(调用和消息有关的API时其内部自动创建),所以GetMessage()可以取到消息。PostThreadMessage之类的API不需要填写窗口句柄作参数也能工作,就是这样的道理。

1. 在 Windows 下,命令行也是一个普通的窗口,有类名也有句柄。MSDN 说,如果窗口句柄传递 NULL,那么如果指定 id 的定时器存在则会被替换。如果不同的窗口句柄有一样的 id,那肯定不会了。个人觉得指定 NULL 与否只是为了防止冲突,定时器都是进程独立的,并不能跨进程。

2. 命令行程序中可以通过 GetConsoleWindow() 取得当前窗口的句柄,但是发消息肯定大多情况下是没用的,命令行窗口系统并未提供消息。不过你可以试试 SetWindowLong 之后自己处理消息。SendMessage 肯定 HWND 参数不能用 NULL 了,否则消息发给谁?GetModuleHandle 得到的值只要不是 0,那就是有效的,管他是否 0x40000。

进程通信的方式很多,管道、邮槽、内存文件映射、共享内存、windows消息、Socket、事件对象等。
但是使用windows消息是最简单方便的方式。不使用windows消息的话,方法有很多,比如外部程序可以使用事件对象通知你的程序,然后在共享内存写入数据,然后你的程序读取数据并处理。也可以使用管道、邮槽、Socket来实现,但总体来说都比直接发windows消息麻烦

www.zrccd.nettrue/topics/20180106/6322.htmlTechArticlemian() 句柄,mian句柄 1.我想知道main()应用程序本身有没有句柄。 我在网上看到main()应用程序是可以GetMessage()的。并且可以接受到消息的。用setTimer(NULL,...)函数测试,确实能接受到WM_TIM...

相关文章

    暂无相关文章

用户评论

大家都在看