• 締切済み

ドラッグアンドドロップでHTMLファイル上の画像ファイルのパスを取得

IEなどのブラウザに表示されたHTMLファイル上の画像ファイル(jpeg or gif)を ドラッグアンドドロップして、画像ファイルのWeb上のパスを得たいと考えています。 現在、以下コードで試していますが、PCに保存されたローカルパス+ファイル名が 帰ってきます。なんとかして画像ファイルのWeb上のパスを取得できないでしょうか。 【例】http://www.abc.co.jp/aaa.jpgなど こちらの環境はWindowsXP HomeEdition + C++ builder6 proです。 //Dropの設定 DragAcceptFiles(Handle,true); //--------------------------------------------------------------------------- void __fastcall TForm2::DropFiles(TWMDropFiles inMsg) { char fName[255]; int Count = DragQueryFile((HDROP)inMsg.Drop,0xffffffffF, fName, 255); //Dropされたファイル名を得る for(int i=0;i<Count;i++){ DragQueryFile((HDROP)inMsg.Drop,i,fName,255); ListBox1->Items->Add(fName); } DragFinish((HDROP)inMsg.Drop); } 宜しくお願いいたします。

みんなの回答

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.1

★アドバイス ・回答が付いていないようなのでちょっとだけアドバイスします。  IE などのリンクからドラッグ&ドロップしてリンク文字列などを取得する方法は  『OLE ドラッグ&ドロップ』で実現できると思います。COleDropTarget() など。 ・『OLE ドラッグ&ドロップ』キーワードでネット検索するとサンプルが見つかります。  例えば  http://www5.plala.or.jp/atata/com/chap7.html→『IDropTargetとOLEドラッグ&ドロップ』  とか。あと同じような質問が別の掲示板であったので貼り付けておきます。でも HSP です。  http://fs-cgi-basic01.freespace.jp/~hsp/ver3/hsp3.cgi?print+200601/06010010.txt ・ちなみに DragQueryFile() 関数でのドラッグ&ドロップでは IE などの画像リンクを  取得できません。これを実現させるには COM の COleDropTarget() です。 ・以上。

toshi_yn
質問者

お礼

早速のアドバイスありがとうございます。 『OLE ドラッグ&ドロップ』で早速調べてみます。 永遠の初心者には少しハードルが高そうですが頑張ってみます。 ありがとうございました。

関連するQ&A

  • VC++でドラッグドロップ

    いつもお世話になっております。 今回はドラッグ&ドロップについてお聞きしたいです。 リストボックスにフォルダをドラッグしてそのフォルダの中身を リストに表示するというものを作りたく、ネットでいろいろ調べた所 以下のように作りました。 ResourceViewでドロップドラッグを許可にチェックを入れる case WM_CREATE:   DragAcceptFiles(::GetDlgItem(hWnd, IDC_LIST1), TRUE);   return TRUE; case WM_DROPFILES:   { // ドロップされた内容を取得   hdrop = (HDROP)wParam;   DWORD dwSize;   CHAR szPath[MAX_PATH+1];   ZeroMemory(szPath, sizeof(szPath));   int num = ::DragQueryFile(hdrop, -1, NULL, 0);   for (int i = 0; i < num; i++);{     dwSize = ::DragQueryFile(hdrop , i, szPath, MAX_PATH+1);     if (dwSize <= 0) //取得失敗     {       return FALSE;     }     else{ //以下にszPathから中身を表示させる処理 ・・・} 以上のようにするとドラッグしたファイルの数は 正しく取得しているのですがファイル名を得る関数部分で 1.i=0としているのに、最初からi=numの数になってしまう 2.二つ目のDragQueryFileのiを1にしても戻値(ファイル名のサイズ)は 0となって取得していない となってしまいます。 なぜこのようになってしまうのか、ご教授願います。 環境はVisual C++6.0 OSは windowsXP SP2です

  • CListCtrlに表示している複数ファイルを他アプリへドラッグ&ドロップするには

    CListCtrlに表示している複数ファイルを他アプリへドラッグ&ドロップするソースに手間取っていますのでご教授をお願いします。 (VC++ 6.0のサンプルコードがあまりなくて) なんとか、1つのファイルはできるようになったのですが複数にするやり方がわかりません。 どのようにすればよいでしょうか? また、おかしい箇所などありましたら合わせてお願いします。 ※単純の繋げるだけじゃないんですよね?※ CString fname = "C:\\aaa.txt"; fname += "C:\\bbb.txt"; -環境- ・VC++ 6.0 ・MFC ・ダイアログベース -ソース- void aaaDlg::OnBegindragListView(NMHDR* pNMHDR, LRESULT* pResult) { NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; // TODO: この位置にコントロール通知ハンドラ用のコードを追加してください if(pNMListView->iItem != -1) { CString fname = "C:\\aaa.txt"; // 動作確認のため固定 HDROP hptr = DragCreateFiles(fname); if (hptr == NULL) { *pResult = 0; return; } m_DropData.CacheGlobalData(CF_HDROP, hptr); CRect rect(0,0,0,0); DROPEFFECT effect = m_DropData.DoDragDrop(DROPEFFECT_COPY, rect); } *pResult = 0; } static HDROP DragCreateFiles (LPCSTR fname) { HDROP hDrop; LPDROPFILES lpDropFileStruct; // Allocate dynamic memory for the DROPFILESTRUCT data // structure and for the extra zero-character identifying // that there are no pathnames in the block yet. int flen = lstrlen(fname); hDrop = (HDROP)GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT, sizeof(DROPFILES) + flen + 2); // If unsuccessful, return NULL if (hDrop == NULL) return(hDrop); // Lock block and initialize the data members lpDropFileStruct = (LPDROPFILES) GlobalLock(hDrop); memset(lpDropFileStruct,0,sizeof(DROPFILES) + flen + 2); lpDropFileStruct->pFiles = sizeof(DROPFILES); lpDropFileStruct->pt.x = 0; lpDropFileStruct->pt.y = 0; lpDropFileStruct->fNC = FALSE; lpDropFileStruct->fWide = FALSE; char* szPathA = (char*) (&lpDropFileStruct[1]); lstrcpy(szPathA,fname); // Unlock the block and return its handle. GlobalUnlock(hDrop); return(hDrop); }

  • ドラッグ&ドロップの極意

    CreateWindow で作成されたウインドウに対し、メッセージループ内で case WM_CREATE 以下に、 DragAcceptFiles を指定、case WM_DROPFILES にて ShellExecute なりの処理を書けば、メモ帳などが 開くのはわかるのですが、その際、中身のテキスト文字を全部配列変数に入れるとして、 効率のいいプログラミングサンプルはないでしょうか。 ドロップしたら、ファイル名とパス名を取得して、fopen などで、頭から一行ずつ読むのが一般的 なんでしょうか。 例えば、 abc.txt に以下のように続くとします。 000000000 082394099 111553021 339400191 498585000 333399999 280839000  ・  ・  ・  ・ スマートなプログラミングって教えてほしいです。 環境は VC++ Ver6 SDK です。

  • MFC、フォルダの中のファイルパス

    ダイアログベースにて、フォルダがドラッグアンドドロップされたら、フォルダの中のファイルのパスを一個ずつ取得したいのですが、どのようにしたらいいでしょうか。 void CDDDlg::OnDropFiles(HDROP hDropInfo) { char FileName[100]; int NameSize = sizeof(FileName); int FileNumber; CString str; int i; FileNumber = DragQueryFile(hDropInfo, 0xffffffff, FileName, NameSize); str.Format("ドロップされたファイルの数 =%d", FileNumber); AfxMessageBox(str); for(i=0; i<FileNumber; i++){ DragQueryFile(hDropInfo, i, FileName, NameSize); str.Format("第 %d 番目のファイル名 = %s", i, FileName); AfxMessageBox(str); } CDialog::OnDropFiles(hDropInfo); } のようにすると、フォルダのパスが出力されます。 例えば、testというフォルダの中にtest.txtがあり、testをドラッグアンドドロップしたら、test.txtのパスを取得したのですが・・・。 Visual Studio .NET2003を使用しており、まだ初心者ですがよろしくお願いします。

  • (javascript)HTMLで指定した画像パスに画像ファイルがない

    (javascript)HTMLで指定した画像パスに画像ファイルがない場合、別のファイル名の画像に差し替える方法が知りたいです。 以下のようにimgフォルダ内にある画像ファイル名をPHPでゲットしているのですが、その画像ファイルがない場合、確実にimgフォルダ内に存在する画像ファイルと差し替えたいのです。 print("<img src=img/". $item->getImage(). "border=0>\n"); <img src=img/cat.jpg border=0>が存在しないなら、<img src=img/dog.jpg border=0>を表示する。 javascript等、解決する方法がありますか? ご教授お願いします。 よろしくお願いします。<(_ _)>

  • Borland社のコンパイラを使ったDLL

    C++BuilderでDLLファイルを使っておりますが、Vectorコンテナの値をコールバック出来ませんでした。Vectorコンテナを使ったコールバックを可能とする記述方法を教えてください。 Edit1には、思惑通りに102が返ります。Edit2には、1が、Edit3には2が返ります。この例では、201、202を返したいのです。 本体側 #include <vector> ・ ・ extern "C" __declspec(dllimport) int __stdcall test(int*,vector<int>); #pragma package(smart_init) #pragma resource "*.dfm" using namespace std; TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { vector<int> b; b.push_back(1); b.push_back(2); int *a; *a=1; Edit1->Text = IntToStr(test(a,b)); Edit2->Text = IntToStr(b[0]); Edit3->Text = IntToStr(b[1]); b.clear(); dll側 extern "C" __declspec(dllexport) int __stdcall test(int*,vector<int>*);//コンテナの引数の実験 ・ ・ //----------------------------------------------------------------------------- int __stdcall test(int *a,vector<int> &b) { //dllの引数の可能性の実験 for(unsigned int i;i<b.size();i++){ b[i] +=200; } *a+=1; return *a+100; } //-----------------------------------------------------------------------------

  • excel vbaで今開いたばかりのファイルのパスを取得したい

    お世話になっております excelで「今開いたシート名までのパス」を取りたいのですが、方法がわかりません 現在 For FileNo = 1 To .FoundFiles.Count(あるフォルダの中にある) *************** For intNum = 1 To intSC(ファイルの中のシートを端から開いて作業する) *************** というようにfor nextであるファイルのあるシートを指定して作業するようになっています いったん、別のファイルを選択してからまたこの開いたシートに戻る必要があるため、この直前に開いたシートのパスが必要なのです 「ThisWorkbook.Path」などではコードが書いてあるファイルのパスになってしまいます どうか教えていただけると大変助かります 宜しくお願いします

  • ドロップで起動するけどパスは?

    ファイルをEXEにドロップして起動させます。 ドロップしたファイルのパスを GetCommandLine( ) から 取り出すために、" の位置を調べます。 "EXEのパス" ドロップファイルのパス となっているから、2番目の " の位置を調べました。 でも、for でのループが1回で終わってしまいます。 おかしいところを教えてください。 LRESULT CALLBACK WndProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam) {  char *p = GetCommandLine();  char str[200];  switch(msg){  case WM_CREATE:   int i;   for(i = 1; p[i] == '"'; i++);{    wsprintf(str, "%d", p[i]);    MessageBox(hWnd, chStr, "", MB_OK);   }   wsprintf(chStr, "%d", i);   MessageBox(hWnd, str, "", MB_OK); //結果は1   wsprintf(chStr, "%#x", p[0]);   MessageBox(hWnd, str, "1文字目", MB_OK); //結果は34   wsprintf(chStr, "%#x", p[1]);   MessageBox(hWnd, str, "2文字目", MB_OK); //結果は67   wsprintf(chStr, "%#x", p[2]);   MessageBox(hWnd, str, "3文字目", MB_OK); //結果は58

  • DragQueryFile()でエラー

    現在、VC++2005SP1でダイアログベースのアプリを書いていますが、エディットコントールでのドラッグアンドドロップの実装で躓いています。なぜかDragQueryFile()で-1が返って来て直後にGetlastError()を呼ぶと6(無効なハンドル)が返って来ます。 現象の再現を確認しながらコードを以下のレベルまで簡略にしました。 どこかまずいところがあればご教示頂きたく思います。 #include "stdafx.h" #include <stdio.h> #include <locale.h> #include <shellapi.h> #include "Resource.h" TCHAR input_file[MAX_PATH]; void InitDialog( HWND hWnd ); LRESULT CALLBACK MyDragDropProc( HWND, unsigned, WORD, LONG ); WNDPROC lpfnOldEditProc; LRESULT CALLBACK DlgProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp); int APIENTRY _tWinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPTSTR lpCmdLine, int nCmdShow ) {   _tsetlocale(LC_ALL, _T(""));   INT_PTR dret = DialogBox(hInst, MAKEINTRESOURCE( IDD_DIALOG ), NULL, (DLGPROC)DlgProc );   return 0; } LRESULT CALLBACK DlgProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) {   switch (msg) {   case WM_INITDIALOG: InitDialog( hWnd ); return TRUE;   case WM_COMMAND:     switch (LOWORD(wp)) {     case IDOK: EndDialog(hWnd, IDOK); return TRUE;     case IDCANCEL: EndDialog(hWnd, IDCANCEL); return TRUE;     }   }   return FALSE; } void InitDialog( HWND hWnd ) {   DragAcceptFiles( GetDlgItem( hWnd, IDC_EDIT_INPUT_FILE ), TRUE );   lpfnOldEditProc = (WNDPROC)SetWindowLong( GetDlgItem( hWnd, IDC_EDIT_INPUT_FILE ), GWL_WNDPROC, (LONG)MyDragDropProc ); } LRESULT CALLBACK MyDragDropProc( HWND hWnd, unsigned msg, WORD wp, LONG lp ) {   UINT wFilesDropped;   HDROP hDrop = (HDROP)wp;   TCHAR buff[256];   int err;   switch ( msg ) {   case WM_DROPFILES:     wFilesDropped = DragQueryFile( hDrop, (UINT)-1, NULL, 0 );     err = GetLastError();     _itot_s( err, buff, 256, 10 );     MessageBox( NULL, buff, NULL, MB_OK );     wFilesDropped = DragQueryFile( (HDROP)wp, 0, input_file, MAX_PATH );     MessageBox( hWnd, input_file, NULL, MB_OK );     DragFinish( hDrop );     break;   default:     return CallWindowProc( (WNDPROC)lpfnOldEditProc, hWnd, msg, wp, lp );   }   return 0; }

  • 【java】ファイル名から画像を取得

    こんにちは。Androidアプリを開発しています。 さっそくですが、質問です。 現在、ファイル名から画像を取得するというコードを書いています。 コードは以下の通りです。 //取得したファイル名を格納 ArrayList<String> file; file = intent.getStringArrayListExtra("list"); //画像を格納する配列 Bitmap[] image = new Bitmap[file.size()]; //ファイル名から画像をとってくる for (int i = 0 ;  i < file.size() ;  i++ )  { image[i] = findImageByFilename(file.get(i)); } //ファイル名から画像をとってくるメソッド public Bitmap findImageByFilename (String file_name) { Bitmap image = null; try { image = MediaStore.Images.Media.getBitmap(getContentResolver(), Uri.parse(file_name)); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return image; } Logをとった結果、 try { の下の image = MediaStore.Images.Media.getBitmap(getContentResolver(), Uri.parse(file_name)); でエラーが出ていることまではわかりました。 しかし、そこからどのようにすればいいのかがわかりません。 分かる方、ご回答お願い致します。

専門家に質問してみよう