Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как юзать RetrieveUrlCacheEntryFile? 
V
    Опции темы
nerezus
Дата 9.7.2009, 03:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 1
Всего: 43



MSDN: http://msdn.microsoft.com/en-us/library/aa385365(VS.85).aspx

Из полезного нашел только http://www.pinvoke.net/default.aspx/winine...CHE_ENTRY_INFOA
оно на неведомом мне VB.nET )


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
diadiavova
Дата 9.7.2009, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



Цитата(nerezus @  9.7.2009,  03:48 Найти цитируемый пост)
оно на неведомом мне VB.nET 

 smile Если речь о коде
Код

<StructLayout(LayoutKind.Explicit, Size:=80)> _
    Public Structure INTERNET_CACHE_ENTRY_INFOA
    <FieldOffset(0)> Public dwStructSize As UInt32
    <FieldOffset(4)> Public lpszSourceUrlName As IntPtr
    <FieldOffset(8)> Public lpszLocalFileName As IntPtr
    <FieldOffset(12)> Public CacheEntryType As UInt32
    <FieldOffset(16)> Public dwUseCount As UInt32
    <FieldOffset(20)> Public dwHitRate As UInt32
    <FieldOffset(24)> Public dwSizeLow As UInt32
    <FieldOffset(28)> Public dwSizeHigh As UInt32
    <FieldOffset(32)> Public LastModifiedTime As FILETIME
    <FieldOffset(40)> Public ExpireTime As FILETIME
    <FieldOffset(48)> Public LastAccessTime As FILETIME
    <FieldOffset(56)> Public LastSyncTime As FILETIME
    <FieldOffset(64)> Public lpHeaderInfo As IntPtr
    <FieldOffset(68)> Public dwHeaderInfoSize As UInt32
    <FieldOffset(72)> Public lpszFileExtension As IntPtr
    <FieldOffset(76)> Public dwReserved As UInt32
    <FieldOffset(76)> Public dwExemptDelta As UInt32
    End Structure


То вот выкладываю его машинный перевод
Код

using Microsoft.VisualBasic;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
[StructLayout(LayoutKind.Explicit, Size = 80)]
public struct INTERNET_CACHE_ENTRY_INFOA
{
    [FieldOffset(0)]
    public UInt32 dwStructSize;
    [FieldOffset(4)]
    public IntPtr lpszSourceUrlName;
    [FieldOffset(8)]
    public IntPtr lpszLocalFileName;
    [FieldOffset(12)]
    public UInt32 CacheEntryType;
    [FieldOffset(16)]
    public UInt32 dwUseCount;
    [FieldOffset(20)]
    public UInt32 dwHitRate;
    [FieldOffset(24)]
    public UInt32 dwSizeLow;
    [FieldOffset(28)]
    public UInt32 dwSizeHigh;
    [FieldOffset(32)]
    public FILETIME LastModifiedTime;
    [FieldOffset(40)]
    public FILETIME ExpireTime;
    [FieldOffset(48)]
    public FILETIME LastAccessTime;
    [FieldOffset(56)]
    public FILETIME LastSyncTime;
    [FieldOffset(64)]
    public IntPtr lpHeaderInfo;
    [FieldOffset(68)]
    public UInt32 dwHeaderInfoSize;
    [FieldOffset(72)]
    public IntPtr lpszFileExtension;
    [FieldOffset(76)]
    public UInt32 dwReserved;
    [FieldOffset(76)]
    public UInt32 dwExemptDelta;
}



Просмотрел бегло, вроде правильно, если какие-то юзинги окажутся ненужными можешь смело удалить smile 


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
nerezus
Дата 9.7.2009, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 1
Всего: 43



Цитата

Warning 'System.Runtime.InteropServices.FILETIME' is obsolete: 'Use System.Runtime.InteropServices.ComTypes.FILETIME instead. http://go.microsoft.com/fwlink/?linkid=14202'

По ссылке редирект, на главную перекидывает.
Если нписать public System.Runtime.InteropServices.ComTypes.FILETIME LastSyncTime; то варнинга нет, но... как-то некрасиво.


Заходим IE на ya.ru, потом:

Код

[StructLayout(LayoutKind.Explicit, Size = 80)]
    public struct INTERNET_CACHE_ENTRY_INFOA
    {
        [FieldOffset(0)]
        public UInt32 dwStructSize;
        [FieldOffset(4)]
        public IntPtr lpszSourceUrlName;
        [FieldOffset(8)]
        public IntPtr lpszLocalFileName;
        [FieldOffset(12)]
        public UInt32 CacheEntryType;
        [FieldOffset(16)]
        public UInt32 dwUseCount;
        [FieldOffset(20)]
        public UInt32 dwHitRate;
        [FieldOffset(24)]
        public UInt32 dwSizeLow;
        [FieldOffset(28)]
        public UInt32 dwSizeHigh;
        [FieldOffset(32)]
        public System.Runtime.InteropServices.ComTypes.FILETIME LastModifiedTime;
        [FieldOffset(40)]
        public System.Runtime.InteropServices.ComTypes.FILETIME ExpireTime;
        [FieldOffset(48)]
        public System.Runtime.InteropServices.ComTypes.FILETIME LastAccessTime;
        [FieldOffset(56)]
        public System.Runtime.InteropServices.ComTypes.FILETIME LastSyncTime;
        [FieldOffset(64)]
        public IntPtr lpHeaderInfo;
        [FieldOffset(68)]
        public UInt32 dwHeaderInfoSize;
        [FieldOffset(72)]
        public IntPtr lpszFileExtension;
        [FieldOffset(76)]
        public UInt32 dwReserved;
        [FieldOffset(76)]
        public UInt32 dwExemptDelta;
    }

    [DllImport("Wininet.dll", CharSet = CharSet.Unicode)]
    public static extern bool RetrieveUrlCacheEntryFile(
        String lpszUrlName,
        INTERNET_CACHE_ENTRY_INFOA lpCacheEntryInfo,
        UIntPtr lpcbCacheEntryInfo,
        UInt32 dwReserved
    );


Код

String src = "http://ya.ru/logo.png";
UIntPtr einfo = new UIntPtr(80);
INTERNET_CACHE_ENTRY_INFOA cache = new INTERNET_CACHE_ENTRY_INFOA();
RetrieveUrlCacheEntryFile(src, cache, einfo, 0);
MessageBox.Show(cache.lpszLocalFileName.ToString());


Что-то 0 в ответе... где-то трабл =\


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
diadiavova
Дата 9.7.2009, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



Во-первых obsolete - не проблема, это означает, что сейчас для этих же целей используется другой тип, но этот поддерживается для совместимости версий. Им смело можно пользоваться.
А во-вторых...почему не красиво то? Можно юзинг соответствующий добавить если надо, но там правда конфликт может получиться, ну тогда псевдоним
Код

using ComTypes = System.Runtime.InteropServices.ComTypes;

Тогда объявляй так
Код

public ComTypes.FILETIME LastModifiedTime;

Если так красивее ессно smile 


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
nerezus
Дата 9.7.2009, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 1
Всего: 43



Поправил длинные неймспейсы.
Но основная проблема с функцией. В отладчике там все пусто, почти везде null. Может я описал ее неправильными типами?


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
diadiavova
Дата 9.7.2009, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



Ну я так понимаю, если ты создаёшь структуру, то её полям надо какие-то значения передавать. Соответственно надо знать какие и всё такое. Я об этой функции вообще ничего не знаю. Возможно твою проблему вообще иначе решить можно. 
Цитата(nerezus @  9.7.2009,  00:55 Найти цитируемый пост)
Как картинку из куков достать через эту апи в сишарпе?

Вот этого я честно говоря не понял, что значит картинку из куков. Куки вроде как текстовый файл.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Любитель
Дата 9.7.2009, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 11
Всего: 92



Код

    [DllImport("Wininet.dll", CharSet = CharSet.Unicode)]
    public static extern bool RetrieveUrlCacheEntryFile(
        String lpszUrlName,
        INTERNET_CACHE_ENTRY_INFOA lpCacheEntryInfo,
        UIntPtr lpcbCacheEntryInfo,
        UInt32 dwReserved
    );


В оригинале - указатель на INTERNET_CACHE_ENTRY_INFOA, разве он не через out в подобных случаях должен маршалится?


--------------------
PM MAIL ICQ Skype   Вверх
nerezus
Дата 9.7.2009, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 1
Всего: 43



Цитата

Вот этого я честно говоря не понял, что значит картинку из куков. Куки вроде как текстовый файл.
 Из кэша конечно же) Извиняюсь, 38.5 температура, головане варит (

Мне надо получить содержимое картинки со страницы. Может можно массив байт как-то получить? Как-то область изображения только если захватить...
Способ через скачивание по адресу исключен - содержимое картинки динамическое.

Цитата

В оригинале - указатель на INTERNET_CACHE_ENTRY_INFOA, разве он не через out в подобных случаях должен маршалится?
  smile 


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
Любитель
Дата 9.7.2009, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 11
Всего: 92



Код

out INTERNET_CACHE_ENTRY_INFOA lpCacheEntryInfo, // вместо просто INTERNET_CACHE_ENTRY_INFOA lpCacheEntryInfo,



--------------------
PM MAIL ICQ Skype   Вверх
diadiavova
Дата 9.7.2009, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



Любитель, чойт я теперь не догнал, если функция определена так
Код

BOOLAPI RetrieveUrlCacheEntryFile(
  __in     LPCTSTR lpszUrlName,
  __out    LPINTERNET_CACHE_ENTRY_INFO lpCacheEntryInfo,
  __inout  LPDWORD lpcbCacheEntryInfo,
  __in     DWORD dwReserved
);

То в шарпе логично описать её так
Код

    [DllImport("Wininet.dll", CharSet = CharSet.Unicode)]
    public static extern bool RetrieveUrlCacheEntryFile(
        String lpszUrlName,
        out INTERNET_CACHE_ENTRY_INFOA lpCacheEntryInfo,
        ref UIntPtr lpcbCacheEntryInfo,
        UInt32 dwReserved
    );

Или я не догнал чойт? smile

Добавлено через 2 минуты и 23 секунды
Всего-то на каких-то 15 минут опоздал smile 


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
nerezus
Дата 9.7.2009, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 1
Всего: 43



Спасибо, заработало.
А как получить значение по указателю?
Указатель на строку.

.ToString() просто превращает число в строку с числом.


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
diadiavova
Дата 9.7.2009, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



По-моему через
System.Runtime.InteropServices.Marshal.PtrToString...
Там несколько таких методов, найди тот что тебе подойдёт


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
nerezus
Дата 9.7.2009, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 1
Всего: 43



Код

using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
using ComTypes = System.Runtime.InteropServices.ComTypes;

public class WebBrowserTools
{
    [StructLayout(LayoutKind.Explicit, Size = 80)]
    public struct INTERNET_CACHE_ENTRY_INFOA
    {
        [FieldOffset(0)]
        public UInt32 dwStructSize;
        [FieldOffset(4)]
        public IntPtr lpszSourceUrlName;
        [FieldOffset(8)]
        public IntPtr lpszLocalFileName;
        [FieldOffset(12)]
        public UInt32 CacheEntryType;
        [FieldOffset(16)]
        public UInt32 dwUseCount;
        [FieldOffset(20)]
        public UInt32 dwHitRate;
        [FieldOffset(24)]
        public UInt32 dwSizeLow;
        [FieldOffset(28)]
        public UInt32 dwSizeHigh;
        [FieldOffset(32)]
        public ComTypes.FILETIME LastModifiedTime;
        [FieldOffset(40)]
        public ComTypes.FILETIME ExpireTime;
        [FieldOffset(48)]
        public ComTypes.FILETIME LastAccessTime;
        [FieldOffset(56)]
        public ComTypes.FILETIME LastSyncTime;
        [FieldOffset(64)]
        public IntPtr lpHeaderInfo;
        [FieldOffset(68)]
        public UInt32 dwHeaderInfoSize;
        [FieldOffset(72)]
        public IntPtr lpszFileExtension;
        [FieldOffset(76)]
        public UInt32 dwReserved;
        [FieldOffset(76)]
        public UInt32 dwExemptDelta;
    }

    [DllImport("Wininet.dll", CharSet = CharSet.Unicode)]
    public static extern bool RetrieveUrlCacheEntryFile(
        String lpszUrlName,
        out INTERNET_CACHE_ENTRY_INFOA lpCacheEntryInfo,
        ref UIntPtr lpcbCacheEntryInfo,
        UInt32 dwReserved
    );

    public static string GetCacheFileByUrl(string src) {
        UIntPtr einfo = new UIntPtr(80);
        INTERNET_CACHE_ENTRY_INFOA cache = new INTERNET_CACHE_ENTRY_INFOA();
        RetrieveUrlCacheEntryFile(src, out cache, ref einfo, 0);
        string filename = Marshal.PtrToStringAnsi(cache.lpszLocalFileName);
        return filename;
    }

}




Вот класс-хелпер в итоге вышел.
WebBrowserTools.GetCacheFileByUrl(адрес)


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.1142 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.