| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1384 人关注过本帖
标题:救命 - Delphi控制台或DLL编译的话就失败,如果用窗体的话就成功,实在不理 ...
只看楼主 加入收藏
qq1172527602
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2012-11-16
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:2 
救命 - Delphi控制台或DLL编译的话就失败,如果用窗体的话就成功,实在不理解,帮帮忙!(TObjectFromLResult)
程序代码:
program test;

{$APPTYPE CONSOLE}

uses
  Windows, SysUtils, ActiveX, MSHTML,Messages;

var
  h:hwnd;
  doc:IHTMLDocument2;

procedure GetDocumentPtrFromWnd(Wnd: HWND; var pDoc: IHTMLDocument2);
type
  TObjectFromLResult = function(LRESULT: LRESULT; const IID: TGUID; wParam: WPARAM; out PObject): HRESULT; stdcall;
var
  GetDocPtr: TObjectFromLResult;
  hModule: THandle;
  Msg: Integer;
  lRes: DWORD;
begin
  hModule := LoadLibrary('OLEACC.DLL');
  try
    if hModule <> 0 then
    begin
      GetDocPtr := GetProcAddress(hModule, 'ObjectFromLresult');
      if @GetDocPtr <> nil then
      begin
        Msg := RegisterWindowMessage('WM_HTML_GETOBJECT');  //难道不能处理消息?
        SendMessageTimeOut(Wnd, Msg, 0, 0, SMTO_ABORTIFHUNG, 1000, lRes);
        if GetDocPtr(lRes, IID_IHTMLDocument2, 0, pDoc) = S_OK then //这里死活不成功,失败了
        begin
          MessageBox(Wnd, '恭喜成功进入', '提示:', MB_ICONEXCLAMATION + MB_OK);
        end
        else
        begin
          pDoc := nil;
        end;
      end;
    end;
  finally
    FreeLibrary(hModule);
  end;
end;

begin
  h:=FindWindow('IEFrame',nil);
  h:=FindWindowEx(h,0,'Shell DocObject View',nil);
  h:=FindWindowEx(h,0,'Internet Explorer_Server',nil);
  if h=0 then Exit;
  GetDocumentPtrFromWnd(h,doc);
  if doc = nil then //doc始终为空,不知为何。
  begin
     MessageBox(h, '获取失败', '提示:', MB_ICONEXCLAMATION + MB_OK);
  end;
end.

//上面的代码如果用有 窗体的WINFORM程序 的话就能成功进去获取成功。
//但是如果和现在编译 控制台 或 DLL 的话就死活不成功,实在不解啊,求各位帮帮忙,谢谢了!

//救命 - Delphi控制台或DLL编译的话就失败,如果用窗体的话就成功,实在不理解,帮帮忙!(TObjectFromLResult)


[ 本帖最后由 qq1172527602 于 2012-11-16 22:59 编辑 ]
搜索更多相关主题的帖子: 控制台 Windows 
2012-11-16 22:57
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:20 
路过  嘿嘿

DO IT YOURSELF !
2012-11-17 07:53
qq1172527602
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2012-11-16
收藏
得分:0 
原来操作com对象前要初始化com组件库。

解决方法如下:

程序代码:
begin
  CoInitialize(nil);
  try
    h:=.....
    这里是你那些代码.
  finally
    CoUninitialize();
  end;
end.


谢谢各位朋友的关注,结贴。
2012-11-17 12:55
快速回复:救命 - Delphi控制台或DLL编译的话就失败,如果用窗体的话就成功,实在 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018281 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved