نمایش نتایج 1 تا 5 از 5

نام تاپیک: گرفتن نام كمپاني يك فايل

  1. #1
    کاربر دائمی آواتار hoax3r
    تاریخ عضویت
    مهر 1386
    محل زندگی
    تهران
    پست
    171

    گرفتن نام كمپاني يك فايل

    سلام

    آيا api‌ اي هست كه مشخصاتي مثل كمپاني سازنده فايل رو بشه بدست آورد
    منظورم اطلاعاتي هست كه از طريق properties گرفتن از فايل گرفته ميشه

    با تشكر

  2. #2

    نقل قول: گرفتن نام كمپاني يك فايل

    ابتدا از GetFileVersionInfo و GetFileVersionInfoSize برای گرفتن بافر داده های version استفاده کنید و سپس از VerQueryValue استفاده کنید تا خاصیت مورد نظر خود را دریافت کنید(مثلا CompanyName ).

    در MSDN مثال زیر برای گرفتن FileDescription وجود دارد، به همین شکل برای سایر خواص:

    // Structure used to store enumerated languages and code pages.

    HRESULT hr;

    struct LANGANDCODEPAGE {
    WORD wLanguage;
    WORD wCodePage;
    } *lpTranslate;

    // Read the list of languages and code pages.

    VerQueryValue(pBlock,
    TEXT("\\VarFileInfo\\Translation"),
    (LPVOID*)&lpTranslate,
    &cbTranslate);

    // Read the file description for each language and code page.

    for( i=0; i < (cbTranslate/sizeof(struct LANGANDCODEPAGE)); i++ )
    {
    hr = StringCchPrintf(SubBlock, 50,
    TEXT("\\StringFileInfo\\%04x%04x\\FileDescription"),
    lpTranslate[i].wLanguage,
    lpTranslate[i].wCodePage);
    if (FAILED(hr))
    {
    // TODO: write error handler.
    }

    // Retrieve file description for language and code page "i".
    VerQueryValue(pBlock,
    SubBlock,
    &lpBuffer,



  3. #3
    کاربر دائمی آواتار hoax3r
    تاریخ عضویت
    مهر 1386
    محل زندگی
    تهران
    پست
    171

    نقل قول: گرفتن نام كمپاني يك فايل

    ممنون بابت جوابتون، در استفاده از GetFileVersionInfoSize به مشكل برخوردم مسير هر فايلي رو كه بهش ميدم
    مقدار صفر برميگردونه در حالي كه بايد مقدار سايز بافر version رو بده

    بخشي از كد به اين صورت است:

    #include <windows.h>

    #define PATH_SIZE 512
    ...
    ...
    int main()
    {
    char filePath[PATH_SIZE];
    DWORD dwHandle;
    ...
    ...
    dwLen = GetFileVersionInfoSize(filePath, &dwHandle);

    if ( !dwLen )
    continue;

    ...
    ...
    return
    }


    مقدار filePath هم مسير فايل رو به صورت كامل به تابع ميفرسته ولي مقدار صفر برگردانده ميشود

    مثل اين مسير:

    C:\\WINDOWS\\system32\\drivers\\acpi.sys


    به نظرتون كجاي كار مشكل داره.

    با تشكر

  4. #4

    نقل قول: گرفتن نام كمپاني يك فايل

    برای من درست جواب می دهد، موارد زیر را بررسی کنید:

    - اگر خطا برای تابع داده می شود، Version.lib را به لینکر اضافه کنید.

    - در صورتی که از کامپایلر های چند سال اخیر استفاده نمی کنید، اگر مسیر را به صورت char می فرستید و پروژه را هم یونیکد کامپایل نمی کنید، از نسخه توابع + A استفاده کنید، تا مسیر اشتباه ارسال نشود.

    DWORD h = 0;

    DWORD resSize = ::GetFileVersionInfoSizeA (
    "C:\\WINDOWS\\system32\\drivers\\acpi.sys", &h);
    اگر هم پروژه یونیکد هست (پیش فرض کامپایلرهای اخیر) به شکل زیر و مسیر هم از نوع TCHAR باشد نه char :

    //or use --> TCHAR str_file = _T("C//...");

    DWORD h = 0;

    DWORD resSize = ::GetFileVersionInfoSize(
    _T
    ("C:\\WINDOWS\\system32\\drivers\\acpi.sys"), &h);
    - بعد از فراخوانی تابع GetLastError را فراخوانی کنید تا دقیق نوع خطا مشخص شود.

    مموفق باشید

  5. #5
    کاربر دائمی آواتار hoax3r
    تاریخ عضویت
    مهر 1386
    محل زندگی
    تهران
    پست
    171

    نقل قول: گرفتن نام كمپاني يك فايل

    با تشکر از شما Nima_NF و وقتی که گزاشتین، مشکلم حل شد

    شاد باشید

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •