от exe във формат за linux?

jooorooo

Registered
1-во се извинявам ако не е за тук темата :oops:
и сега към въпроса. значи имам едно exe имам му и сорса, дали моце да се преправи за линукс?

много е полезно в комбинация с един php скрипт :)

ето ми сорса

Код:
////////////////////////////////////////////////////////////////////
//
// IECapt - A Internet Explorer Web Page Rendering Capture Utility
//
// Copyright (C) 2003-2006 Bjoern Hoehrmann <bjoern@hoehrmann.de>
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// $Id: IECapt.cpp,v 1.5 2006/11/06 15:57:30 hoehrmann Exp $
//
////////////////////////////////////////////////////////////////////

#define VC_EXTRALEAN
#include <stdlib.h>
#include <windows.h>
#include <mshtml.h>
#include <exdispid.h>
#include <atlbase.h>
#include <atlwin.h>
#include <atlcom.h>
#include <atlhost.h>
#include <atlimage.h>
#undef VC_EXTRALEAN

class CMain;
class CEventSink;

//////////////////////////////////////////////////////////////////
// CEventSink
//////////////////////////////////////////////////////////////////
class CEventSink :
    public CComObjectRootEx <CComSingleThreadModel>,
    public IDispatch
{
public:
    CEventSink() : m_pMain(NULL) {}

public:

    BEGIN_COM_MAP(CEventSink)
        COM_INTERFACE_ENTRY(IDispatch)
        COM_INTERFACE_ENTRY_IID(DIID_DWebBrowserEvents2, IDispatch)
    END_COM_MAP()

    STDMETHOD(GetTypeInfoCount)(UINT* pctinfo);
    STDMETHOD(GetTypeInfo)(UINT itinfo, LCID lcid, ITypeInfo** pptinfo);
    STDMETHOD(GetIDsOfNames)(REFIID riid, LPOLESTR* rgszNames, UINT cNames, LCID lcid, DISPID* rgdispid);
    STDMETHOD(Invoke)(DISPID dispid, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS* pdispparams,
                      VARIANT* pvarResult, EXCEPINFO* pexcepinfo, UINT* puArgErr);

public:
    CMain* m_pMain;
};

//////////////////////////////////////////////////////////////////
// CMain
//////////////////////////////////////////////////////////////////
class CMain :
    public CWindowImpl <CMain>
{
public:

    CMain() : m_dwCookie(0) { }

public:

    BEGIN_MSG_MAP(CMainWindow)
        MESSAGE_HANDLER(WM_CREATE,  OnCreate)
        MESSAGE_HANDLER(WM_SIZE,    OnSize)
        MESSAGE_HANDLER(WM_DESTROY, OnDestroy)
    END_MSG_MAP()

public:

    LRESULT OnCreate  (UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
    LRESULT OnSize    (UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
    LRESULT OnDestroy (UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);

public:

    BOOL SaveSnapshot(IDispatch* pdisp, VARIANT* purl);

public:
    LPCSTR m_URI;
    LPCSTR m_fileName;

protected:
    CComPtr<IUnknown> m_pWebBrowserUnk;
    CComPtr<IWebBrowser2> m_pWebBrowser;
    CComObject<CEventSink>* m_pEventSink;
    HWND m_hwndWebBrowser;
    DWORD m_dwCookie;
};

//////////////////////////////////////////////////////////////////
// Implementation of CEventSink
//////////////////////////////////////////////////////////////////
STDMETHODIMP CEventSink::GetTypeInfoCount(UINT* pctinfo)
{
    return E_NOTIMPL;
}

STDMETHODIMP CEventSink::GetTypeInfo(UINT itinfo, LCID lcid,
                                     ITypeInfo** pptinfo)
{
    return E_NOTIMPL;
}

STDMETHODIMP CEventSink::GetIDsOfNames(REFIID riid, LPOLESTR* rgszNames,
                                       UINT cNames, LCID lcid,
                                       DISPID* rgdispid)
{
    return E_NOTIMPL;
}

STDMETHODIMP CEventSink::Invoke(DISPID dispid, REFIID riid, LCID lcid,
                                WORD wFlags, DISPPARAMS* pdispparams,
                                VARIANT* pvarResult, EXCEPINFO* pexcepinfo,
                                UINT* puArgErr)
{
    if (dispid != DISPID_DOCUMENTCOMPLETE)
        return S_OK;

    if (pdispparams->cArgs != 2)
        return S_OK;

    if (pdispparams->rgvarg[0].vt != (VT_VARIANT | VT_BYREF))
        return S_OK;

    if (pdispparams->rgvarg[1].vt != VT_DISPATCH)
        return S_OK;

    if (m_pMain->SaveSnapshot(pdispparams->rgvarg[1].pdispVal,
                              pdispparams->rgvarg[0].pvarVal))
        m_pMain->PostMessage(WM_CLOSE);

    return S_OK;
}

//////////////////////////////////////////////////////////////////
// Implementation of CMain Messages
//////////////////////////////////////////////////////////////////
LRESULT CMain::OnCreate(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
    HRESULT hr;
    RECT old;
    IUnknown * pUnk = NULL;
    GetClientRect(&old);

    m_hwndWebBrowser = ::CreateWindow(_T(ATLAXWIN_CLASS), m_URI,
        /*WS_POPUP|*/WS_CHILD|WS_DISABLED, old.top, old.left, old.right,
        old.bottom, m_hWnd, NULL, ::GetModuleHandle(NULL), NULL);

    hr = AtlAxGetControl(m_hwndWebBrowser, &m_pWebBrowserUnk);

    if (FAILED(hr))
        return 1;

    if (m_pWebBrowserUnk == NULL)
        return 1;

    hr = m_pWebBrowserUnk->QueryInterface(IID_IWebBrowser2, (void**)&m_pWebBrowser);

    if (FAILED(hr))
        return 1;

    hr = CComObject<CEventSink>::CreateInstance(&m_pEventSink);

    if (FAILED(hr))
        return 1;

    m_pEventSink->m_pMain = this;

    hr = AtlAdvise(m_pWebBrowserUnk, m_pEventSink->GetUnknown(),
                   DIID_DWebBrowserEvents2, &m_dwCookie);

    if (FAILED(hr))
        return 1;

    return 0;
}


LRESULT CMain::OnSize(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
    if (m_hwndWebBrowser != NULL)
        ::MoveWindow(m_hwndWebBrowser, 0, 0, LOWORD(lParam), HIWORD(lParam), TRUE);

    return 0;
}

LRESULT CMain::OnDestroy(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
    HRESULT hr;

    if (m_dwCookie != 0)
        hr = AtlUnadvise(m_pWebBrowserUnk, DIID_DWebBrowserEvents2, m_dwCookie);

    m_pWebBrowser.Release();
    m_pWebBrowserUnk.Release();

    PostQuitMessage(0);

    return 0;
}

//////////////////////////////////////////////////////////////////
// Implementation of CMain::SaveSnapshot
//////////////////////////////////////////////////////////////////
BOOL CMain::SaveSnapshot(IDispatch* pdisp, VARIANT* purl)
{
        IHTMLDocument3* pDocument3 = NULL;
        IHTMLDocument2* pDocument  = NULL;
        IHTMLElement2* pElement2   = NULL;
        IHTMLElement* pElement     = NULL;
        IViewObject2* pViewObject  = NULL;
        IDispatch* pDispatch       = NULL;
        IDispatch* pWebBrowserDisp = NULL;

        HRESULT hr;
        long bodyHeight;
        long bodyWidth;
        long rootHeight;
        long rootWidth;
        long height;
        long width;

        hr = m_pWebBrowser->get_Document(&pDispatch);

        if (FAILED(hr))
            return true;

        hr = m_pWebBrowserUnk->QueryInterface(IID_IDispatch, (void**)&pWebBrowserDisp);

        if (FAILED(hr))
            return true;

        if (pWebBrowserDisp != pdisp)
        {
            pWebBrowserDisp->Release();
            return false;
        }

        hr = pDispatch->QueryInterface(IID_IHTMLDocument2, (void**)&pDocument);

        if (FAILED(hr))
            return true;

        hr = pDocument->get_body(&pElement);

        if (FAILED(hr))
            return true;

        hr = pElement->QueryInterface(IID_IHTMLElement2, (void**)&pElement2);

        if (FAILED(hr))
            return true;

        hr = pElement2->get_scrollHeight(&bodyHeight);

        if (FAILED(hr))
            return true;

        hr = pElement2->get_scrollWidth(&bodyWidth);

        if (FAILED(hr))
            return true;

        hr = pDispatch->QueryInterface(IID_IHTMLDocument3, (void**)&pDocument3);

        if (FAILED(hr))
            return true;

        hr = pDocument3->get_documentElement(&pElement);

        if (FAILED(hr))
            return true;

        hr = pElement->QueryInterface(IID_IHTMLElement2, (void**)&pElement2);

        if (FAILED(hr))
            return true;

        hr = pElement2->get_scrollHeight(&rootHeight);

        if (FAILED(hr))
            return true;

        hr = pElement2->get_scrollWidth(&rootWidth);

        if (FAILED(hr))
            return true;

        width = bodyWidth;
        height = rootHeight > bodyHeight ? rootHeight : bodyHeight;

        MoveWindow(0, 0, width, height, TRUE);      
        ::MoveWindow(m_hwndWebBrowser, 0, 0, width, height, TRUE);

        hr = m_pWebBrowser->QueryInterface(IID_IViewObject2, (void**)&pViewObject);

        if (FAILED(hr))
            return true;

        BITMAPINFOHEADER bih;
        BITMAPINFO bi;
        RGBQUAD rgbquad;

        ZeroMemory(&bih, sizeof(BITMAPINFOHEADER));
        ZeroMemory(&rgbquad, sizeof(RGBQUAD));

        bih.biSize          = sizeof(BITMAPINFOHEADER);
        bih.biWidth         = width;
        bih.biHeight        = height;
        bih.biPlanes        = 1;
        bih.biBitCount      = 24;
        bih.biClrUsed       = 0;
        bih.biSizeImage     = 0;
        bih.biCompression   = BI_RGB;
        bih.biXPelsPerMeter = 0;
        bih.biYPelsPerMeter = 0;

        bi.bmiHeader = bih;
        bi.bmiColors[0] = rgbquad;

        HDC hdcMain = GetDC();

        if (!hdcMain)
            return true;

        HDC hdcMem = CreateCompatibleDC(hdcMain);

        if (!hdcMem)
            return true;

        char* bitmapData = NULL;
        HBITMAP hBitmap = CreateDIBSection(hdcMain, &bi, DIB_RGB_COLORS, (void**)&bitmapData, NULL, 0);

        if (!hBitmap) {
            // TODO: cleanup
            return true;
        }

        SelectObject(hdcMem, hBitmap);

        RECTL rcBounds = { 0, 0, width, height };
        hr = pViewObject->Draw(DVASPECT_CONTENT, -1, NULL, NULL, hdcMain,
                               hdcMem, &rcBounds, NULL, NULL, 0);

        if (SUCCEEDED(hr))
        {
            CImage image;
            image.Create(width, height, 24);
            CImageDC imageDC(image);
            ::BitBlt(imageDC, 0, 0, width, height, hdcMem, 0, 0, SRCCOPY);
            image.Save(m_fileName);
        }

        DeleteObject(hBitmap);
        DeleteDC(hdcMem);

        pViewObject->Release();
        pWebBrowserDisp->Release();

        return true;
}

static const GUID myGUID = { 0x445c10c2, 0xa6d4, 0x40a9, { 0x9c, 0x3f, 0x4e, 0x90, 0x42, 0x1d, 0x7e, 0x83 } };
static CComModule _Main;

int main (int argc, char *argv[])
{
    if (argc != 3)
    {
        printf("Usage: %s http://www.example.org/ localfile.png\n", argv[0]);
        return EXIT_FAILURE;
    }
    
    HRESULT hr = _Main.Init(NULL, ::GetModuleHandle(NULL), &myGUID);

    if (FAILED(hr))
        return EXIT_FAILURE;

    if (!AtlAxWinInit())
        return EXIT_FAILURE;

    CMain MainWnd;

    MainWnd.m_URI = argv[1];
    MainWnd.m_fileName = argv[2];
    RECT rcMain = { 0, 0, 800, 600 };
    MainWnd.Create(NULL, rcMain, _T("IECapt"), WS_POPUP);

    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0)) 
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    _Main.Term();

    return EXIT_SUCCESS;
}
 

Горе