怎么使用sendmessage来更改第三方软件菜单caption,SendMessage(Integer(Edit1.Text),WM_SETTEXT,255,Integer(PChar(Edit2.text)))好像不生效,谢谢

解决方案 »

  1.   


    SendMessage(Integer(Edit1.Text),WM_SETTEXT,255,Integer(PChar(Edit2.text)))
    这个第一个参数亮了,SendMessage不是这样用的,第一个需要的是窗口句柄,你把Edit1.Text的Integer的地址传过去搞飞机?
    首先用FindWindow获得第三方窗口的Handle 
    然后SendMessage(找到的Handle,WM_SetText来处理,而且你后面的参数也不对,WParam这个对于这个消息来说,根本没用,用0就行,最后一个参数应该是一个Buf地址,比如buf: array[0..255] of AnsiChar;然后Integer(@buf[0]),请看MSDN
      

  2.   

    谢谢回复,我的edit.text里面是人为的输入的真实句柄,整个调用语法肯定是没有问题的。只是可以改变button的caption,对菜单没用而已。
      

  3.   

    菜单文本的改变不像其他窗口,要先获得菜单的句柄,再改各个菜单项的文本。
    有个api函数是可以取得某个窗体的主菜单句柄的。
      

  4.   

    。。人为的输入的,也不是Integer(Edit1.text)吧,而是Inttostr(Edit1.text)啊,你确定,你那样能改?如果是真的,那我就默默的匿去吧,水太深,我趟不了
      

  5.   

    用SetWindowTex:
    function SetWindowText(hWnd: HWND; lpString: PWideChar): BOOL; external user32 name 'SetWindowTextW';
      

  6.   

      SetWindowText(N1.Handle,PWideChar(TntEdit1.Text));提示:[Error] Unit1.pas(55): Incompatible types: 'WideChar' and 'Char'
      

  7.   

    菜单有菜单的API函数, sendmessage是没有用的
      

  8.   

    setwindowlong