ホーム » 検索結果: Shell (ページ 3)

検索結果: Shell

2025年7月
 12345
6789101112
13141516171819
20212223242526
2728293031  

カテゴリー

アーカイブ

ブログ統計情報

  • 117,836 アクセス




ショートカット作成

ショートカット作成の CreateLink のドキュメントの場所など
CreateLink
CSIDL
KNOWNFOLDERID


サンプルの ::CreateLink を利用したコード.
呼出している所は次の様なコード.lnk がなければ CreateLink .あれば削除.
UNICODE 版としてビルドする必要がある.

	if (_taccess(lnk_path,0) != 0) {
		::CoInitialize(NULL) ;
		char	mb_lnk_path[MAX_PATH] ;
		::WideCharToMultiByte(CP_ACP,0,lnk_path,-1,mb_lnk_path,MAX_PATH,NULL,NULL) ;
		::CreateLink(exe_path,mb_lnk_path,descript) ;
		::CoUninitialize() ;
		}
	else {
		_tremove(lnk_path) ;
		}

CreatLnk.cpp
CreatLnk.zip


サンプル状態では使い勝手が良くないので,幾つか修正.

HRESULT	CreateLink	(
	LPCTSTR	lpszPathObj ,		//	LPCWSTR
	LPCWSTR	lpszPathLink ,		//	LPCSTR
	LPCTSTR	lpszDesc ,		//	LPCWSTR
	LPCTSTR	workingFolder ,		//	作業フォルダ
	WORD	hotkey = 0		//	
	)

CreatLnk.hxx
CreateLink


_UNICODE を指定してビルドすると

--------------------構成: T_Lnk - Win32 Release--------------------
コンパイル中...
T_Lnk.cpp
\\DevS\Documents\Develop\_.SRC\__CPR_\xtot.hxx(83) : error C2679: 二項演算子 '=' : 型 'unsigned short [2]' の右オペランドを扱う演算子は定義されていません。(または変換できません)(新しい動作; ヘルプを参照)
\\DevS\Documents\Develop\_.SRC\__CPR_\xtot.hxx(103) : error C2679: 二項演算子 '=' : 型 'unsigned short [2]' の右オペランドを扱う演算子は定義されていません。(または変換できません)(新しい動作; ヘルプを参照)
\\DevS\Documents\Develop\_.SRC\__CPR_\ttox.hxx(34) : error C2664: 'wcstoul' : 1 番目の引数を 'const char *' から 'const unsigned short *' に変換できません。 (新しい機能 ; ヘルプを参照)
        指示された型は関連がありません; 変換には reinterpret_cast、 C スタイル キャストまたは関数スタイルのキャストが必要です。
\\DevS\Documents\Develop\_.SRC\__CPR_\ttox.hxx(34) : fatal error C1903: 直前のエラーを修復できません; コンパイルを中止します。
cl.exe の実行エラー
T_Lnk.exe - エラー 4、警告 0

UNICODE などの定義が矛盾していることがあるのでそれを最初に指定する.
// (VS8)\VC\AtlMFC\Include\AfxV_W32.h

#ifdef	_MSC_VER
	#ifdef		_UNICODE
		#ifndef	 UNICODE
		#define	 UNICODE		// UNICODE is used by Windows headers
		#endif
	#endif
	#ifdef		 UNICODE
		#ifndef	_UNICODE
		#define	_UNICODE		// _UNICODE is used by C-runtime/MFC headers
		#endif
	#endif
#endif

https://dev.mish.work/wordpress/2020/09/25/i_def_aw-hxx/


2020/10/14
作成した CreateLink の引数.
IID_IPersistFile の Save は LPCOLESTR になっている.
IID_IPersistFile
IID_IShellLink は _UNICODE かどうかでそれぞれが使用される.
IID_IShellLink


lnk 作成

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

CFileStatus でアサート

ファイルの作成日時が正しくない?と CFileStatus でうまく動作しない.


このファイルは,プログラミング Windows 第5版の CD を Mac でコピーしたもの.
このファイルを CFile::GetStatus とすると,アサートなど.
VC 8 の場合,ATLTime.inl CTime コンストラクタの 200 行目付近で
  if(m_time == -1)
  {
    AtlThrow(E_INVALIDARG);
    }


—————————
TsHBMP
—————————
パラメータが間違っています。
—————————
OK
—————————


CFileStatus を使わずに,stat を使用する様に書換えてある程度は動作する様になった.
VC 14 では,stat がエラーで帰ってくる.この対応方法は不明.
CFileStatus を使用している所はかなりあるため,すべてに対応するにはしばらくかかる.
今回は Shell Extension でダウンしたため,その部分のみ対応.

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

Win 10 Pro 10240 にインストールできない

2015/03 頃はインストールできたと思うが…


2015/09/11
IIS をアンインストールして,インストール(「Windows の機能の有効化または無効化」)してみたがダメ.


手作業で環境を作成しようとして…
  オートメーションの部分が起動できない.
幾つかのいつもの設定は行ってたが,ちょっと忘れていて,
  exe などを置いていたフォルダのアクセス権を正しく設定してなかった.
  他に今回の固有の環境であるが,レジストリから登録情報を削除する必要もあった.


うまく動作したのは VC 8 Static MFC だったが VC 12 DLL にすると,またうまく動作しない?
VC 12 Static にしてもダメで VC 8 Static に戻したのに,今度はうまくない.
Win 10 を再起動してうまく通った.
うまく動作しなくなった後,タスクマネージャから終了できないものがありそれが影響するのか?


もう一回 VC 12 でビルドしたものにチャレンジ.
VC 12 Static MFC は通った.
VC 12 DLL MFC でも通り,結局原因は掴めず.


今回の事とは直接関係ないが,エクスプローラが何度か落ちた.
OS 自体の問題なのか,作成した シェルエクステンション の問題なのかは不明.

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

‘THIS_FILE’ がシンタックスエラーを…

今まで通っていたプロジェクトで,
  ComPrj03.cpp
  c:\…\memory(16) : error C2061: 構文エラー : 識別子 ‘THIS_FILE’ がシンタックスエラーを起こしました。
  c:\…\memory(17) : error C2091: 関数は関数を返せません。
  c:\…\memory(17) : error C2809: ‘operator new’ に仮引数リストがありません。
  c:\…\memory(20) : error C2954: テンプレートの定義はネストできません。
  cl.exe の実行エラー
  ComPrj03.obj – エラー 4、警告 0


ソースの先頭付近に #include <memory> を追加.
  #include “StdAfx.h”
  #include “ComPrj00.hpp”
  #include <memory>
 


2019/01/18

--------------------構成: MkZIP2 - Win32 Release--------------------
コンパイル中...
MkZIP2.cpp
リンク中...

MkZIP2.exe - エラー 0、警告 0
--------------------構成: MkZIP2 - Win32 Debug--------------------
コンパイル中...
MkZIP2.cpp
c:\program files\microsoft visual studio\vc98\include\memory(16) : error C2061: 構文エラー : 識別子 'THIS_FILE' がシンタックスエラーを起こしました。
c:\program files\microsoft visual studio\vc98\include\memory(17) : error C2091: 関数は関数を返せません。
c:\program files\microsoft visual studio\vc98\include\memory(17) : error C2809: 'operator new' に仮引数リストがありません。
c:\program files\microsoft visual studio\vc98\include\memory(20) : error C2954: テンプレートの定義はネストできません。
cl.exe の実行エラー

MkZIP2.exe - エラー 4、警告 0

#include “stdafx.h”
#include “MkZIP2.h”
#include <ShlObj.h>
#import <Shell32.dll> // named_guids
//#include <memory>


エラーになるのはデバッグ版のビルド.リリース版では通る.
#include <memory> を有効に.


2023/03/24
#define new DEBUG_NEW より後にインクルードしているとうまくない error C2061 , C2091 , C2809 , C2556

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

Fedora をインストール

Mac の VirtualBox に Fedora をインストール.
  最初,WIn 7 の VirtualBox に Ubuntu をインストールした.
  インストール直後は動作していたが,そのうち起動時にブルースクリーンとなることがあった.
  以前 Android 環境を入れた時もそうだったので,VirtualBox との相性か?


ホームにできるフォルダが日本語名となるため検索すると,
  ホームディレクトリのフォルダ名を日本語から英語に変更するには


2013/06/26
環境を作成した時点では,うまく Windows Network が見えなかったが,…
  今開いてみたら見える様になっていた.


2013/06/27
デスクトップをカスタマイズしようと,ここを参考に GNOME Shell を有効に,…
  インストール後,再起動して,「GNOME Shell 拡張機能」の場所がわからなかったので,
    「アクティビティ」-「アプリケーションの表示」-「Tweak Tool」.
      「検索ワードを入力…」に “Tool” と入力するか,「アクセサリ」で絞った方がはやいかも.

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

MinGW インストール

Android の開発環境を用意しようとしていて,
Pleiades – Eclipse プラグイン日本語化プラグイン をインストールまでは行っていた.
pleiades-e4.2-ultimate-32bit-jre_20130303.zip
以前インストールした(展開)時は,ファイル名の長さの制限で引っかかって,インストールまでで中断していた.


が,よくわからない.
その中に MinGW があったので,そこから,…


~\MinGW\bin に gcc.exe などがあったので,
テスト用の Hello.c を作成して,コンパイルすると a.exe はできた.


c:\~\My Documents\Temp\Test> type T_Hello.c
#include <stdio.h>
int main (void) {
  printf(“hello\n”) ;
  return 0 ;
  }
 
c:\~\My Documents\Temp\Test> C:\pleiades\eclipse\mingw\bin\gcc.exe T_Hello.c
 
c:\~\My Documents\Temp\Test> dir
ドライブ C のボリューム ラベルがありません。
ボリューム シリアル番号は 7C5D-D1D9 です
c:\~\My Documents\Temp\Test のディレクトリ
2013/06/20 14:19 .
2013/06/20 14:19 ..
2013/06/20 14:19 49,177 a.exe
2013/06/20 14:07 78 T_Hello.c
2 個のファイル 49,255 バイト
2 個のディレクトリ 114,850,582,528 バイトの空き領域
 
c:\~\My Documents\Temp\Test> a
hello
 


これでは使い勝手が悪いので調べると,MSYS が使えそう.
けど MinGW フォルダには見当たらない.
MinGw Getting Started のリンク mingw-get-inst より,もう一度インストール.


MinGW Shell で開いてくるのは,C:\MinGW\msys\1.0\home\Iwao
 
C:\>tree \MinGW\msys\1.0\home
フォルダ パスの一覧
ボリューム シリアル番号は 7C5D-D1D9 です
C:\MINGW\MSYS\1.0\HOME
└─Iwao
  └─Temp
    └─Test


MSYS コンソール内で,
  ネットワーク上のファイルは,//DevXP/C_Drive/…/c_src/
  ls c:
  ls \\
  ls \\\\DevXP\\C_Drive
  \\ と / は,等価?
  more ではなく less


C++ のコード(std::cout<<“Hello CPP” << std::endl ;)をコンパイルすると,
$ gcc testcpp.cpp
C:\~\Temp\ccYlk1I9.o:testcpp.cpp:(.text+0x19): undefined reference to `std::cout’
C:\~\Temp\ccYlk1I9.o:testcpp.cpp:(.text+0x1e): undefined reference to `std::basic_ostream …

C:\~\Temp\ccYlk1I9.o:testcpp.cpp:(.text+0x6a): undefined reference to `std::ios_base::Init::Init()’
collect2: ld はステータス 1 で終了しました
  gcc ではなく,g++ を利用するみたい.
 
また,出来上がった C++ の exe は,MSYS コンソールの外では,
—————————
TestCPP.exe – コンポーネントが見つかりません
—————————
libgcc_s_dw2-1.dll が見つからなかったため、このアプリケーションを開始できませんでした。
アプリケーションをインストールし直すとこの問題は解決される場合があります。
—————————
OK
—————————


2013/06/25
Eclipse を起動して,
 「ファイル」-「新規」-「C++ プロジェクト」,「Hello World …」-「MinGW GCC」.
ビルド,実行で,
Eclipse Hello MinGW

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

ZipFold と WinXP での zip

zae などの様に,zip 内のファイル名に 5c などの文字を含まない様にしている場合は OK .
つまり,zip のファイル名として 5c が含まれていても問題ない?
 → ZipFold が MBCS のためか? 単なるバグか?
     → CharFile.hxx GetFileAttribute の “\” 削除部分のバグ.


上は GetFileAttribute のバグが原因.
Shell を使用した zip クラスの動作では,5c が含まれていてもそれなりに動作する.
UNICODE 文字はうまくなさそう.


あるフォルダ以下の圧縮で,フォルダ名が 5c 文字で終わっている場合,
MFC 6 MBCS では,CFileFind::GetFilePath の影響を受ける.
::FolderF_EnumFiles 以下の部分で,新しく定義した iFileFind を使用する様に変更.


i_Tools

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

DImage の利用

Shell Extension を利用した画像表示.ダイアログにファイルをドロップすると表示する様に.
1. CStatic を用意.ピクチャコントロールを配置して ClassWizard で変数を追加.
2. DImageS の領域を確保.通常はヘッダに.
3. OnDropFiles で
    // CString dropFile = …. ;
    ImageS.SetFileName(dropFile) ;
    ImageS.Draw(&m_Image) ;
    {
      m_Image.ShowWindow(SW_HIDE) ;
      m_Image.ShowWindow(SW_SHOW) ;
      }
    // …
4. OnPaint で
    ImageS.Draw(&m_Image) ;
DImage サンプル
DImage では,ImageDMF が追加される.
DImage.zip

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

iShelExt.dll ダウン

explorer.exe の 0x000000018001907b (iShelExt.dll) でハンドルされていない例外が発生しました:
0xC0000005: 場所 0x00000000000000b0 を読み込み中にアクセス違反が発生しました。

コードを見たが,原因が特定できなかったのでハードコピー.


同様に MShellE.dll でも
explorer.exe の 0x0000000180061830 (MShellE.dll) でハンドルされていない例外が発生しました:
0xC0000005: 場所 0xffffffffffffffff を読み込み中にアクセス違反が発生しました。

これもよくわからない.


2012/08/10 追記
explorer.exe の 0x000000018003938e (MShellE.dll) でハンドルされていない例外が発生しました:
0xC0000005: 場所 0xffffffffffffffff を読み込み中にアクセス違反が発生しました。


2012/08/30 追記
explorer.exe の 0x0000000180018e30 (iShelExt.dll) でハンドルされていない例外が発生しました:
0xC0000005: 場所 0x00000000000000c0 を読み込み中にアクセス違反が発生しました。


2012/09/25 追記
Cache のインデックスが 2 ,Cache はクリアされている.


2012/09/27 追記
2 つのスレッドから Profile::GetInt 内を指した状態で止まっている.


2012/10/08 追記
IL_Env_GetStr など,static で確保しているのが原因か?


2012/10/11 追記
やはり,static Env ?


2012/11/12 追記
DocIB::GetBitmap に以下を追加して排他管理する様に変更してみた.
  _MutexS_ mt(FALSE,_T(“DocIB::GetBitmap”)) ;
  MutexS m(&mt) ;
また,Mutex の動作が機能する様にするためには,アプリケーションクラスのヘッダで以下が必要.
  #include AfxMT.h

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

CCheckListBox の使い方

1. 通常の手順で,リストボックスをダイアログに貼り付ける.
2. コントロールのプロパティを「オーナー描画」-「固定」,「文字列あり」-「チェック」に変更する.
3. クラスウィザードなどを利用して,コントロールの変数(CListBox)を登録する.
4. ヘッダファイルを開いて,CListBox を CCheckListBox に変更する.
5. 項目の追加は,CListBox などと同様に AddString など.
6. チェックの指定は,SetCheck で.
CheckListBox のプロパティ
CCheckListBox の使い方


「MFC 14 以降で表示がずれる」の対応

Is this 投稿 useful? Useful Useless 1 of 1 people say this 投稿 is useful.

explorer /e,/select

Explorer.exe コマンドライン オプション
  void CDropADlg::OnExecExplorer()
  {
    UpdateData(TRUE) ;
    CString file = m_SelectFile ;
    ShellExec se ;
    if (::FileIsDirectory(file)) {
      se.SetFile(file) ;
      }
    else {
      se.SetNon2QMark(TRUE) ;
      se.SetFile(_T(“explorer.exe”)) ;
      se.SetParamaters(_T(“/e,/select,”)+file) ;
      }
    se.Execute() ;
    }

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

RegRead でのエラー

RegRead メソッド


—————————
Windows Script Host
—————————
スクリプト: D:\Temp\MJobSel\Release.060\Script\20111114.wsf
行: 92
文字: 3
エラー: レジストリ キー “HKCU\Software\U–U–\M—\M—\FilePat_\User_Data” のルートが無効です。
コード: 80070002
ソース: WshShell.RegRead
—————————
OK
—————————


—————————
Windows Script Host
—————————
スクリプト: D:\Temp\MJobSel\Release.060\Script\20111114.wsf
行: 92
文字: 3
エラー: レジストリ キー “HKCU\Software\U–U–\M—\M—\FilePath\User_Dat_” を開いて読み取ることができません。
コード: 80070002
ソース: WshShell.RegRead
—————————
OK
—————————


どちらの場合も,キーの指定の間違い.


レジストリエディタでキーが開けなくなった場合の対応は,
レジストリ キーのオープンエラー
削除中にエラーが発生しました

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

登録エントリ (.reg) ファイルの構文

kb 310516 登録エントリ (.reg) ファイルを使用してレジストリ サブキーおよび値を追加、変更、または削除する方法
kb 256986 上級ユーザー向けの Windows レジストリ情報

reg export  key file
Win 7 で file が存在する時,”y/n” の確認が入る.XP ではない.
ShellExec クラス経由で呼び出していたので,file は更新されず原因がわかり難かったのでメモ.

{
 CString command = _T(“Reg.exe”) ;
 CString param ;
 {
  CString dateTime= CTime::GetCurrentTime().Format(_T(“%y%m%d%H%M%S”)) ;
  CString tmpFile = ::FolderAddLastSP(::GetTempPath()) + _T(“M___.tmp\\Reg\\”) + dateTime + _T(“.reg”) ;
  ::CreateEmptyFile(tmpFile) ;
   CFile::Remove(tmpFile) ;
  param = _T(“export hkcu\\”) + subKey + _T(” “) + tmpFile ;
  }
 {
  ShellExec se ;
  se.SetFile(command) ;
  se.SetNon2QMark(TRUE) ;
  se.SetParamaters(param) ;
  se.SetShowCmd(SW_HIDE) ;
  se.Execute() ;
  }
 }

//*******************************************************************************
// 関数名 :文字列に変換
// 作成日 :’10/03/05
//*******************************************************************************
CString RegAccessF::ToString (HKEY hKey,LPCTSTR subKey,LPCTSTR entry)
{
 HSecKey = GetSecKey(hKey,subKey,KEY_QUERY_VALUE) ;
 if (HSecKey == NULL) { return _T(“”) ; }
 Entry = entry ;
 Type = REG_NONE ;
 Count = 0 ;
 wchar_t wcEntry[1024] ;
 ::ToStringWC(wcEntry,countof(wcEntry),Entry) ;
 LONG checkStatus = ::RegQueryValueExW(HSecKey,wcEntry,0,&Type,NULL,&Count) ;
 if (checkStatus != ERROR_SUCCESS) { return _T(“”) ; }
 CByteArray dataAry ; dataAry.SetSize(Count+10) ;
 BYTE* dataPtr = dataAry.GetData() ;
 LONG get__Status = ::RegQueryValueExW(HSecKey,wcEntry,0,&Type,dataPtr,&Count) ;
 if (checkStatus != ERROR_SUCCESS) { return _T(“”) ; }
 CString str ;
 str.Format(_T(“\”%s\”=hex(%x):”),entry,Type) ;
 for (int index=0 ; index BYTE b1 = dataAry[index] ;
  CString bStr ; bStr.Format(_T(“%02x,”),b1) ;
  str += bStr ;
  }
 CloseSecKey() ;
 return str ;
 }
 

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

VC 10 Dialog を VC 6 に

VC 10 で作成したダイアログベースのプロジェクトを VC 6 に

  1. プロジェクト作成時の基本クラス CDialogEx → CDialog
  2. 「構成プロパティ」-「全般」の「出力ディレクトリ」と「中間ディレクトリ」を $(Configuration).100\ に
  3. RC ファイルなどが UNICODE だったため,Shift-JIS に
  4. RC ファイル内でエラーになる部分をコメントに
  5. ico ファイル内に2573x1293x16777216 (256x256x32 png) があり,ビルドエラーになったので削除
    C:\…\Project.rc (67): error RC2176 : old DIB in res\Project.ico; pass it through SDKPAINT
  6. StdAfx.h 内の AfxControlBar.h をコメントに
  7. CAboutDlg : CDialogEx となっているので,CDialog に
  8. CShellManager 関係をコメントに
  9. ON_COMMAND(ID_HELP, &CWinApp::OnHelp) をコメントに

ここまででビルド,実行はできたが,なんか変
VC 10 でのダイアログエディタの操作は可能だが,VC 6 では出来ない.
VC 10 で編集したものを,VC 6 でビルド,実行は可能?
ON_BN_CLICKED(IDC_XXX, &CBrwFileDlg::OnClickedXxx) の ‘&’ が邪魔.

* ここの情報は,動作などを保証するものではありません.個人的なメモです.

    Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

    画像付ファイル名のリストボックス

    ヘッダファイルへの追加
     #include “DImgS.hxx” または “DImg.hxx”
     #include “ODrawDcM.hxx”

     ListBoxDocMF m_ListDImage;
     CArray <DImageS,DImageS> DImgAry ; または <DImage,…>

    OnInitDialog など
     m_ListDImage.SubclassDlgItem(IDC_XXXX_FILE_LIST,this) ;
     m_ListDImage.Init() ;
     m_ListDImage.ResetContent() ;

    リストに表示するファイルの設定
     DImgAry.RemoveAll() ;
     for (int dIndex=0 ; dIndex<addFiles.GetSize() ; dIndex++) {
      DImageS dImg ; または DImage
      dImg.SetFileName(addFiles[dIndex]) ;
      DImgAry.Add(dImg) ;
      }
     m_ListDImage.ResetContent() ;
     for (int rIndex=0 ; rIndex<DImgAry.GetSize() ; rIndex++) {
      CString fileName = DImgAry.GetAt(rIndex).GetFileName() ;
      m_ListDImage.AddString(fileName,fileName) ;
       // 以下は登録時に画像を付ける場合
      CString mfName = CacheFile::GetCF_Name(fileName,1000) ;
      if (::FileIsExist(mfName)) {
       m_ListDImage.SetAtDocMF(rIndex,mfName) ;
       }
      else {
       HICON icon = DImageS_GetIcon(fileName) ;
       m_ListDImage.SetAtIcon(rIndex,icon) ;
       }
      }

    DImageS クラスでなく DImage クラスを使用した場合は,ImageDMF クラスをサポートする形になる.
    DImageS クラスでは,対応付けた EMF での動作になる.
    現状の ListBoxDocMF では Shell Extension を利用できないみたい.
    別のクラスを用意するか変更が必要.間にListBoxDocSE などを用意するか?
     

    Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

    ファイルを選択した状態で explorer.exe

    explorer.exe /select,c:~exmple.txt
    http://support.microsoft.com/kb/314853/ja
    https://www.betaarchive.com/wiki/index.php?title=Microsoft_KB_Archive/314853
    void CXxxxDoc::OnExecExplorer() 
    {
     CString docName = GetPathName() ;
     ShellExec se ;
     se.SetNon2QMark(TRUE) ;
     se.SetFile(_T("explorer.exe")) ;
     se.SetParamaters(_T("/e,/select,")+docName) ;
     se.Execute() ;
     }


    ShellExc.hxx , ShellExc.cxx


    S_Exec.hxx

    Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

    ドキュメントのダブルクリックを無効に

    ドキュメントのファイルタイプを指定してスケルトンを作成した場合
    CXxxxApp::InitInstance 内の以下をコメントに
     // EnableShellOpen();
     // RegisterShellFileTypes(TRUE);

    後から,ドキュメントタイプを指定する場合
    リソースの StringTable の対応するドキュメント文字列を変更する.

    Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

    起動時に MDI 子ウィンドウを表示しない

    起動時に MDIチャイルドウインドウを表示させない
    CXxxxApp::InitInstance の ParseCommandLine(cmdInfo); の後に
    if (cmdInfo.m_nShellCommand == CCommandLineInfo::FileNew) {
      cmdInfo.m_nShellCommand = CCommandLineInfo::FileNothing ;
      }

    Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

    タスクバーのドキュメント

    mk:@MSITStore:X:MSDNShellcc.chm::/platform/Shell/Shell_Int/Taskbar.htm
    http://msdn.microsoft.com/ja-jp/library/cc144179(VS.85).aspx

    Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

    ダイアログにドロップ機能の追加

    VC 6
    「ダイアログ プロパティ」-「拡張スタイル」タブ内の「ドラッグアンドドロップを許可」にチェック.
    「MFC ClassWizard」の「クラス情報」-「詳細設定オプション」の「メッセージフィルタ」を「ウィンドウ」に.
    「メッセージマップ」の「メッセージ」内の WM_DROPFILES を追加.


    VC 2022 など
    ダイアログの「プロパティ」で「ファイルを受け取る」を「True」に.
    「クラス ウィザード」の「メッセージ」タブで「WM_DROPFILES」を選択して「ハンドラーの追加」.
    VC 2022  WM_DROPFILES の追加


    void C???Dlg::OnDropFiles(HDROP hDropInfo) 
    {
        CStringArray dropFiles ;
        ::DropFilesToStringArray(hDropInfo,dropFiles) ;
        ...
        CDialog::OnDropFiles(hDropInfo);
    }
    //   WinMFC.hxx
    //*******************************************************************************
    // 関数名 :ドロップされたファイル名の取得
    // 作成日 :’07/10/19
    //*******************************************************************************
    BOOL DropFilesToStringArray (HDROP hDropInfo,CStringArray& strAry)
    {
        UINT nFiles = ::DragQueryFile(hDropInfo,(UINT)-1,NULL,0) ;
        CStringArray dropFiles ;
        for (UINT index=0 ; index<nFiles ; index++) {
             UINT len = ::DragQueryFile(hDropInfo,index, NULL,0) ;
                  len += 1 ; // 終端の NULL 文字の分を確保
             CString dropFile ;
             ::DragQueryFile(hDropInfo,index,dropFile.GetBuffer(len),len) ;
             dropFile.ReleaseBuffer() ;
             dropFiles.Add(dropFile) ;
             }
        strAry.Copy(dropFiles) ;
        return TRUE ;
        }

    2014/06/02 v_tstring DropFilesTo (HDROP hDropInfo) { v_tstring dropFiles ; UINT nFiles = ::DragQueryFile(hDropInfo,(UINT)-1,NULL,0) ; for (UINT index=0 ; index<nFiles ; index++) { UINT len = ::DragQueryFile(hDropInfo,index, NULL,0) ; len += 1 ; // reserve last '\0' tstring dropFile ; dropFile.resize(len,0) ; ::DragQueryFile(hDropInfo,index,&dropFile[0],len) ; dropFiles.push_back(dropFile.c_str()) ; } return dropFiles ; }
    Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.