• ベストアンサー

WINAPIから始まるプログラム実行時の引数について。

WINAPIで始まるメインループにコンソールプログラムのように、引数を与えて実行時の処理を変更させる方法を教えてください。 コンソールでの引数の使い方等は分かるので、どうやったらWINAPIにそう言った引数が渡せるのかが知りたいデス_| ̄|○

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

  • ベストアンサー
noname#30727
noname#30727
回答No.3

コンパイラを選ぶかもしれませんが、グローバル変数 _argc, _argv が、コンソールアプリの場合の main 関数の引数 argc と argv と同じように使えます。 プログラム起動時の引数の与え方は、コンソールアプリと同じです。ショートカットを作成して引数を与える方法もあります。 WINAPIは__stdcallのことなので、ウィンドウズアプリケーション/コンソールアプリケーション と使い分けるのがわかりやすいです。

jam_with_ju2
質問者

お礼

えと、試してビックリしました。 まさか、こんなに簡単に解決出来ちゃうとは、思ってもいませんでした。((;゜Д゜) > WINAPIは__stdcallのことなので、ウィンドウズアプリケーション/コンソールアプリケーション と使い分けるのがわかりやすいです。 えと、コレの意味が分かり辛いので、補足していただけると助かります。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

  • furyfox
  • ベストアンサー率56% (58/103)
回答No.4

>文字列を画面に表示すると言ったサンプルソースを載せ >て頂けると大変助かります。 なにがわからないのでしょうか・・・ int WINAPI WinMain( HINSTANCE hInstance ,HINSTANCE hPrevInstance ,LPSTR lpCmdLine ,int nCmdShow ){ MessageBox(NULL,lpCmdLine ,lpCmdLine ,MB_OK); return 0; } これでメッセージボックスがでます。 #1さんのURLにでているコードが一番簡単なmainループです。 そのコードの case WM_DESTROY:の上に case WM_PAINT: { HDC hdc = GetDC(hWnd); TextOut(hdc , 0 , 0 , "hello world", lstrlen("hello world")); ReleaseDC(hWnd, hdc); } break; とでもいれればhello worldとウインドウに表示されます。

jam_with_ju2
質問者

お礼

試した所、ちゃんと引数が得られました。 解らなかった所としては、LPSTRが構造体だったと言う所と、lpCmdLineが何をどんな形を持っているかとかでした。 この回答を見て、解決いたしました。 お手数掛けました。_| ̄|○

全文を見る
すると、全ての回答が全文表示されます。
  • RAPTsong
  • ベストアンサー率42% (74/175)
回答No.2

GetCommandLine 現在のプロセスのコマンドライン文字列へのポインタを取得します。 LPTSTR GetCommandLine(VOID) プログラム名も欲しければ、GetCommandLine()で取得。 WinMainの第3引数はプログラム名を含みません。 GetCommandLine()は関数なので、WinMain関数外でも 使用できます。 LPTSTR は、Unicode環境でコンパイルした場合、wchar_t* 型、それ以外の場合、char* 型です。

jam_with_ju2
質問者

お礼

試してみた結果、ちゃんと値が得られました。 まさか、こんな簡単な事で得られるとは……脱帽しました。 Borland C++のコンパイラなので、Unicode環境かどうかが不明でしたが、char*での習得が出来たので、結果オーライでしたw

全文を見る
すると、全ての回答が全文表示されます。
  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.1

WINAPIで始まるメインループとは http://www.doumo.jp/postgretips/tips.jsp?tips=13 とかの事をいっているのですか? int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) のLPSTR lpCmdLineに引数がはいっています。 LPSTRとは文字列(char*)のことです。

参考URL:
http://www.doumo.jp/postgretips/tips.jsp?tips=13
jam_with_ju2
質問者

補足

回答有難う御座います。 問題となっているWINAPIから始まるメインループとは、 int WINAPI WinMain( HINSTANCE hInstance , HINSTANCE hPrevInstance , LPSTR lpCmdLine , int nCmdShow ) の事を指します。 アプリケーション作製で、上記のメインループは『決り文句』と言う感覚で使っていたのですが、やはりどう言う動きをしているのか凄く気になったので質問しましたw えと、今までのコンソールプログラムのように、簡単に扱え無かったので、引数から取った文字列を画面に表示すると言ったサンプルソースを載せて頂けると大変助かります。_| ̄|○

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • プログラム実行時に引数"<"を指定したい。

    自分でも色々調べたのですが、手に負えなかったので質問させていただきます。何度も質問する形になって申し訳ないです。 今取り組んでいる課題の1つに、プログラム実行時に引数として"<"と"ABC"(ABCはファイル名)を指定するとABCに書かれたスクリプトを実行する。というものがあります。 myprogram < scriptfile(←のような感じです) それで、第1引数が"<"なら第2引数のファイルを実行する。というようにしようと思ったのですが、Argv[1]に"<"が格納されません。 引数に"<"を指定すると別の処理をするらしいことは調べたのでわかったのですが、どうにか"<"を格納できないでしょうか?(つまりは、引数が"<"の時とそうでない時で分岐できるようにしたいのです) あと、スクリプトのファイル名もArgv[2]に格納できないんですが、第2引数に指定された文字列はどこへ行ってしまったんでしょうか? 何度もすいませんがよろしくお願いいたします。

  • Eclipseでプログラム実行時に引数を渡す方法を知りたい!

    EclipseでJavaのプログラミングをしているのですが、実行時に引数を渡す方法が分かりません。 プログラムの内容としては、テキストファイルの中身を表示するプログラムなんですが、コマンドプロンプト上で実行する場合には、 C:\Java> java Test < Test.txt という風に実行すればよいのですが、Eclipseではどのように引数を渡して実行すればよいのか分かりません。 誰か助けてください!

    • ベストアンサー
    • Java
  • プログラム実行時の確認は

    今まではコンボボックス内をセレクトしたあとすぐに計算を実行して表示するプログラムだったのですが、テキストボックスにデータを入力後ボタンを押したときに計算を行うように変更しようとして、新規に作成したボタンの「Private sub Command1_Click()」にコンボボックス内に書いていたプログラムをコピーして実行したのですが、ボタンを押してもエラーで止まるわけでもなく、しかし、実行結果を表示するでもなく、まるでループにでも入っているようなのですが、実行中にどこでどうしているか確認する方法を教えてください。

  • URLを引数として別のプログラム(クラス)を呼び出して実行させたい

    いつもお世話になっております。 以前の質問の http://oshiete1.goo.ne.jp/kotaeru.php3?q=1725502 No4のご回答にて教えていただいたプログラムを、 別のプログラムから入力したURLを引数にして呼び出して、 プログラムを実行させるにはどのようにすればいいでしょうか? 例えば、以下のプログラムのように、 url1を引数にして、GetTBAddrYAHOOクラスの処理をさせ、 結果として取得したURLを返して出力させたいです。 public class Sample { public static void main(String[]args){ String url1 = args[0]; if(url1.matches(".*(blogs\\.yahoo\\.co\\.jp).*")){ url1を引数にしてclass GetTBAddrYAHOO の処理を行い、 トラックバックされているアドレスを取得して、 その結果を返して出力 } そのためにはSampleとGetTBAddrYAHOOのプログラムをどのように改正させればよいでしょうか? よろしくお願いします。

    • ベストアンサー
    • Java
  • 【VB2005】プログラム実行時に引数を渡したい

    VB2005で作成したプログラムがありまして、 Shell("C:\XXX.Exe -Prg=1")というのを使って プログラムをShellで開きます。 そこで、"-Prg=1"という引数を、受け取る側のアプリケーションを 作りたいのですが、どういう方法で値を取得できるか教えてください。 よろしくお願いします。

  • プログラムの引数を調べるには?

    不特定多数のフリーソフトやゲーム等の実行ファイルの 引数を調べるにはどうすれば良いでしょうか? バイナリエディタで見ても見つかりません 先生教えてください。 主にC++とjavaで構成されたプログラムの引数確認を 行いたいです。

  • 実行時引数からの日付取得

    Perl実行時に引数(YYYYMMDD)をわたして、 それをもとに処理を続けたいと考えています。 ($yy1,$mm1,$dd1) = ($ARGV[0] =~ /^(\d{4})(\d{2}-1)(\d{2})$/); $mytime=timelocal(0,0,00,$dd1,$mm1,$yy1); このように記述して20081230を引数にして実行しても 日付DDの部分がうまく入らずエラーになってしまいます。 なぜなのでしょうか。

    • ベストアンサー
    • Perl
  • javaの実行可能ファイルの実行(引数あり)

    今日は、 Windows7で、Eclipseを使用しまして、javaの実行可能ファイル(T_MainDP.jar)を作成しています。 この実行可能ファイルを実行する場合に、引数が無い場合は、T_MainDP.jarなるIconをクリック しますと、実行できます。 もし、引数がある場合は、DOS窓のコマンドプロンプトから、”T_MainDP.jar 引数" をキーインして 実行できます。 Q1)引数がある場合に、DOS窓を起動すること無く、プログラム起動する方法はありますか? この件に関しまして、コメント頂けますと大変助かります。 以上

    • ベストアンサー
    • Java
  • 【VBScript】引数を付けてexeを実行

    以下のプログラムを書こうとしています。 ヒントや参考サイト、参考プログラム等を教えてください。 1.vbsをダブルクリックし実行する。 2.画面が開く。 3.実行するexeを指定する。 4.1個目の引数を指定する。 5.2個目の引数を指定する。 6.○個目の引数を指定する。 7.OKボタンを押す。 8.指定したexeが指定した引数付きで実行される。 尚、引数はファイルの場合や数字の場合があります。 引数の数は2個か3個か4個程度になります。

  • 引数で指定されたファイルを実行する

    実行する時に、引数としてファイル名を指定すると、そのファイルに書かれたスクリプトを実行してプログラムを終了する。 上記のようなCのプログラムを作りたいのですが、まったく見当がつかずに困っています。どうすればよいかご教授ください。

このQ&Aのポイント
  • 22歳女性が機能性ディスペプシアと胃潰瘍について悩んでいます。胃カメラの結果、胃潰瘍と診断されましたが、別の先生には機能性ディスペプシアと診断されました。どちらの方が大変な病気なのか気になっています。
  • 悩みの原因としては、精神的なストレスや偏頭痛の悪化も挙げられます。頭痛や腹痛が日常生活に影響を与え、会社でも休むことがあります。休職することについても悩んでいます。
  • 次回は先生に相談する予定ですが、診断書の変更や休職の適切さについて心配しています。相談してもなかなか解決できない悩みで、意見やアドバイスをいただきたいです。
回答を見る