首页
社区
课程
招聘
[求助]c语言自定义消息求助!!!
发表于: 2015-9-21 22:38 3234

[求助]c语言自定义消息求助!!!

2015-9-21 22:38
3234
#include <stdio.h>
#include <stdlib.h>
#include<Windows.h>

int aa(HWND hwd,int msg,int wp,int lp);
BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam) ;
HWND GetMainWindow();
int ab=0,bb=0;
void main()
{
        int (*pFun)();
        int WorkAddress=0;
        pFun=aa;
        WorkAddress=(int)(*pFun);
        bb=RegisterWindowMessage("sb");
        ab=SetWindowLong(GetMainWindow(),GWL_WNDPROC,(LONG)(*pFun));
        SendMessage(GetMainWindow(),888,20,10);
        getchar();
        return ;
       
       
}
int aa(HWND hwd,int msg,int wp,int lp)
{
if(msg==888)
{
        printf("sb消息成功");
        getchar();
}
return(CallWindowProc((WNDPROC)ab, hwd, msg, wp, lp));

}
BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
{
        DWORD dwCurProcessId = *((DWORD*)lParam);
        DWORD dwProcessId = 0;

        GetWindowThreadProcessId(hwnd, &dwProcessId);
        if(dwProcessId == dwCurProcessId && GetParent(hwnd) == NULL)
        {
                *((HWND *)lParam) = hwnd;
                return FALSE;
        }
        return TRUE;
}

HWND GetMainWindow()
{
        DWORD dwCurrentProcessId = GetCurrentProcessId();
        if(!EnumWindows(EnumWindowsProc, (LPARAM)&dwCurrentProcessId))
        {     
                return (HWND)dwCurrentProcessId;
        }
        return NULL;
}

为什么不会printf();

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 261
活跃值: (51)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
呃你没创建窗体的话,GetMainWindow得到的是什么……
2015-9-21 22:59
0
雪    币: 7048
活跃值: (3527)
能力值: ( LV12,RANK:340 )
在线值:
发帖
回帖
粉丝
3
很多地方感觉都有问题。。

首先你这个程序是windows控制台程序,不是GUI,也没有创建窗口。
GetMainWindow()函数应该是得不到本进程的HWND的。
其次,你自定义的消息是888,16进制是0x378,而WM_USER定义是0x400。
也就是你自定义的消息值可能会与系统消息冲突。
2015-9-21 23:03
0
雪    币: 35
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
我的是c语言的控制台哈,就是不知道控制台有木有消息的机制
2015-9-21 23:04
0
雪    币: 204
活跃值: (911)
能力值: (RANK:1324 )
在线值:
发帖
回帖
粉丝
5
《windows程序设计》这本书会帮到你的~
2015-9-21 23:46
0
雪    币: 115
活跃值: (41)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
LZ的线程没有消息队列,无法完成消息传递,你可以参考下面的例子,自建一个消息队列,然后就可以发生自定义消息了
http://www.cppblog.com/sandy/archive/2005/12/31/2320.html
2015-9-22 00:34
0
游客
登录 | 注册 方可回帖
返回
//