Delphi funktionen direkt im BCB nutzen?



  • Wie kann man im BCB delphi funktionen direkt nutzen? Sowas wie inline assembler... 🕶 mir ist bekannt das man .pas dateien einbinden kann und dann über den generierten header drauf zugreifen kann aber wie geht es im C++ quelltext direkt? möchte gerne folgenden code im BCB nutzen:

    uses
      ActiveX, Shdocvw_tlb, MSHTML_TLB;
    
    type
      TObjectFromLResult = function(LRESULT: lResult; const IID: TIID;
        wParam: wParam; out pObject): HRESULT;
      stdcall;
    
    function GetIEFromHWND(WHandle: HWND; var IE: IWebbrowser2): HRESULT;
    var
      hInst: HWND;
      lRes: Cardinal;
      Msg: Integer;
      pDoc: IHTMLDocument2;
      ObjectFromLresult: TObjectFromLresult;
    begin
      hInst := LoadLibrary('Oleacc.dll'); @ObjectFromLresult :=
        GetProcAddress(hInst, 'ObjectFromLresult');
      if @ObjectFromLresult <> nil then
      begin
        try
          Msg := RegisterWindowMessage('WM_HTML_GETOBJECT');
          SendMessageTimeOut(WHandle, Msg, 0, 0, SMTO_ABORTIFHUNG, 1000, lRes);
          Result := ObjectFromLresult(lRes, IHTMLDocument2, 0, pDoc);
          if Result = S_OK then
            (pDoc.parentWindow as IServiceprovider).QueryService(IWebbrowserApp,
              IWebbrowser2, IE);
        finally
          FreeLibrary(hInst);
        end;
      end;
    end;
    
    function GetActiveIEURL: string;
    var
      Document: IHtmlDocument2;
      IE: IWebBrowser2;
      Wnd: HWND;
      WndChild: HWND;
    begin
      Wnd := GetForeGroundWindow;
      WndChild := FindWindowEX(Wnd, 0, 'Shell DocObject View', nil);
      if WndChild <> 0 then
      begin
        WndChild := FindWindowEX(WndChild, 0, 'Internet Explorer_Server', nil);
        if WndChild <> 0 then
        begin
          //Get Iwebbrowser2 from Handle
          GetIEFromHWnd(WndChild, IE);
          if IE <> nil then
          begin
            Result := IE.LocationURL;
            // Document := IE.Document as IHtmlDocument2;
          end;
        end;
      end;
    end;
    
    procedure TForm1.Timer1Timer(Sender: TObject);
    begin
      Caption := GetActiveIEURL;
    end;
    

    da ich scheitere diesen nach C++ zu konvertieren 🕶



  • Oder wie komme ich an das Handle von der internet explorer leiste? Mit FindWindow müsste ich ja einen fenster titel angeben und da der beim IE ja unterschiedlich ist (xyz - Microsoft Internet Explorer) geht das ja nicht. Also wie bekomme ich das handle der IE adress leiste von dem derzeit aktiven IE? 🙄




Anmelden zum Antworten