用sendmessage发送消息不成功,大侠们帮帮忙啊!

时间:2022-09-05 21:10:05
            HWND hWnd = ::FindWindow(_T("Notepad"), NULL);    
            if(hWnd)
{         

          CWnd *hEditEx =(CWnd)FindWindowEx(hWnd, NULL, _T("Edit"), NULL);        

            HWND hEdit=hEditEx->GetSafeHwnd();

            //if(hEdit)        

           ::PostMessage(hWnd, WM_CHAR, 0x48, 0);//发送‘H’到notepad          

           ::PostMessage(hWnd, WM_CHAR, 0x45, 0);//发送‘E’到notepad       

           ::PostMessage(hWnd, WM_CHAR, 0x4C, 0);//发送‘L’到notepad       

           ::PostMessage(hWnd, WM_CHAR, 0x4C, 0);//发送‘L’到notepad       

           ::PostMessage(hWnd, WM_CHAR, 0x4F, 0);//发送‘O’到notepad  
上面这段代码是我用来测试是否可以想记事本发送消息并显示在记事本上的,在网上你找到的。但是发现却不能送消息。数据不能显示在记事本上。这是怎么回事呢?那位大侠帮帮忙啊!

8 个解决方案

#1


单步调试一下,看哪一步失败了

#2


::PostMessage(hWnd, WM_CHAR, 0x48, 0);//发送‘H’到notepad   
不是hWnd,是hEdit吧?

#3


  CWnd *hEditEx =(CWnd)FindWindowEx(hWnd, NULL, _T("Edit"), NULL);   

这个语句有问题,返回的是窗口句柄,无法这样转换的

#4



UINT __cdecl ThreadProc(LPVOID lParam)
{
HWND hWnd = ::FindWindow(_T("Notepad"), NULL);
if(hWnd)
{
HWND hEdit = ::FindWindowEx(hWnd, NULL, _T("Edit"), NULL);
if(hEdit)
{
TCHAR buf[] = _T("Hello,World!");
TCHAR szTmp[2] = {0};
for(size_t i = 0; i != _tcslen(buf); ++i)
{
szTmp[0] = buf[i];
SendMessage(hEdit, EM_SETSEL, (WPARAM)-1, (LPARAM)-1);
SendMessage(hEdit, EM_REPLACESEL, 0, (LPARAM)(szTmp));
Sleep(500);
}
}
}
return 0;
}

#5


引用 4 楼  的回复:
C/C++ code

UINT __cdecl ThreadProc(LPVOID lParam)
{
    HWND hWnd = ::FindWindow(_T("Notepad"), NULL);
    if(hWnd)
    {
        HWND hEdit = ::FindWindowEx(hWnd, NULL, _T("Edit"), NULL);
        ……

谢谢。我想问一下,如果我想让接受到的数据,不只是输出到txt里面。让他输出到左面最前面的任何程序的文本框之类的的,是不是使用getforgroundhandwindow()就可以?

#6


引用 3 楼  的回复:
  CWnd *hEditEx =(CWnd)FindWindowEx(hWnd, NULL, _T("Edit"), NULL);   

这个语句有问题,返回的是窗口句柄,无法这样转换的

我以为这个样可以强制转换,再去啃一下书,谢谢了。

#7


该回复于2012-05-28 14:42:41被版主删除

#8


该回复于2012-05-29 08:34:40被版主删除

#1


单步调试一下,看哪一步失败了

#2


::PostMessage(hWnd, WM_CHAR, 0x48, 0);//发送‘H’到notepad   
不是hWnd,是hEdit吧?

#3


  CWnd *hEditEx =(CWnd)FindWindowEx(hWnd, NULL, _T("Edit"), NULL);   

这个语句有问题,返回的是窗口句柄,无法这样转换的

#4



UINT __cdecl ThreadProc(LPVOID lParam)
{
HWND hWnd = ::FindWindow(_T("Notepad"), NULL);
if(hWnd)
{
HWND hEdit = ::FindWindowEx(hWnd, NULL, _T("Edit"), NULL);
if(hEdit)
{
TCHAR buf[] = _T("Hello,World!");
TCHAR szTmp[2] = {0};
for(size_t i = 0; i != _tcslen(buf); ++i)
{
szTmp[0] = buf[i];
SendMessage(hEdit, EM_SETSEL, (WPARAM)-1, (LPARAM)-1);
SendMessage(hEdit, EM_REPLACESEL, 0, (LPARAM)(szTmp));
Sleep(500);
}
}
}
return 0;
}

#5


引用 4 楼  的回复:
C/C++ code

UINT __cdecl ThreadProc(LPVOID lParam)
{
    HWND hWnd = ::FindWindow(_T("Notepad"), NULL);
    if(hWnd)
    {
        HWND hEdit = ::FindWindowEx(hWnd, NULL, _T("Edit"), NULL);
        ……

谢谢。我想问一下,如果我想让接受到的数据,不只是输出到txt里面。让他输出到左面最前面的任何程序的文本框之类的的,是不是使用getforgroundhandwindow()就可以?

#6


引用 3 楼  的回复:
  CWnd *hEditEx =(CWnd)FindWindowEx(hWnd, NULL, _T("Edit"), NULL);   

这个语句有问题,返回的是窗口句柄,无法这样转换的

我以为这个样可以强制转换,再去啃一下书,谢谢了。

#7


该回复于2012-05-28 14:42:41被版主删除

#8


该回复于2012-05-29 08:34:40被版主删除