VC++ Express edition 2008で、Command Promptを起動、directoryを替えようとして、
HINSTANCE ret = ShellExecute(m_hWnd,"open","cmd.exe",NULL,"c:\\Program Files",SW_SHOW)
で、m_hWndが定義されていないとエラーが出てきました。VC++2005 standard version では出るようですが、Express edition 2008では定義されてないようです。この部分、Expression editionではどのように定義するのか教えてください。2008 Express editionで別の変数が適当であれば、そちらを教えていただけませんか?
No.4ベストアンサー
- 回答日時:
Express EditionにはMFCライブラリは入っていないはずです。
Standard Editionには入っています。で、m_hWnd変数はCWndクラスのメンバ変数なのですが、そのCWndクラスまたはその派生クラスを使っているんでしょうか?
また、ShellExecute関数はWin32APIです。MFCライブラリの関数ではありません。
ご提示された、”外部プログラムを実行する”というのは、通常C++/CLIで、.Net Frameworkに用意されている関数やクラスでは実現できないコードを書くためにWin32APIや外部DLLの関数を呼び出したりするために使用するものでしょう。
勉強のためならばいいのですが、そうでないのならC++/CLIでShellExecute関数などのWin32APIありきなコードを書くのはやめることをおすすめします。
補足
ShellExecute関数のm_hWndの部分は、親ウィンドウのハンドルを渡します。今回の場合、Formクラスが親ウィンドウになるので、以下のような記述になるでしょう。
HINSTANCE ret = ShellExecute((HWND)this->Handle,"open","cmd.exe",NULL,"c:\\Program Files",SW_SHOW);
No.3
- 回答日時:
>HINSTANCE ret = ShellExecute(m_hWnd,"open","cmd.exe",NULL,"c:\\Program Files",SW_SHOW)
C++/CLIでこれと等価になりそうなのは以下のようなコードになると思います。
Process^ objProcess = gcnew Process;
objProcess->StartInfo->FileName = "cmd.exe";
objProcess->StartInfo->WorkingDirectory = "c:\\Program Files";
bool bSuccess = objProcess->Start();
しかし、ShellExecute(Win32API)、m_hWnd変数(MFC)、System::Windows::Forms::Form(C++/CLI)など、いろいろとごちゃ混ぜに使用しようとしているように見受けられます。これはやめたほうがいいです。特にMFCとC++/CLIは同時には使用できないです。
また、C++/CLIは、通常のC/C++とはソースコードの記述にかなり違いがあり、いきなりC++/CLIを使うのはお勧めできないです。
もし、通常のC/C++(Win32APIを含む)で書くのなら、プロジェクトを最初から作り直して始めることをオススメします。
また、C++/CLIで書くのなら、Win32APIやMFCのライブラリを利用することはやめることをオススメします。(一応Win32APIを併用する方法もあるがかなりややこしい)
回答ありがとうございます。私は少し混乱しています。Visual C++ 2005 standard、Visual C++ 2008 standardは、C++/CLIで、これらは、MFCライブラリを使えると思っています。"Visual C++2005 シニア編 林 晴比古"によれば、"外部プログラムを実行する P307"では、ShellExecute関数の使用が見られます。2008 Visual C++ Express editionではダメで、2005 or 2008 Visual C++ 2005, 2008 standard versionでは使えるという事は無いのでしょうか?
No.2
- 回答日時:
そのコードはどうみてもC++/CLIを使われてますね。
C++/CLIとC++は似て非なるものですので、リファレンスを探すしか無いですね。
私もC++/CLIは詳しくないですが"Processクラス"で出来るみたいです。
※C++/CLIはVBやC#と同じく.NET Frameworkで動くマネージドコードのプログラミング環境です。なので、exeファイルは機械語ではなくMSILコードで出力されるので理解しておいて下さい。
No.1
- 回答日時:
m_hWndは MFCというVC++のWindows用クラスライブラリを使う場合にCWndクラスなどのウィンドウハンドルを記憶しておく変数です
Expressバージョンで作成しているなら Win32APIでやっていると思います
この場合 m_hWndは自分で定義しない限りありません
メインウィンドウを作成した際に記憶している HWND型の変数があると思います
これを ShellExecuteに与えてみましょう
この回答への補足
早速回答ありがとうございます。デザインウインドウで入っていますので、自動的にVC++のプログラムが作成されてます。中を見てみたのですが、HWND型の変数が見当たりません。どのように宣言すればいいのでしょう。基本的な質問ですいません。
以下プログラムのコピーです。
#pragma once
#include "windows.h"
#include "commctrl.h"
#include "winNT.h"
namespace Startup {
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
/// <summary>
/// Form1 の概要
///
/// 警告: このクラスの名前を変更する場合、このクラスが依存するすべての .resx ファイルに関連付けられた
/// マネージ リソース コンパイラ ツールに対して 'Resource File Name' プロパティを
/// 変更する必要があります。この変更を行わないと、
/// デザイナと、このフォームに関連付けられたローカライズ済みリソースとが、
/// 正しく相互に利用できなくなります。
/// </summary>
public ref class Form1 : public System::Windows::Forms::Form
{
public:
Form1(void)
{
InitializeComponent();
//
//TODO: ここにコンストラクタ コードを追加します
//
}
protected:
/// <summary>
/// 使用中のリソースをすべてクリーンアップします。
/// </summary>
~Form1()
{
if (components)
{
delete components;
}
}
private: System::Windows::Forms::Button^ button1;
protected:
private:
/// <summary>
/// 必要なデザイナ変数です。
/// </summary>
System::ComponentModel::Container ^components;
#pragma region Windows Form Designer generated code
/// <summary>
/// デザイナ サポートに必要なメソッドです。このメソッドの内容を
/// コード エディタで変更しないでください。
/// </summary>
void InitializeComponent(void)
{
this->button1 = (gcnew System::Windows::Forms::Button());
this->SuspendLayout();
//
// button1
//
this->button1->Location = System::Drawing::Point(103, 108);
this->button1->Name = L"button1";
this->button1->Size = System::Drawing::Size(75, 23);
this->button1->TabIndex = 0;
this->button1->Text = L"button1";
this->button1->UseVisualStyleBackColor = true;
this->button1->Click += gcnew System::EventHandler(this, &Form1::button1_Click);
//
// Form1
//
this->AutoScaleDimensions = System::Drawing::SizeF(6, 12);
this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
this->ClientSize = System::Drawing::Size(292, 266);
this->Controls->Add(this->button1);
this->Name = L"Form1";
this->Text = L"Form1";
this->ResumeLayout(false);
}
#pragma endregion
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
HINSTANCE ret = ShellExecute(HWND hwnd,"open","cmd.exe",NULL,"c:\\Program Files\\Wireshark",SW_SHOW);
}
};
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Vba LongPtrについて教えてください 2 2022/08/19 11:14
- ドライブ・ストレージ Inspiron 15 7590 のSSDアップグレードするのにNVM Expressを使用する目的 1 2023/01/20 21:34
- 英語 メデァビーコンから出版されているTOEIC L&R TEST990点獲得Part5&6難問模試(タイ 1 2022/04/08 15:51
- その他(ゲーム) Switchのリトルナイトメア1&2セットについてなのですが、このセット内容は「リトルナイトメア1D 1 2023/08/28 02:42
- 据え置き型ゲーム機 【 Xbox Series X|S 】Far Cry® 6 1 2023/04/27 13:53
- Gmail おすすめメーラー 1 2022/11/23 20:25
- その他(ゲーム) SkyrimSEのMod organizer で困っています。誰か助けてください。 1 2022/12/05 01:49
- ビデオカード・サウンドカード 価格.comに記載されているグラフィックボードのバスインターフェースについて 5 2023/04/23 23:09
- 英語 技術論文の引用文献の英語表記法 3 2022/11/16 09:52
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
FriendとPublicの違い。。。
-
派生クラスから基本クラスprote...
-
C#で通常のbuttonコントロール...
-
DateAdd関数について質問があり...
-
クラスのアドレスを引数として...
-
エディットコントロールでEnter...
-
継承を重ねた場合のコストはど...
-
C++ protectedにアクセス不可
-
vba sendKeysを送る相手のソフ...
-
MessageBoxを継承したい
-
不要になった、普通の構造体の処理
-
ダイアログ表示時にチェックボ...
-
クラス内の構造体の実体化とア...
-
オブジェクト型の変数が定義さ...
-
c# Equalsメソッドについて
-
関数で値渡しと参照渡しではど...
-
Visual studio c# android オブ...
-
C# panel内のコントロールの使...
-
CreateObjectとはどういう意味...
-
ADODB.Connectionはインターフ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
FriendとPublicの違い。。。
-
既定のコンストラクタがない?
-
イベントにAddHandlerされてい...
-
クラスのアドレスを引数として...
-
ダイアログ表示時にチェックボ...
-
(UWSC) 「#32770」の意味わかり...
-
エディットコントロールのイベ...
-
エディットコントロールでEnter...
-
WindowsAPIのリストビューの...
-
CMainFrameクラスの使い方
-
C++ protectedにアクセス不可
-
DebugクラスとTraceクラスの違い
-
MessageBoxを継承したい
-
このコンパイルエラーの意味に...
-
MFCアプリのコマンドラインでパ...
-
MFCのドラッグ&ドロップについて
-
派生クラスから基本クラスprote...
-
【ASP.NET】 独自で作成したク...
-
C#で通常のbuttonコントロール...
-
ダイアログクラスのコントロー...
おすすめ情報