或者怎么对用ShellExecute打开的程序发送消息进行操作呢?

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      H: HWND;
      P: PChar;
    begin
      ShellExecute(0, 'open', 'notepad.exe', nil, nil ,SW_SHOW);
      while True do
      begin
        H := GetForegroundWindow;
        if H <> Handle then Break;
      end;
      P := 'collecte (问题虫) ';
      SendMessage(H, WM_SETTEXT, 0, Integer(P));
    end;————————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    ————————————————————————————————————
      

  2.   

    你这段程序得到的Handle正确吗?
    为什么我紧跟着执行:
    SendMessage(mHandle, WM_CLOSE, 0, 0);
    窗口并没有关闭啊?
      

  3.   

    当然关闭了:
    SendMessage(mHandle, WM_CLOSE, 0, 0);
    应该放在while外,如:
    procedure TForm1.Button1Click(Sender: TObject);
    var
      H: HWND;
      P: PChar;
    begin
      ShellExecute(0, 'open', 'notepad.exe', nil, nil ,SW_SHOW);
      while True do
      begin
        H := GetForegroundWindow;
        if H <> Handle then Break;
      end;
      P := 'collecte (问题虫) ';
      SendMessage(H, WM_SETTEXT, 0, Integer(P));
      SendMessage(H, WM_CLOSE, 0, 0);
    end;————————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    ————————————————————————————————————
      

  4.   

    当然关闭了:
    SendMessage(mHandle, WM_CLOSE, 0, 0);
    应该放在while外,如:
    procedure TForm1.Button1Click(Sender: TObject);
    var
      H: HWND;
      P: PChar;
    begin
      ShellExecute(0, 'open', 'notepad.exe', nil, nil ,SW_SHOW);
      while True do
      begin
        H := GetForegroundWindow;
        if H <> Handle then Break;
      end;
      P := 'collecte (问题虫) ';
      SendMessage(H, WM_SETTEXT, 0, Integer(P));
      SendMessage(H, WM_CLOSE, 0, 0);
    end;————————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    ————————————————————————————————————
      

  5.   

    可是,我是放在while外的啊!跟你写的一样啊  而且SendMessage(H, WM_CLOSE, 0, 0)的返回值等于0啊。SendMessage(mHandle, WM_SETTEXT, 0, Integer(Filename));
        if SendMessage(mHandle, WM_CLOSE, 0, 0)<>0 then
        begin
          MessageBoxEx(self.Handle,'关闭失败!','提示:',MB_ICONERROR,LANG_CHINESE);
        end;