ページ 11

画像のファイル名の取得

Posted: 2013年7月27日(土) 16:39
by wolf
exeファイルに画像をドロップして、画像のファイル名を渡したいのですがどのようにすればいいのでしょうか?

画像のファイル名の取得

Posted: 2013年7月27日(土) 16:42
by wolf
忘れていました。使用言語はC/C++です。

Re: 画像のファイル名の取得

Posted: 2013年7月27日(土) 17:01
by みけCAT

コード:

int main(int argc,char* argv[]) {
    処理
}
という形でmain関数を書いてエントリーポイントにすれば、argcに引数の数
(argvの最初に入る自分のプログラムファイルを含む)が、argvに引数が1個ずつ入ります。
詳しくは、このコードで実験してみてください。

コード:

#include <windows.h>

char buffer[10000000];

int main(int argc,char* argv[]) {
	int i;
	for(i=0;i<argc;i++) {
		char smallbuffer[1028];
		wsprintf(smallbuffer,"argv[%d]=",i);
		lstrcat(buffer,smallbuffer);
		lstrcat(buffer,argv[i]);
		lstrcat(buffer,"\n");
	}
	MessageBox(NULL,buffer,"CommandLine Test",MB_OK | MB_TOPMOST);
	return 0;
}
WinMain関数から入るプログラムの場合、main関数以外で参照したくてかつ引数で渡せない場合などは、
WindowsならGetCommandLine関数でコマンドライン全体を取得できますが、分割は自分でやらないといけません。
ただし、UNICODEを使う場合(GetCommandLineW関数で取得した場合)は、
CommandLineToArgvW関数でargc/argv形式に分解できるらしいです。

Re: 画像のファイル名の取得

Posted: 2013年7月27日(土) 17:10
by みけCAT
すみません、画像のファイル名を受け取りたいのではなく渡したいのでしたね。
exeファイルということなので、
(Linuxの実行ファイルに.exeという拡張子をつけても実行できると思いますが)環境はWindowsと仮定します。

方法の一例です。
1.エクスプローラを起動し、目的のexeファイル(以下、対象exe)があるフォルダを表示します。
2.(必要があればエクスプローラをもう一枚起動し、)ドロップしてファイル名を渡したい画像(以下、対象画像)があるフォルダを表示します。
3.対象画像のファイル名の上にマウスカーソルを移動させます。
4.その状態でマウスの左ボタンを押しっぱなしにします。
5.マウスの左ボタンを押し続けたまま、マウスカーソルを対象exeのファイル名の上に移動させます。
6.その状態でマウスの左ボタンを放します。
wolf さんが書きました:忘れていました。使用言語はC/C++です。
対象exeと対象画像の位置を取得するのが難しそうですが、基本的にmouse_event関数を使えばできると思います。

Re: 画像のファイル名の取得

Posted: 2013年7月28日(日) 14:18
by wolf
ありがとうございます。参考にさせていただきます。