プロが教える店舗&オフィスのセキュリティ対策術

WINAPIで始まるメインループにコンソールプログラムのように、引数を与えて実行時の処理を変更させる方法を教えてください。

コンソールでの引数の使い方等は分かるので、どうやったらWINAPIにそう言った引数が渡せるのかが知りたいデス_| ̄|○

A 回答 (4件)

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

この回答への補足

回答有難う御座います。

問題となっているWINAPIから始まるメインループとは、

int WINAPI WinMain(
HINSTANCE hInstance ,
HINSTANCE hPrevInstance ,
LPSTR lpCmdLine ,
int nCmdShow )

の事を指します。

アプリケーション作製で、上記のメインループは『決り文句』と言う感覚で使っていたのですが、やはりどう言う動きをしているのか凄く気になったので質問しましたw

えと、今までのコンソールプログラムのように、簡単に扱え無かったので、引数から取った文字列を画面に表示すると言ったサンプルソースを載せて頂けると大変助かります。_| ̄|○

補足日時:2004/09/30 15:57
    • good
    • 0

GetCommandLine


現在のプロセスのコマンドライン文字列へのポインタを取得します。

LPTSTR GetCommandLine(VOID)


プログラム名も欲しければ、GetCommandLine()で取得。
WinMainの第3引数はプログラム名を含みません。

GetCommandLine()は関数なので、WinMain関数外でも
使用できます。

LPTSTR は、Unicode環境でコンパイルした場合、wchar_t* 型、それ以外の場合、char* 型です。
    • good
    • 0
この回答へのお礼

試してみた結果、ちゃんと値が得られました。


まさか、こんな簡単な事で得られるとは……脱帽しました。


Borland C++のコンパイラなので、Unicode環境かどうかが不明でしたが、char*での習得が出来たので、結果オーライでしたw

お礼日時:2004/09/30 17:16

コンパイラを選ぶかもしれませんが、グローバル変数 _argc, _argv が、コンソールアプリの場合の main 関数の引数 argc と argv と同じように使えます。



プログラム起動時の引数の与え方は、コンソールアプリと同じです。ショートカットを作成して引数を与える方法もあります。

WINAPIは__stdcallのことなので、ウィンドウズアプリケーション/コンソールアプリケーション と使い分けるのがわかりやすいです。
    • good
    • 0
この回答へのお礼

えと、試してビックリしました。

まさか、こんなに簡単に解決出来ちゃうとは、思ってもいませんでした。((;゜Д゜)


> WINAPIは__stdcallのことなので、ウィンドウズアプリケーション/コンソールアプリケーション と使い分けるのがわかりやすいです。

えと、コレの意味が分かり辛いので、補足していただけると助かります。

お礼日時:2004/09/30 16:26

>文字列を画面に表示すると言ったサンプルソースを載せ


>て頂けると大変助かります。

なにがわからないのでしょうか・・・
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とウインドウに表示されます。
    • good
    • 0
この回答へのお礼

試した所、ちゃんと引数が得られました。


解らなかった所としては、LPSTRが構造体だったと言う所と、lpCmdLineが何をどんな形を持っているかとかでした。
この回答を見て、解決いたしました。


お手数掛けました。_| ̄|○

お礼日時:2004/09/30 17:33

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