アプリ版:「スタンプのみでお礼する」機能のリリースについて

前回、exeファイルにドラッグすることで動作するプログラム再質問 をした者です。本当に何度もすみません。
前回から調べた結果「ファイル名に日本語を指定したとき」ではなく、「ファイル名に半角スペースを指定したとき」上手くいかないということが解りました。
 DOSでは半角スペースが区切り記号になってしまうことが影響しているのでしょうか?
 一般的にデスクトップにデータファイルを作成すると「Documents and Settings」の下部におかれます。この場合、どうしても半角スペースを含んでしまいます。しかし、MicroSoftWordでは、デスクトップにおかれた名前に半角スペースを含むdocファイルをWORD.exeのアイコン上にドラッグすることでファイルを開くことができます。と言うことは何か解決策があるはずなのですが・・・・・・
 お手数をお掛けして申し訳ございませんが、何卒宜しくお願い申し上げます。参考のためにソースプログラムを載せておきます。
#include <windows.h>
#include <tchar.h>
int WINAPI _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow){

HANDLE hfile;
hfile = CreateFile(lpCmdLine,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_READONLY,NULL);
if(hfile == INVALID_HANDLE_VALUE){
MessageBox(NULL,_T("error"),NULL,MB_OK);
return false;
}
//ここで処理をします(今回は省略させていただきました)
return 0;
}

開発環境はVisualC++2008ExpressEditionです。
このプログラムをビルド後、exeファイル上に 「a a」のように半角スペースを含むファイルをドラッグするとerrorになります。

A 回答 (4件)

MessageBox( NULL, lpCmdLine, NULL, MB_OK );



としてみればわかると思いますが、半角スペースが入っている場合、" " で囲まれた文字列が渡されるんですね。
自力で " " を取り除いても良いと思いますが、PathUnquoteSpaces() という API を使用すれば簡単に " " を取り除くことができます。
( ただし、Windows 2000 以降、または NT 4.0、Windows 95、98 等は IE 4.0 以上がインストールされていなければならないらしいです。)

前回の質問にあった exe ファイルが置かれているパス名の取得方法ですが、GetCommandLine() で実行ファイルのパスからコマンドラインパラメータまで全部が入った文字列が取得できますので、何らかの方法で、そこからパス名を切り出せばよいかな、と思います。
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます。たしかに””で囲まれていました。プログラムを修正し、動きました。exeファイルの場所に関しても問題なくできました。本当にありがとうございました。

お礼日時:2009/11/19 14:06

間違えました


__argv
ではなくて
__targv
です
訂正します
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます。__targvを使ったら簡単にできました。
__targvは初めて知りました。ありがとうございました。

お礼日時:2009/11/19 14:08

_tWinMainなら


__argv[1]
で受け取れば " "なしの文字列が受け取れます
exeのパスは
__argv[0]
です
    • good
    • 0

そのプログラム、そもそも半角スペースを%20などに置き換えて読んでないプログラムなんじゃない?



パス全体を"" で 囲んで 渡してみて、確認してみたら?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!