CreateProcess関数について
-
BUNGU
CreateProcess関数について
CreateProcess関数についてのレスがあったんですが、
CreateProcess関数で自分が持ってるアプリを適当に起動させてみたいです。
どなたかコード教えてくださいませんか?
CreateProcess関数で自分が持ってるアプリを適当に起動させてみたいです。
どなたかコード教えてくださいませんか?
Re: CreateProcess関数について
コマンドの実行あたりが役立つでしょうか。
適切なアドバイスをもらうには、試したソースコードと、上手く動かない場合のエラーメッセージや具体的な問題を書いて下さい。
フォーラムルールや投稿前チェックリストをご一読ください。
適切なアドバイスをもらうには、試したソースコードと、上手く動かない場合のエラーメッセージや具体的な問題を書いて下さい。
フォーラムルールや投稿前チェックリストをご一読ください。
-
BUNGU
Re: CreateProcess関数について
ええと
ソースコード自体作れないので質問なうです(汗
コマンドってやつ試みましたができませぬ。。。
たとえばデスクトップのexeを何かひとつ起動させるにはどうすればいいのか
ご指南いただければ幸いです
ソースコード自体作れないので質問なうです(汗
コマンドってやつ試みましたができませぬ。。。
たとえばデスクトップのexeを何かひとつ起動させるにはどうすればいいのか
ご指南いただければ幸いです
Re: CreateProcess関数について
ソースコード自体作れないとはどういうことでしょうか。開発環境を持っていないのでしょうか。
「コマンドってやつを試みました」とはどのように試みたのでしょうか。ソースコードは作れないけどどうにかして試みたのでしょうか。
具体的に何をやったのか、きちんと書いて下さい。
試みましたが「できませぬ」というのは、具体的にどう「できない」のでしょうか。「できない」にもいろいろあります。
ソースコードの作り方が分からず、試すこともできない。
ソースコードは一応作ってみたが、コンパイルエラーが発生して実行することができない。
実行はできるけれど、何らかのエラーが発生して期待した動作にならない。
実行もできるし、何もエラーが発生していない(ように見える)が、期待した動作にならない。
また、「期待した動作」とは何か、きちんと書いて下さい。
「僕は~が・・・となると思ったのですが、実際は~が△△となってしまいました。
僕の予想では◯◯が怪しいなと思うのですが、どうでしょうか。」
「コマンドってやつを試みました」とはどのように試みたのでしょうか。ソースコードは作れないけどどうにかして試みたのでしょうか。
具体的に何をやったのか、きちんと書いて下さい。
試みましたが「できませぬ」というのは、具体的にどう「できない」のでしょうか。「できない」にもいろいろあります。
ソースコードの作り方が分からず、試すこともできない。
ソースコードは一応作ってみたが、コンパイルエラーが発生して実行することができない。
実行はできるけれど、何らかのエラーが発生して期待した動作にならない。
実行もできるし、何もエラーが発生していない(ように見える)が、期待した動作にならない。
また、「期待した動作」とは何か、きちんと書いて下さい。
「僕は~が・・・となると思ったのですが、実際は~が△△となってしまいました。
僕の予想では◯◯が怪しいなと思うのですが、どうでしょうか。」
これは正に、僕が紹介したコマンドの実行の中の「CreateProcess()」にて解説されていることなのですが、そこの記述のどこかが理解できないのでしょうか。理解出来ない部分があるなら、具体的にどこが理解できてどこができないのか、書いて下さい。BUNGU さんが書きました: たとえばデスクトップのexeを何かひとつ起動させるにはどうすればいいのか
-
BUNGU
Re: CreateProcess関数について
ええと
これの
"C:\\Program Files\\Hidemaru\\Hidemaru.exe", // Command line.
は自分のデスクトップのexeのパスを書き換えればいいのですか?
あと がよく分かりません・・・
解説つけてくれたらうれしいです^^;
#include <windows>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
int iRtn = 0;
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );
cout << "秀丸を起動します\n";
// 秀丸を起動する
if( !CreateProcess( NULL, // No module name (use command line).
"C:\\Program Files\\Hidemaru\\Hidemaru.exe", // Command line.
NULL, // Process handle not inheritable.
NULL, // Thread handle not inheritable.
FALSE, // Set handle inheritance to FALSE.
0, // No creation flags.
NULL, // Use parent's environment block.
NULL, // Use parent's starting directory.
&si, // Pointer to STARTUPINFO structure.
&pi ) // Pointer to PROCESS_INFORMATION structure.
)
{
cout << "CreateProcess failed.";
iRtn = -1;
}
// Wait until child process exits.
WaitForSingleObject( pi.hProcess, INFINITE );
// Close process and thread handles.
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
cout << "秀丸を終了しました\n";
return iRtn;
}
"C:\\Program Files\\Hidemaru\\Hidemaru.exe", // Command line.
は自分のデスクトップのexeのパスを書き換えればいいのですか?
あと がよく分かりません・・・
解説つけてくれたらうれしいです^^;
Re: CreateProcess関数について
はい。その通りです。BUNGU さんが書きました: "C:\\Program Files\\Hidemaru\\Hidemaru.exe", // Command line.
は自分のデスクトップのexeのパスを書き換えればいいのですか?
このような、自分で少し実験すれば答えが分かるタイプの疑問を自分で試すことこそ、プログラミング上達への道です。
試す前から人に聞かずに、一度自分で実験してみてください。それでも上手くいかない場合に「~を試してみたのですが、△△となってしまいました。」のように質問するとGoodです。
#includeは、指定されたヘッダファイルをその場所に取り込む命令です。
#include <iostream>
でしたら、iostreamというヘッダファイルの中身で、#include <iostream>の行を置き換えます。
BUNGUさんが貼りつけたプログラムでは、coutを使うためにiostreamをインクルードしています。
最初のうちは、#include <iostream>はcoutを使うための呪文だ、と覚えておいてもいいかもしれません。
同様に、
#include <windows>
は、「windows」というヘッダファイルを、その行のところへ取り込みます。
・・・しかし、これは恐らくサンプルプログラムのミスだと思います。僕が今まで見たプログラムでは、windowsではなくwindows.hをインクルードしています。
ということで、もしwindowsが見つからずにコンパイルが失敗するようでしたら、
#include <windows.h>
と修正してみてください。
-
BUNGU
Re: CreateProcess関数について
ありがとうございます!
今度からそうするようにします!
それで実行してみました、
すると
'main' : ローカル関数の定義が正しくありません。
指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
というエラーが表示されてしまいます
何処を直せば良いでしょうか。。。
今度からそうするようにします!
それで実行してみました、
すると
'main' : ローカル関数の定義が正しくありません。
指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
というエラーが表示されてしまいます
何処を直せば良いでしょうか。。。
Re: CreateProcess関数について
そのエラーメッセージ、全部コピペしてますか?「必要なさそうだ」と勝手に判断して、重要な部分を省略してませんか?
本当に必要なメッセージかどうか判断が付くレベルになるまでは、エラーメッセージは全部コピペするといいです。
本当に必要なメッセージかどうか判断が付くレベルになるまでは、エラーメッセージは全部コピペするといいです。
-
BUNGU
Re: CreateProcess関数について
すみません
こんどから全部のエラーを書くようにします
エラー:
error C2601: 'main' : ローカル関数の定義が正しくありません。
error C2664: 'CreateProcessW' : 2 番目の引数を 'const char [33]' から 'LPWSTR' に変換できません。(新しい機能 ; ヘルプを参照)
指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
error C3861: 'main': 識別子が見つかりませんでした
こんどから全部のエラーを書くようにします
エラー:
error C2601: 'main' : ローカル関数の定義が正しくありません。
error C2664: 'CreateProcessW' : 2 番目の引数を 'const char [33]' から 'LPWSTR' に変換できません。(新しい機能 ; ヘルプを参照)
指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
error C3861: 'main': 識別子が見つかりませんでした
Re: CreateProcess関数について
エラーメッセージありがとうございます。
BUNGUさんの勉強のために、僕が感じるこのエラーメッセージの重要な場所を書いておきますね。
「変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。」というメッセージはむしろ悪い解決策を提示してしまっています。キャストして型を変換しても正しく動きません。
BUNGUさんの勉強のために、僕が感じるこのエラーメッセージの重要な場所を書いておきますね。
- 'CreateProcessW' : 2 番目の引数を 'const char [33]' から 'LPWSTR' に変換できません。
これは最重要と言ってもいいかもしれません。まさにエラーの原因が書いてあります。このメッセージをググると、似たような症状がたくさん引っかかります。 - error C2601
C2601でググると分かると思いますが、これはエラー番号です。で、このエラー番号が発生するエラーの例なんかを検索することができます。
同じエラー番号のエラーになってしまうようなソースコードを読めば、自分のソースコードのどこが悪いのか、分かります。
- 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
「変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。」というメッセージはむしろ悪い解決策を提示してしまっています。キャストして型を変換しても正しく動きません。
-
BUNGU
Re: CreateProcess関数について
なるほど
それでたったいま構成プロパティの文字をUnicodeから設定なしにかえてみたら
C2601: 'main' : ローカル関数の定義が正しくありません。
error C3861: 'main': 識別子が見つかりませんでした
というエラーが残ります
ローカル関数の定義とは何処ですればいいのでしょうか・・
それでたったいま構成プロパティの文字をUnicodeから設定なしにかえてみたら
C2601: 'main' : ローカル関数の定義が正しくありません。
error C3861: 'main': 識別子が見つかりませんでした
というエラーが残ります
ローカル関数の定義とは何処ですればいいのでしょうか・・
Re: CreateProcess関数について
追記です
CLRのWindows フォームアプリケーションで実行していたので
Win32 コンソールアプリケーションに直してみたところ、正常に動作しました。
ありがとうございました
CLRのWindows フォームアプリケーションで実行していたので
Win32 コンソールアプリケーションに直してみたところ、正常に動作しました。
ありがとうございました