VC++にて

以下でメモ帳を起動することが出来ました。
::WinExec(_T("notepad.exe"),SW_SHOW);

こんどは、CreateProcess()でメモ帳を起動したいのですがどう書けば良いのですか?

また、メモ帳を終了させるにはどう記述すれば良いのでしょうか?

よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (5件)

とりあえず起動の方法だけ



PROCESS_INFORMATION p;
STARTUPINFO s;
memset((void *)&p,NULL,sizeof(PROCESS_INFORMATION));
memset((void *)&s,NULL,sizeof(STARTUPINFO));
CreateProcess("c:\\winnt\\notepad.exe","",NULL,NULL,FALSE,0,NULL,NULL,&s,&p);

終了させるには
SendMessageでWM_CLOSEを起動したメモ帳のハンドルに送ります。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

win98にてパスを変更して試してみましたが、メモ帳は起動しませんでした。

教えていただいたコードを見ても何やら面倒くさそうですね。

お礼日時:2003/07/13 16:00

MSDNでGetLastErrorを調べましたか?


そのなかにFormatMessageというリンクがありますが
そこにGetLastErrorの使用例が出ています。

LPVOID lpMsgBuf;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // デフォルト言語
(LPTSTR) &lpMsgBuf,
0,
NULL
);
MessageBox( NULL, lpMsgBuf, "Error", MB_OK | MB_ICONINFORMATION );
LocalFree( lpMsgBuf );
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

お礼日時:2003/07/19 21:42

>>とりあえず、成否の確認は、戻り値やGetLastErrorで取得する癖をつけてください。


>是非そうしたいのですが、残念ながら今の私にはやり方が判りません。
>もし、教えていただけるのでしたら助かります。

戻り値は普通の関数の戻り値と一緒ですよ。
BOOL bRet = CreateProcess( ...

とでもして値を取得してください。

戻り値の型、値の意味は、ヘルプを参照してください。
http://www.microsoft.com/japan/developer/library …


GetLastError()も呼び出すだけです。
WinAPIのコールで異常になったら呼び出して、戻り値を取得します。

値の意味は、一般的なものなら、VC++インストール時に一緒にインストールされるError Lookupというツールで確認できます。
    • good
    • 0
この回答へのお礼

いろいろ教えていただきありがとうございます。
是非活用したいと思います。

お礼日時:2003/07/14 19:18

>>おそらく起動はしています。


>>ただ、表示されていないだけです。
>これを確認する方法はあるのでしょうか?

Win2000や、XPならタスクマネージャでプロセスの存在を確認できます。

Win95やWin98でしたら、Ctrl+Alt+Delで表示される
プログラムの一覧にあったかな?忘れてしまいました。

あと、VC++インストール時に、一緒にプロセス一覧を取得するツールもインストールしていたような。

とりあえず、成否の確認は、戻り値やGetLastErrorで取得する癖をつけてください。


>>CreateProcessをコールする前に、次の2行を足してください。
>足してみましたが、やはり起動しませんでした。

すみません。もう1行足してください。

s.cb = sizeof(STARTUPINFO);

>>あと、正常に起動したら、不要なハンドルを閉じる必要があります。
>閉じなかったらどのような不具合があるのでしょうか?

無駄にメモリが消費されたままになります。

>>WM_CLOSEはPostMessageで送るべきですよ。
>そもそもハンドルの取得はどのようにすれば出来るのでしょうか?

ここらへんをどうぞ。
起動、終了の両方とも参考になると思います。

http://cgi23.plala.or.jp/a-w-h/mfc/appclose.html

参考URL:http://cgi23.plala.or.jp/a-w-h/mfc/appclose.html
    • good
    • 0
この回答へのお礼

何度も回答ありがとうございます。

>Win95やWin98でしたら、Ctrl+Alt+Delで表示される
>プログラムの一覧にあったかな?忘れてしまいました。
Ctrl+Alt+Delで確認した結果が正しいとすると、やはり起動していませんでした。

>とりあえず、成否の確認は、戻り値やGetLastErrorで取得する癖をつけてください。
是非そうしたいのですが、残念ながら今の私にはやり方が判りません。
もし、教えていただけるのでしたら助かります。

>すみません。もう1行足してください。
>s.cb = sizeof(STARTUPINFO);
追加しましたが、やはり起動しませんでした。

>ここらへんをどうぞ。
>起動、終了の両方とも参考になると思います。
おぉ~、これは役立つサイトを紹介頂きありがとうございます。
いろいろなサイトを参考にしていますが、このサイトは知りませんでした。
サイトの通りにやったら、起動、終了ともうまく行きました。

お礼日時:2003/07/14 08:41

>win98にてパスを変更して試してみましたが、メモ帳は起動しませんでした。



おそらく起動はしています。
ただ、表示されていないだけです。

CreateProcessをコールする前に、次の2行を足してください。

s.dwFlags = STARTF_USESHOWWINDOW;
s.wShowWindow = SW_SHOWDEFAULT;

あと、正常に起動したら、不要なハンドルを閉じる必要があります。

CloseHandle(p.hProcess);
CloseHandle(p.hThread);



>SendMessageでWM_CLOSEを起動したメモ帳のハンドルに送ります。

WM_CLOSEはPostMessageで送るべきですよ。
    • good
    • 0
この回答へのお礼

>おそらく起動はしています。
>ただ、表示されていないだけです。
これを確認する方法はあるのでしょうか?

>CreateProcessをコールする前に、次の2行を足してください。
足してみましたが、やはり起動しませんでした。

>あと、正常に起動したら、不要なハンドルを閉じる必要があります。
閉じなかったらどのような不具合があるのでしょうか?



>SendMessageでWM_CLOSEを起動したメモ帳のハンドルに送ります。

>WM_CLOSEはPostMessageで送るべきですよ。
そもそもハンドルの取得はどのようにすれば出来るのでしょうか?

以上質問ばかりで申し訳ありませんが、お分かりの方よろしくお願いします。

お礼日時:2003/07/13 22:29

このQ&Aに関連する人気のQ&A

このQ&Aと関連する良く見られている質問

QXperiaのアプリ、アンドロイドマーケット以外にもあるのでしょうか?

Xperiaのアプリ、アンドロイドマーケット以外にもあるのでしょうか?

こんにちは。
Xperia初心者ですが、よろしくお願いいたします。

先日、知人の持っていたXperiaを見て『これは便利なアプリだな。』と思い後日、ダウンロードしようとアンドロイドマーケットで探したのですが、いくら探してもみつかりません。Xperiaのアプリってアンドロイドマーケット以外にもあるのでしょうか?

Aベストアンサー

他のか方が書かれていないところで私がダウンロードに使っているところです。

1.オクトバ
2.AndroLib.com

というのがあります。

QVC++から引数付きexeファイルの実行

タイトルの通り、VC++から外部ファイルを実行したいのですがどのような関数を使えばよいのでしょうか?
exeファイルを実行中は親プロセスであるVCのプログラムの方を止めておきたいのです。
出来ればexeファイルは引数付きで実行したいと思いますので、よろしくお願いします。
開発環境はVisualStudio2005です。

Aベストアンサー

#1です。こちらで作成したサンプルです。
呼び出し側
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
intret;
printf("system試験開始\n");
ret = system("C:\\VCSTUDY\\printarg\\Debug\\printarg.exe XXX YYY ZZZ");
if (ret == 0){
printf("system成功\n");
}else{
printf("system失敗\n");
}
return 0;
}
----------------------

呼び出される側(c:\\test.exeに相当)
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
inti;
for (i = 0; i < argc; i++){
printf("ARGV[%d]=%s\n",i,argv[i]);
}
return 0;
}
以下、実行結果です。
コマンドプロンプト画面に下記の文字が出力されます。
------------------------
system試験開始
ARGV[0]=C:\VCSTUDY\printarg\Debug\printarg.exe
ARGV[1]=XXX
ARGV[2]=YYY
ARGV[3]=ZZZ
system成功
Press any key to continue
---------------------------

#1です。こちらで作成したサンプルです。
呼び出し側
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
intret;
printf("system試験開始\n");
ret = system("C:\\VCSTUDY\\printarg\\Debug\\printarg.exe XXX YYY ZZZ");
if (ret == 0){
printf("system成功\n");
}else{
printf("system失敗\n");
}
return 0;
}
----------------------

呼び出される側(c:\\test.exeに相当)
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
inti;
for (i = 0; i < argc; i++){
p...続きを読む

Qアプリがダウンロードできない

Androidです。
アプリをダウンロードしようとしても、ダウンロードができません。
他のアプリだとダウンロードできます。

エラーコードは24です。

Aベストアンサー

Androidのバージョンは?
4.0 以上の場合は、ダウンロード マネージャーが無効になっていないか確認。
「設定」「アプリ」「アプリを管理」「すべて」スクロールし「ダウンロード マネージャー」「無効」→「有効にする」(「有効」の場合は「データの消去」・・・注:データが消える)

データが消えるがリセットしてみる。
「Google Playストアのリセット」Playストア起動しホームスクリーンに戻る→「設定」「アプリ」「Google Playストア」キャッシュを消去と強制停止
→「設定」「アプリ」「すべて」「Google サービスフレームワークを表示」データを消去
→GooglePlayストア起動しエラー確認→本体の電源をシャットダウンし再起動

Qファイルやディレクトリの存在確認を行う方法

ファイルをオープンするのはfopenでOKですが、ファイルやディレクトリの存在確認を行う方法が知りたいです。

何か組み合わせて作るものなのでしょうか?
perlとか便利な演算子があるのですが、C/C++って器用ではないですね。
これは処理系?依存の内容ですか?

私の環境は VC6, VC2005 Windows2000です。

Aベストアンサー

int access(const char* path, int mode);
int stat(const char* path, struct stat* sb);

かな?
MSDN を引くと _access_s() を使えとか書いてあるけど。

Qiphoneのマルチタスクで行うアプリの削除を一括で行うことが出来ない訳は何ですか? 今までのiPh

iphoneのマルチタスクで行うアプリの削除を一括で行うことが出来ない訳は何ですか?
今までのiPhoneとiPhoneのOSで一度もマルチタスクで一括削除を行う操作は無いと思いますが何故ですか??
他のスマートフォンでは開いているアプリを一括で消す項目があるのに何故iPhoneは一つずつでしか消すことができないのでしょうか?
何か事情があるのでしょうか?
沢山開いたアプリを一つずつ削除している時に何度も思うのですが一度に全てを削除出来る機能があれば便利だとは思いませんか?
沢山開いていれば少しずつラグが発生しますよね、その為に削除を行う訳ですが沢山開いているものを一つずつ消さなければならない事情を知りたいです

Aベストアンサー

基本的にiPhoneではそのようなアプリを終了する必要はないからです。
ホームボタンを押せばサスペンド状態になりますので、気にしなくても大丈夫です。

ios10が思いと感じたことがないので、端末の問題だったり容量の問題だったりするのではないでしょうか。

Q外部exe呼び出しの方法 ShellExecuteEx, System...

VC++6での質問す。
◆やりたいこと◆
(1)内部から外部exeを引数ありで呼び出し、処理をさせます。
(2)その外部exeの結果コードを内部的に受け取り、エラー処理させます。
(3)外部exeの処理実行中は、できればDOS窓を非表示にさせます。

system()呼び出しは最も簡単なのですが、(3)が上手くできませんでした。

◆やってみた方法◆
こちらの過去質問も参考に見よう見まねでShellExecuteExを使ってやってみようとしました。

SHELLEXECUTEINFO sei;
DWORDdwRC;
LPVOID msg;
BOOLres;

ZeroMemory(&sei, sizeof(SHELLEXECUTEINFO));
sei.cbSize = sizeof(SHELLEXECUTEINFO);
sei.nShow = SW_HIDE;
sei.lpVerb = (LPCTSTR)cmd;// cmdの中は、"hoge.exe param1 param2"

res=ShellExecuteEx( &sei );

WaitForSingleObject( sei.hProcess, INFINITE );
GetExitCodeProcess( sei.hProcess, &dwRC );
CloseHandle(sei.hProcess);

if(res != FALSE){
MessageBox( "OK", "result", MB_OK );
}else{
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
dwRC,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR) &msg,
0,
NULL
);
MessageBox( msg, "result", MB_OK | MB_ICONERROR );
LocalFree(msg);
}

以上で実行しようとすると、
「指定されたファイルに対してこの操作を行うアプリケーションが関連付けられていません・・・」
のエラーになってしまいます。
どのように改善していけばよいでしょうか。

ソースはあちこちのものをミックスして書いていて、半分意味も分からずで、とんでもないことをしているかも知れません(VCは初心者で、ハンドルとかクラス、プロセスとかの知識に乏しいです)
また、まったく別で良い方法(CreateProcessの方が簡単だとか)があれば、よろしくお願いします。

VC++6での質問す。
◆やりたいこと◆
(1)内部から外部exeを引数ありで呼び出し、処理をさせます。
(2)その外部exeの結果コードを内部的に受け取り、エラー処理させます。
(3)外部exeの処理実行中は、できればDOS窓を非表示にさせます。

system()呼び出しは最も簡単なのですが、(3)が上手くできませんでした。

◆やってみた方法◆
こちらの過去質問も参考に見よう見まねでShellExecuteExを使ってやってみようとしました。

SHELLEXECUTEINFO sei;
DWORDdwRC;
LPVOID msg;
BOOLres;

ZeroMemory(&se...続きを読む

Aベストアンサー

SHELLEXECUTEINFO構造体に設定する値が間違っています。
この場合は下記の値を設定します。
sei.lpVerb = "open"
sei.lpFile = "hoge.exe"
sei.lpParameters = "param1 param2"

あとGetExitCodeProcess関数を使用するためにPROCESS_QUERY_INFORMATIONアクセス権を割り当てる必要があるのでOpenProcess関数を使用してアクセス権を割り当ててください。

QiPhoneアプリについて。

iPhoneアプリについて。
iPhoneで、脱獄せずにアプリのアイコンの画像を自由に設定できるアプリはありますか?
iPhoneだけで、アプリ(app)かiPhoneのSafariでやりたいです。
教えてください!

Aベストアンサー

>> パソコンを使うやり方を教えてください。

iPhone Explorerを使います。
但し、絶対にできる訳ではありません。

また、アップデートすると元に戻ります。

QVC++での外部プログラムの実行

初心者です。
VisualC++でフォームアプリケーションを作っているのですが、
他のexeファイルの実行の仕方がわかりません。
どなたか教えてくださいませんでしょうか。
アドバイスお願いします。

Aベストアンサー

system関数を使うと他のexeファイルの実行ができます。

system("C:\\hoge\\honya.exe");

ディレクトリ区切り文字には\\を使用してください。

この質問も参考になるでしょう。
http://oshiete1.goo.ne.jp/qa4240991.html

Qiphoneでapp storeアプリがダウンロードできない場合

iphoneでapp storeアプリがダウンロードできない場合
容量を超えていてiphoneでダウンロードできない場合どうやってアプリをダウンロードするのですか?パソコンと同期して、パソコンでダウンロードしたんですが
クリックしても動きません。

Aベストアンサー

こんばんは。

WiFi接続すれば、20MBを超えるアプリもダウンロードできます。

また、PCでの同期の場合は、iTunesでアプリの同期設定が必要になります。

QFindWindowの戻り値が違う!?

いつもお世話になっております。
FindWindowの戻り値についてご教授願います。

ret = FindWindow(NULL,"sample");
上記を実行した場合、取得する画面がアクティブの時と非アクティブの時でFindWindowの戻り値が違うのは何故でしょうか?

私は、sample画面が非アクティブでもアクティブ状態の時と同じハンドルが取得したのですが、良い方法は有りますでしょうか?

取得画面タイトル:sample
実行ファイル名:sample.exe

実行環境:WindowsXP
開発環境:VC++ 6.0

Aベストアンサー

No.1, No.2 への補足読みました。

VC++ に付属の Spy++ というツールを使うと,任意のウィンドウのウィンドウクラス名を調べることができます。
使い方は参考 URL を。

これで調べたウィンドウクラス名を,FindWindow の第1引数に渡してやればよいです。

ただし,ウィンドウクラス名は一意ではないので,確実に目的のウィンドウのハンドルが取れる保証はありません。
要は仕様でどこまで要求されるかですが,それじゃ困るという場合には別な方法を考えないといけませんね,ということで。

参考URL:http://www.microsoft.com/japan/developer/library/vcug/_asug_using_the_window_finder_tool.htm

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング