VC++でフォームを持たないプログラムの作成

[戻る]
おっち 2002/07/03(水) 14:42:08
はじめまして。VC++6.0を使用する初心者です。

VC++で実現したいことがあるんですが、何からやればいいのか
まったく検討が立ちません。どうゆうことがしたいのかといいますと、
iniファイルをOS起動時に読み込み(今回作るEXEをスタートアップに
登録しておく)、指定先のEXEを5分後に起動するというようなものです。
iniファイルに起動したいEXEのプルパスと、intervalを指定するように
します。
フォームをつくる必要はないと思うのですが、どのような手順で
実現可能でしょうか?
それに近いことをやっているサンプルなどありましたら教えてください。
よろしくお願いします。

PATIO 2002/07/03(水) 15:15:47
ダイアログベースで作成しておいてダイアログ部分をそっくり削ってしまえば、
確か出来たと思います。CWinAppの派生クラスにInitInstanceという関数があります。
ダイアログベースのプログラムはこの中でメインウインドウにあたるダイアログを作成
してDoModalしていますので、この部分をそっくり削ってiniファイルの読み込み、
インターバル時間でも待ち合わせ、指定アプリの起動を行えば良いでしょう。
InitInstanceの返却値をFALSEにしておけば、アプリはそのまま終了します。

PATIO 2002/07/03(水) 15:17:15
正しくは、

インターバル時間での待ち合わせ

です。
おわかりかと思いますが。

同じく初心者 2002/07/03(水) 15:20:32
WinMainを作成し、その中にやりたいことだけ記述すれば
フォームを持たないプログラムは作れるのではないでしょうか?
意識的にwindowやDialogを作成しなければ良いだけだと思います。
はずしてたらすいません。

n [E-Mail] 2002/07/03(水) 15:32:05
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200206/02060099.txt

ここの私のコメントが近いです。MessageBox()の代わりにDispatchMessage()を、
TimerProc()の中にはShellExecute()を置けば...。

n [E-Mail] 2002/07/03(水) 19:02:34
すいませんこれだけでいいかも。

int WinMain(...)
{
 Sleep(interval);
 return ShellExecute(,,path,,,);
}

おっち 2002/07/03(水) 19:02:35
みなさん、ありがとうございます。
これらを参考に、やってみます。
また、経過の方をご報告させて頂きます。

n [E-Mail] 2002/07/03(水) 21:49:10
またまたすいません。Sleep()->ShellExecute()だと、マウスカーソルが砂時計に変わった
ままになってしまい、よろしくないようです。

おっち 2002/07/04(木) 12:43:13
VC++とは関係ありませんが・・・
今回やりたいことを、Windows2000のタスクスケジューラで
実現可能でしょうか。
問題は、インターバルの時間で、PC起動し5分後に、指定EXEを
起動するというようなものです。

ぴろり 2002/07/12(金) 09:56:35
sleep()じゃだめなのなら単純にSetTimer()で。

・MFCAppWizardダイアログベースにてプロジェクトを作成
・ClassWizardでクラス名(*Dlg)にメッセージWM_TIMERを追加
・C*Dlg.cppのOnInitDlg()中にSetTimer(タイマーID,ミリ秒待ち,NULL);を追加
・C*Dlg.cppのOnTimer()の中にShellExecute()を追加、
 直後の再起呼び出しを削除し、exit(0)またはDestroyWindow()を追加

で目的達成。このままだとダイアログを消せないけど:笑。

タイマーをアプリ起動中に意図的に殺したい場合はKillTimer()を使いますが、
Windowsの場合はアプリを終了させてもそれの持つタイマーは勝手に廃棄します。


私はタスクスケジューラは嫌いなのでなんとも。

古いスレッドには追加発言できません。