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

VC++でフォームを持たないプログラム...
 
通知
すべてクリア

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


おっち
 おっち
(@おっち)
ゲスト
結合: 23年前
投稿: 5
Topic starter  

はじめまして。VC++6.0を使用する初心者です。

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


引用解決済
トピックタグ
PATIO
(@patio)
Famed Member
結合: 4年前
投稿: 2660
 

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


返信引用
PATIO
(@patio)
Famed Member
結合: 4年前
投稿: 2660
 

正しくは、

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

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


返信引用
同じく初心者
 同じく初心者
(@同じく初心者)
ゲスト
結合: 23年前
投稿: 1
 

WinMainを作成し、その中にやりたいことだけ記述すれば
フォームを持たないプログラムは作れるのではないでしょうか?
意識的にwindowやDialogを作成しなければ良いだけだと思います。
はずしてたらすいません。


返信引用
n
 n
(@n)
ゲスト
結合: 23年前
投稿: 159
 

http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200206/02060099.txt

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


返信引用
n
 n
(@n)
ゲスト
結合: 23年前
投稿: 159
 

すいませんこれだけでいいかも。

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


返信引用
おっち
 おっち
(@おっち)
ゲスト
結合: 23年前
投稿: 5
Topic starter  

みなさん、ありがとうございます。
これらを参考に、やってみます。
また、経過の方をご報告させて頂きます。


返信引用
n
 n
(@n)
ゲスト
結合: 23年前
投稿: 159
 

またまたすいません。Sleep()->ShellExecute()だと、マウスカーソルが砂時計に変わった
ままになってしまい、よろしくないようです。


返信引用
おっち
 おっち
(@おっち)
ゲスト
結合: 23年前
投稿: 5
Topic starter  

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


返信引用
ぴろり
 ぴろり
(@ぴろり)
ゲスト
結合: 23年前
投稿: 4
 

sleep()じゃだめなのなら単純にSetTimer()で。

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

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

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

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました