IEのCookieを取得する方法:おかわり
昨日の続き。
InternetGetCookieEx()を実行してみたのだが、何も取れなかった。戻り値はfalse。つまり関数実行はエラーとなっているということである。C#版のGetLastError()であるMarshal.GetLastWin32Error()を実行してみたら、ブレークポイントをかけないと0、かけてチマチマ実行すると1008(ERROR_NO_TOKEN)となる。なぜ違いがでるのかわからない・・・。
Windows XP Professional上で実行してみると、InternetGetCookie()の方は、指定したURLに設定してあるCookieが(たぶん)すべて取れた。でもInternetGetCookieEx()の方は、何も取れない。
試しにWindows Vista Home Premium上で管理者権限で実行してみても、普通にVista上で実行したのとおなじ結果だった。
わけわからない。
定義は以下のようにしてみたのだが間違いがあるのだろうか?(C#)
第6引数がLPVOIDなのだけど、予約なのでnullを設定するようにとあったので、refをつけずにIntPtrにしてみた。これが悪いのか?LPVOIDをC#で使う例題ではref IntPtrだったけど、refがついているとnullは設定できないし・・・。
[DllImport("wininet.dll")]
private extern static
bool InternetGetCookieEx(string pchURL, string pchCookieName,
StringBuilder pchCookieData, ref uint pcchCookieData, uint dwFlags, IntPtr lpReserved);
enum GETCOOKIEEX_FLAGS {
INTERNET_COOKIE_THIRD_PARTY = 0x10,
INTERNET_FLAG_RESTRICTED_ZONE = 0x00020000
}
// IEが利用しているCookieを取ってくる
public string getIECookieEx(string url, String key)
{
string result = "";
StringBuilder cookieData = new StringBuilder(new String(' ', 4096), 4096);
uint size = (uint)cookieData.Length;
uint dwflag = (int)GETCOOKIEEX_FLAGS.INTERNET_COOKIE_THIRD_PARTY;
bool bResult = InternetGetCookieEx(url, key, cookieData, ref size, dwflag, (IntPtr)null);
if (size > 4096)
{
cookieData.Capacity = (int)size;
bResult = InternetGetCookieEx(url, key, cookieData, ref size, dwflag, (IntPtr)null);
}
if (bResult)
{
result = cookieData.ToString();
}
else
{
result = "ERROR[" + Marshal.GetLastWin32Error().ToString() + "]";
}
return result;
}
nico2mobileはVista上でもIEのCookieを流用できているのだから、何らかの方法でIEのCookieを取得できるはずなのだが・・・。
他の方法が見当たらない。
→2008/09/07追記:C#でCookieを取得するプログラムを作ったよ。
« IEのCookieを取得する方法 | トップページ | IEのCookieを取得する方法:おかわり 三杯目 »
bool bResult = InternetGetCookieEx(url, key, cookieData, ref size, dwflag, IntPtr.Zero);
じゃだめですか?
試してないですけど。
投稿: とーりすがり | 2008年9月24日 (水) 12時56分
ども、炬燵犬です。Vistaで試してみましたが、ダメでしたね。
まったく同じです・・・。
投稿: 炬燵犬 | 2008年9月24日 (水) 21時46分