我要调用QQ里的抓图工具CameraDll.all 里的CameraSubArea函数批处理做的执行文件是
rund32.exe cameradll.dll camerasubarea
这是别人用C语言写的              strcpy(m_szCommand, szTempPath); 
              strcat(m_szCommand, _T(" CameraSubArea")); 
      LRESULT OnHotKey(UINT, WPARAM, LPARAM, BOOL&) 
      { 
              ShellExecute(NULL, "open", "rundll32.exe", m_szCommand,NULL, NULL); 
              return 0; 
      } 他是先把cameradll.dll存到系统临时文件夹里,然后调用的.
如果用delphi做,代码要怎么写?

解决方案 »

  1.   

    procedure CameraSubArea(hWindow: HWND; hInst: THandle;
      lpszCmdLine: PChar; nCmdShow: Integer); stdcall; external 'CameraDll.dll';
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      CameraSubArea(Handle, HInstance, nil, SW_SHOWNORMAL);
    end;
    把CameraDll.dll拷贝到跟你的exe在一个目录或者Window、System32的目录下,用CameraSubArea(Handle, HInstance, nil, SW_SHOWNORMAL);来调用就行了。
      

  2.   

    感谢Lake_CX的回答,我试了这个代码,但是抓完图后,程序报错,用画图粘贴下,图是抓到了,这报错怎么解决啊
    我这样做的
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      try
       CameraSubArea(Handle, HInstance, nil, SW_SHOWNORMAL);
      except
       free;
       end;
    end;但是程序会自动关闭
      

  3.   

    那你把CameraSubArea(Handle, HInstance, nil, SW_SHOWNORMAL);
    换成CameraSubArea(Handle, HInstance, '', SW_SHOWNORMAL);
    试试
      

  4.   

    procedure CameraSubArea(hWindow: HWND; hInst: THandle;
      lpszCmdLine: PChar; nCmdShow: Integer); stdcall; external 'CameraDll.dll';
    换成
    procedure CameraSubArea(hWindow: HWND; hInst: THandle;
      lpszCmdLine: PChar; nCmdShow: Integer); cdecl; external 'CameraDll.dll';CameraSubArea(Handle, HInstance, nil, SW_SHOWNORMAL);
    换成
    CameraSubArea(Handle, GetModuleHandle('CameraDll.dll'), nil, SW_RESTORE);
      

  5.   

    报错依旧,你可以把'CameraDll.dll'拷过来试试你看看用这个方法可不可以
    ShellExecute(NULL, "open", "rundll32.exe", m_szCommand,NULL, NULL);