• ベストアンサー

C# FTPサーバ アイコン取得

FTPサーバからファイル名とアイコンを取得してListViewに表示させたいのですが アイコンの取得がうまくいきません。ファイル名のみは出来ました。 SHGetFileInfo("ftp://localhost/test.txt", 0, ref shinfo, (uint)Marshal.SizeOf(shinfo), SHGFI_ICON | SHGFI_LARGEICON); みたいな感じで取得できないかと試してみましたが駄目でした。 詳しい方ご教授お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

そもそもテキスト ファイルにアイコンのリソースは含まれていない。 アイコンのリソースは exe や dll に含めるもの。 アイコンを含んでいないファイルのアイコンは、そのファイルを表示しようとしているクライアント側の都合で決定される。 Windows 標準のメモ帳を使っているクライアントならメモ帳のアイコンだろうし、何等かのテキスト エディタを導入しているクライアントならそのエディタが PC に登録したアイコンで表示される。

関連するQ&A

  • SHGetFileInfoでアイコンが取得できない場合がある

    VC++にてエクスプローラもどきを作成しています。 ListViewへファイルアイコンを表示するために、 SHGetFileInfoを使用し、 // 大きいアイコンのハンドル取得 // fnameは拡張子だけの文字列です SHGetFileInfo( fname, NULL, &shfInfo, sizeof(SHFILEINFO), SHGFI_ICON | SHGFI_LARGEICON | SHGFI_USEFILEATTRIBUTES ); licon = shfInfo.hIcon; 上記のようにしてファイルアイコンを取得し、 CImageListへ追加した上で、描画しています。 そして、ダイアログのサイズが変更された際に、 OnSize関数にて、ListView内のアイコンを再度取得し、 再描画しているのですが、 何度もOnSizeで再描画を行っているうちに、 SHGetFileInfoにて取得したshfInfo.hIconが NULLになってしまいます。 一度、shfInfo.hIconがNULLになると、 何度、SHGetFileInfoを呼んでも、返ってくるhIconは 毎回NULLになってしまい、ListView内に アイコンが表示されません。 SHGetFileInfo関数を呼ぶ際の制約等があるのでしょうか?

  • ファイルに関連付けられているアイコンについて

    ファイルに関連付けられているアイコン取得について質問です。 開発環境 OS:XP Visual Studio 2005 言語:C、C++ 調べると、SHGetFileInfo()を使ってアイコンを 取得出来るらしいのですが、 取得するアイコンではなく違うアイコンが取得(表示)されます。 架空のファイル名(実際にないファイル名)でやってみると、 同じアイコンが取得(表示)されます。 ●ソース ーーーーーーーーーーーーーーーーー //アイコン取得部分 SHGetFileInfo("C:/WINDOWS/notepad.exe", 0, &icon, sizeof(icon), SHGFI_PIDL | SHGFI_ICON | SHGFI_SMALLICON); //アイコン表示部分 DrawIcon(hdc, 10, 10, icon.hIcon); ーーーーーーーーーーーーーーーーー SHGetFileInfo()の戻り値は、「1」でした。 間違っている所があるのでしょうか?

  • C#でウィンドウのアイコン取得する方法

    タスクマネージャのアプリケーションタブに 起動しているアプリケーション名とアイコンが一覧で表示されている部分のように 小さいアイコンを取得したいんですがなかなかうまくいきません。 ファイルに紐付くアイコンと解釈していただいても構いません。 とりあえず、下記のWin32 APIの処理を利用してみましたが SHGetFileInfoだけしかうまくいきませんでした。 しかし、SHGetFileInfoも、アイコンは取得できますがこれはファイルに紐付くアイコンではなく 実行体(EXE)に紐付くアイコンで表示されてしまいました。 開いているウィンドウ情報からだと実行プロセスのEXEのパスしか分からないからです。 ★質問★: ファイルに紐付く小さいアイコンの取得方法を教えてください!できればサンプルソース込みだと助かります。 #region 小さいアイコンを取得するためのWin32 API(ファイルパスから) // SHGetFileInfo関数 [DllImport("shell32.dll")] private static extern IntPtr SHGetFileInfo( string pszPath, uint dwFileAttributes, ref SHFILEINFO psfi, uint cbSizeFileInfo, uint uFlags); // SHGetFileInfo関数で使用するフラグ private const uint SHGFI_ICON = 0x100; // アイコン・リソースの取得 private const uint SHGFI_LARGEICON = 0x0; // 大きいアイコン private const uint SHGFI_SMALLICON = 0x1; // 小さいアイコン private const uint SHGFI_TYPENAME = 0x400;//ファイルの種類 // SHGetFileInfo関数で使用する構造体 private struct SHFILEINFO { public IntPtr hIcon; public IntPtr iIcon; public uint dwAttributes; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)] public string szDisplayName; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)] public string szTypeName; }; #endregion #region 小さいアイコンを取得するためのWin32 API(ウィンドウハンドルからその1) [DllImport("user32.dll", EntryPoint = "GetClassLong")] public static extern IntPtr GetClassLongPtr32(IntPtr hWnd, int nIndex); [DllImport("user32.dll", EntryPoint = "GetClassLongPtr")] public static extern IntPtr GetClassLongPtr64(IntPtr hWnd, int nIndex); const int GCL_HICON = (-14); const int GCL_HICONSM = (-34); #endregion #region 小さいアイコンを取得するためのWin32 API(ウィンドウハンドルからその2) [DllImport("User32.dll", EntryPoint = "SendMessage")] public static extern IntPtr SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam); public const int WM_GETICON = 0x7F; public const int WM_SETICON = 0x80; public const int ICON_SMALL = 0; public const int ICON_BIG = 1; #endregion

  • WinAPI SHGetFileInfoでICONファイル名の取得方法?

    SHGetFileInfoでExplorerに表示されるICONのファイル名を取得したいのですが うまくいきません。 int main(int argc, char* argv[]) { SHFILEINFO sfi; ::CoInitialize(NULL); if(0 == ::SHGetFileInfo("C:\\hogehoge.txt", FILE_ATTRIBUTE_NORMAL, &sfi, sizeof(sfi), SHGFI_ICONLOCATION)) return -1; printf("Icon location file = %s\n", sfi.szDisplayName); return 0; } SHGFI_TYPENAMEを指定するとsfi.szTypeNameファイルタイプ名が入るのは確認できたのですが、SHGFI_ICONLOCATIONを指定してもsfi.szDisplayNameにアイコンファイル名が入ってくれません。(sfi.szDisplayName[0]='\0'で終わりになっている...) MSDNを見る限りはこれであっているようなのですが、正しい使い方を教えてください。

  • シェルアイコンがイメージリストに登録できない??

    Visual C++においての質問です。 APIで関連づけられたアイコンを取得したあと、イメージリストに登録しようとしてるのですが、 「不正な処理」とかで落ちてしまいます。なんか…マズい処理をやってるんでしょうか?? 大まかなソースは以下の通りです。 超初心者ですので、とんでもない間違いをしてるだけだと思うんですが…。どなたかご教授をお願いします。 CImageList IconList; CString FilePath = "C:\\test.txt"; SHFILEINFO FileInfo; IconList.Create(32,32,ILC_COLORDDB|ILC_MASK,1,1000); ::CoIntialise(NULL); SHGetFileInfo(FilePath,NULL,&FileInfo,sizeof(FileInfo),SHGFI_ICON|SHGFI_SMALLICON);

  • VBSでFTPを記述できますか?

    OSはWIN2K PROですが、 FTPサーバーより、あるファイルをGETする バッチファイルを作成しました。 ftp 172.16.1.1 get test.txt c:\temp\get.txt バッチファイルで作成したのですが、 VBSでFTPサーバーよりファイルをGETする ということは可能でしょうか? 初心者ですが、よろしくお願いいたします。

  • ftpコマンド出力結果の取得

    ftpコマンドのバッチ処理によってファイルの一覧の結果を取得したいのですが、 リダイレクション等を用いても取得できません。 どのようにすればいいか教えてください。 **************状況************* OSおよびOSレベル:AIX5.2 シェル:Kシェル コマンドファイルの中身(ftp.txt) cat << EOF | ftp -n open SERVER user USER PW cd PATH ls -l bye EOF SERVER:実際のサーバー名 USER:実際のユーザー名 PW:実際のパスワード PATH:実際のパス これを以下のように実行し、結果を取得しようとしました。 # ./cmd.ftp > log しかし、出力ファイルlogの中身はカラっぽでした。 ところが、リダイレクションを外し、コマンドファイルのみを実行すると、結果が画面に表示されます。 何故、画面には表示されるのに、リダイレクションやパイプでは結果が渡されないのかが分かりません。

  • NFSサーバーのファイルを取得する

    今、RedHat9でNFSサーバーを立ち上げました。 /etc/exportsにアクセスできるディレクトリ指定をしました。 テストのため、クライアントを同一PCとしています。 取得したいファイルを得る場合はどのようにしたらいいのでしょうか? wgetコマンドを用いてサーバーのアドレスを指定して取得したいファイルを指定する? (/etc/exports) /home/user1 クライアント側のIPアドレス(rw) 取得したいファイルがもし、 /home/user1/sample/get_1.txt の場合、 wget ftp://NFSサーバーIPアドレス/取得したいファイルのディレクトリパス 格納先 どのようにして取得したいファイルおよび格納先していを行うのかわかりません。 よろしくお願い致します。

  • エクスプローラーに表示されているきれいなアイコン

    お世話になります。 Visual Studio 2015 VB.net Window 10 Pro 上記にて開発しております。 エクスプローラーで任意のフォルダを開き、例えばそこにPDFファイルがあった場合には、きれいなアイコンで表示されています。 VB.Net のWindowsフォーム上にListViewを配置して、System.Drawing.Icon.ExtractAssociatedIcon にてファイルのアイコンイメージを取得してListViewに表示されても、なんていうか汚いアイコンしか表示できません。おそらく違う場所にあのきれいなアイコンが登録してあって呼び出し方も違うのかなと思うのですが、ご存じの方がいらっしゃいましたら何卒ご教授いただければと存じます。 (1) 同じアイコンだけどイメージの作り方が悪いから汚く表示される? (2) 違う方法で、違うアイコンがあり、それを取得すればきれいなアイコンを表示できる? (3) 上記2つ以外の方法がある? 何卒よろしくお願い申し上げます。

  • FTPサーバーに置いてあるプログラムを実行するには

    FTPサーバーに置いてあるプログラムを実行するには 例えばtest.exeというプログラムがFTpサーバーにあったとします。それを自分のPC上にあるファイルと同じように起動したりすることはできますか? 例えばjarファイルを起動するにはJREがいると思うのですが、JREがインストールされたPCからFTPサーバーにアクセスしてそのサーバー上にあるjarファイルを起動することはできますか?

専門家に質問してみよう