ホーム » 検索結果: Shell

検索結果: Shell

2025年7月
 12345
6789101112
13141516171819
20212223242526
2728293031  

カテゴリー

アーカイブ

ブログ統計情報

  • 117,825 アクセス


ShellExecute.. properties

ファイルやフォルダの「プロパティ」ダイアログを表示したくなった.
以前調べた時,ShellExecute の lpOperation で指定すれば良いと思っていた.
Copilot に聞いてみると,次の様なコードが表示された.

{
	LPCTSTR   filePath  = _T("E:/_backup_") ;
	HINSTANCE hInstance = ::ShellExecute(NULL,_T("properties"),filePath,NULL,NULL,SW_SHOWNORMAL) ;
	if (UINT64(hInstance) < 32)	{
		DWORD	error = ::GetLastError() ;
		tstring	str   = ::Error_FormatMessage(error) ;
		std::tout << str << std::endl ;
		}
	}
{
	SHELLEXECUTEINFO sei = {0};
	sei.cbSize = sizeof(SHELLEXECUTEINFO) ;
	sei.lpVerb = _T("properties") ;
	sei.lpFile = _T("E:/_backup_") ;
	sei.nShow  = SW_SHOWNORMAL ;
	sei.fMask  = SEE_MASK_INVOKEIDLIST ;
	if (!::ShellExecuteEx(&sei)) {
		DWORD	error = ::GetLastError() ;
		tstring	str   = ::Error_FormatMessage(error) ;
		std::tout << str << std::endl ;
		}
	}

::ShellExecuteEx は表示できるが,::ShellExecute はエラーになる.
改めてドキュメントを見ると ::ShellExecute には “properties” がない.
::ShellExecuteEx   properties



C++&Win API 設定(Windows設定アプリ)を表示する
ファイルプロパティの表示
ShellExecute()とデフォルトブラウザの起動、拡張子の関連付け

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

Shell Extension のデバッグ

ここ 1ヶ月位,共通のコードを分割したり,古いままの部分を改良したりしていた.
ある程度区切りがついたので,ツール関係のプロジェクトからビルドして exe はできる様になった.
それぞれの動作チェックはこれから.


昨日新しいコードでビルドしたものに,「シェルエクステンション」のものがある.
新しいものに置き換えて PC を操作していると,エクスプローラがうまく動作しない.ダウンする.
他の exe で実行しても同様で,イベントビューアを見ると次の様になっている.

障害が発生しているアプリケーション名: DImg.exe、バージョン: 1.0.0.1、タイム スタンプ: 0x4b5822a3
障害が発生しているモジュール名: iShelExt.dll、バージョン: 1.55.2024.8、タイム スタンプ: 0x6751c1dc
例外コード: 0xc000041d
障害オフセット: 0x0004aadc
障害が発生しているプロセス ID: 0x5054
障害が発生しているアプリケーションの開始時刻: 0x01db477a20d02f17
障害が発生しているアプリケーション パス: L:\Document\Develop\Debug\ShellExt\DImg\Release\DImg.exe
障害が発生しているモジュール パス: C:\Users\Public\Documents\Tools\i_Tools\Test\iShelExt.dll
レポート ID: c898b214-2c4e-4701-8c17-27d414c106fb
障害が発生しているパッケージの完全な名前: 
障害が発生しているパッケージに関連するアプリケーション ID: 

シェルエクステンションでの表示データを求める部分を直接呼出している単体テスト用 exe では問題ない.
HBITMAP  テスト
これは予想通り.


「開く」ダイアログでシェルエクステンションのテストができるのでコンソール AP を作成.
https://itl.mish.work/i_Tools/Doc/blog/vc/c_sxt.zip
VC 2022 の「デバッグ」-「コマンドライン」で …\c_sxt.exe を指定.
VC 2022  iShellExt
__targv がうまくなかった.DLL の場合は NULL になる?


次の様に修正.

	#ifdef	_MSC_VER
	{
		if (G_arg.size() == 0) {
		//	::reg_argv(__argc,__targv) ;
			if (__targv != NULL) {
				for (int index=0 ; index<__argc ; index++) {
					tstring	av = __targv[index] ;
					G_arg.push_back(av) ;
					}
				}
			}
		}
	#endif

if (__targv != NULL)

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

::ShellExecute

「インデックスのオプション」を開くために ::ShellExecute などから開けないかと…
検索するとコマンドプロンプトなどで「control.exe /name Microsoft.IndexingOptions」とすれば良いことがわかった.


この動作の cpp のコード.

CString	Error_FormatMessage(const DWORD error)
{
	CString	message ;
	LPVOID	lpMessageBuffer = NULL ;
	if (::FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
			NULL,error,MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),
			(LPTSTR)&lpMessageBuffer,0,NULL)) {
		message = LPTSTR(lpMessageBuffer) ;
		::LocalFree(lpMessageBuffer) ;
		}
	return	message ;
	}
void CShellEDlg::OnExecute() 
{
	UpdateData(TRUE) ;
	HINSTANCE hInst = ::ShellExecute(this->GetSafeHwnd(),m_StrOper,m_StrFile,m_StrPara,NULL,SW_SHOW) ;
	if (UINT64(hInst) > 32)	{	return ;	}
	DWORD	error = ::GetLastError() ;
	CString	str ;
	{
		str.Format(_T("%d\r\n%d"),DWORD(hInst),error) ;
		str += _T("    ") + ::Error_FormatMessage(error) ;
		str += _T("\r\n") + m_StrOper ;
		str += _T("\r\n") + m_StrFile ;
		str += _T("\r\n") + m_StrPara ;
		}
	AfxMessageBox(str) ;
	}

CShellEDlg::OnExecute()
ShellE  メンバ変数
ShellE.exe
https://itl.mish.work/i_Tools/Doc/blog/vc/ShellE.zip


ShellExecute 関数の使い方
ShellExecute関数
ShellExecuteExを使ってファイルのプロパティダイアログを表示する際の注意点。

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

IShellLink::SetShowCmd

ツールなどのスタートアップへの登録.


スタートアップのパスの取得は次の様な感じ.

	LPITEMIDLIST	pidl = 0 ;
	::SHGetSpecialFolderLocation(NULL,CSIDL_STARTUP,&pidl) ;
	tstring	start_path = ::SH_GetPathFromIDList(pidl) ;

lnk の作成は,以前にツールを作成してその時のものを利用.
http://mish.work/joomla/index.php/i-tools/create-l.html
https://mish.myds.me/wordpress/dev/2020/01/11/msdn-createlink/
lnk のスタートアップへの登録は次の様にできる.

	tstring	start_lnk = ::Path_AddLastSP(start_path) + ::Path_GetTitle(file_path) + _T(".lnk") ;
	tstring	descript = _T("コメント") ;
	::Create_lnk(file_path.c_str(),start_lnk.c_str(),descript.c_str()) ;

今回は,robocopy のコマンドを BAT ファイルとして生成し,それをスタートアップへ登録したかった.
http://mish.work/joomla/index.php/i-tools/cl-copy.html
「ディレクトリ以下のコピー」ツール
動作としてはうまく機能するが,BAT ファイルを使用しているためコマンドプロンプトが表示されてしまう.
最小化された状態で起動する方が動作はスマート?
lnk 作成時に指定できるだろうと思い 検索 するとあった.
シェルリンク
IShellLink::SetShowCmd を使えば良さそう.
SW_SHOWMINIMIZED を指定してもうまく動作しない.SW_SHOWMAXIMIZED はうまく動作する.
SW_SHOWMINIMIZED ではなく SW_SHOWMINNOACTIVE を使うみたい.
::Create_lnk(file_path.c_str(),start_lnk.c_str(),descript.c_str(),work_dir.c_str(),SW_SHOWMINNOACTIVE) ;
::CreateLink している所を変更してうまくいった.
S_lnk.hxx

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

PHP escapeshellarg

以前から気にはなっていた PHP の escapeshellarg を調べてみた.


次の様なコードがうまくない.

<?php
	$param  = ($_REQUEST['input']) ;
	$cmd_to = "cal " . $param ;
	system	( $cmd_to ) ;
	?>

次の様な入力を意図しているが,
…/cal/?input=2020
cal 2020
後ろに次のコマンドを付加されるとうまくない.
…/cal/?input=2020;ls -l
cal 2020 ; ls -l
cal 2020 が表示された後 ls -l が動作している.
コマンドインジェクション」と呼ぶらしく,検索するといろいろと出てくる.


コマンドの引数にあたる部分に escapeshellarg を使用するか,$param をチェックするする必要がある.

	$cmd_to  = "cal " . escapeshellarg ( $param ) ;
Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

shell:sendto

ドキュメントの「右クリック」-「送る」に「メモ帳」を追加しようと思い検索.
SendTo フォルダに NotePad.exe のショートカットを作成すれば良い.
これはいつも行っていることなので知っていたが,新しいしことを見つけた.
【Windows】右クリックメニュー[送る]の活用方法、追加・設定方法(SendToディレクトリの場所一覧)
Windows10 「送る」によく使うフォルダーを追加する方法(SendTo)
送る(sendto)、スタートアップ(startup)のフォルダに簡単にアクセスする方法 | Windows10


「ファイル名を指定して実行」やエクスプローラのアドレス欄に shell:sendto と入力すると対応するフォルダを開くことができる.
ファイル名を指定して実行 shell:sendto
Shell コマンドで開く特殊フォルダー一覧
::SHGetFolderPath にあたる機能みたい.
今は ::SHGetKnownFolderPath
CSIDLFOLDERID

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

Shell Extension のデバッグ

Shell Extension で,縮小版の背景に GDI+ を使用して,どうも動作が安定しなくなった.
現象としては,環境によるが explorer.exe が「応答なし」に.
  GDI+ の GdiplusShutdown の呼び方が悪かったみたいで,DllCanUnloadNow で終わらせる様にした.
また,今回デバッグ用にダンプする様にしていて,そのファイルをエクスプローラで選択しようとするとフリーズ.
  これは,デフォルトでは出力しないことで回避.


今回これらをやっていて,以前から面倒と思っていた ShellExt.dll のデバッグ.
デバッグ版.dll が呼ばれる様に設定して,普通の exe で「開く」ダイアログで dll 内をデバッグできる.


Vector
https://jml.mish.work/i-tools.html

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

Shell を利用した zip

以下のページを参考にさせてもらって,zip を扱うクラスを作成した.
  http://eternalwindows.jp/installer/zip/zip01.html
  http://www.softist.com/programming/shell32-zip/shell32-zip.htm
但し,zip , CopyHere で検索すると以下が見つかり,本当はうまくないものと思われる.
  CopyHere メソッドから Zip ファイルを処理することはできません
  ついに解禁!.NET で ZIP 制御
ZipFold 2012.11
ZipFold.2012.11.19.zip
i_ZipFold 1.0.2013.1
i_Tools Vector
この exe では,パスワードに対応してません.エラーになります.


2022/01/06
i_Zip.hxx

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

Shell Extension 2012.03.22

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

Shell Extension InfoTip の追加

Shell Extension の作成 InfoTip

1.プロジェクトの作成
 MFC App Wizard(dll)
  「スタティックライブラリを使用した DLL」を選択
  「オートメーション」のサポート
2.クラスファクトリの作成
 Class Wizard で,クラスの新規作成
  基本クラスは CCmdTarget
  「タイプ ID で作成」
3.ヘッダ部に INTERFACE_PART の追加
 BEGIN_INTERFACE_PART(QueryInfoT,IQueryInfo)
  STDMETHOD (GetInfoFlags) (DWORD* pdwFlags) ;
  STDMETHOD (GetInfoTip ) (DWORD dwFlags,LPWSTR* ppwszTip) ;
 END_INTERFACE_PART (QueryInfoT)
 …
 BEGIN_INTERFACE_PART(PersistFile,IPersistFile)
 …
4.必要な変数を追加
 InfoTip の場合,FileName など
5.ソースに INTERFACE_MAP の追加
 BEGIN_INTERFACE_MAP(CI_ShellExt,CCmdTarget)
  INTERFACE_PART (CI_ShellExt,IID_IQueryInfo,QueryInfoT)
  INTERFACE_PART (CI_ShellExt,IID_IPersistFile,PersistFile)
 END_INTERFACE_MAP ()
6.CI_ShellExt::XQueryInfoT::~ の実装
 幾つかはある程度決まったコードになる.
CI_ShellExt::XQueryInfoT::GetInfoTipは,ppwszTipに表示する文字列を返す.


METHOD_PROLOGUE pThisでCCmdTargetの派生クラスにアクセス可能になる.


レジストリへの登録
[HKEY_CURRENT_USER\Software\Classes\CLSID\{56D044C5-9F47-4CD3-B130-9E52BE7460F3}]
@=”I.ShellExt”

[HKEY_CURRENT_USER\Software\Classes\CLSID\{56D044C5-9F47-4CD3-B130-9E52BE7460F3}\InProcServer32]
@=”C:\\Documents and Settings\\All Users\\Documents\\VC_TEST\\IShlExt\\Release\\I_Shl_E.dll”
“ThreadingModel”=”Apartment”

[HKEY_CURRENT_USER\Software\Classes\CLSID\{56D044C5-9F47-4CD3-B130-9E52BE7460F3}\ProgID]
@=”I.ShellExt”

拡張子の登録例
[HKEY_CURRENT_USER\Software\Classes\.Test_ShellExt\ShellEx\{00021500-0000-0000-C000-000000000046}]
@=”{56D044C5-9F47-4CD3-B130-9E52BE7460F3}”


{56D044C5-9F47-4CD3-B130-9E52BE7460F3} の部分は,ソースの IMPLEMENT_OLECREATE の前の行のコメントより


今回使用したコードは,IShlExt.zip


参考にしたのは,
Debugging with the Shell

MSDN Magazine 2000/04 新しいinfotip,アイコンオーバーレイ,シェルエクステンション
Windows 2000 UI Innovations: Enhance Your User’s Experience with New Infotip and Icon Overlay Shell Extensions

MSDN Magazine 2000/07 ハイパーテキストテンプレートファイルのカスタマイズによるエクスプローラの表示の拡張

Windows 95 ユーザーインターフェイス プログラミング


ExtractImage を実装してエラーになった場合
I_ShlExt.obj:error LNK2001:外部シンボル “_IID_IExtractImage” は未解決です
#include <initguid.h> を I_ShlExt.cpp の StdAfx.h の次に追加.

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

Shell.Tile…

以前,デスクトップ上のウィンドウを操作したいことがあった.


ToggleDT.scf
[Shell]
Command=2
IconFile=explorer.exe,3
[Taskbar]
Command=ToggleDesktop


TileVert.vbs
Set objShell = CreateObject(“Shell.Application”)
objShell.TileVertically


TileHorz.vbs
Set objShell = CreateObject(“Shell.Application”)
objShell.TileHorizontally


CascadeW.vbs
Set objShell = CreateObject(“Shell.Application”)
objShell.CascadeWindows


//**************************************************************************************************
// ファイル名 :CtrlDskT.cxx
// 機能名 :デスクトップの制御
// 作成者 :
// 作成年月日 :’07/08/08
// 変更履歴 :
//**************************************************************************************************
//
#include <Afx.h>

#include "DelFileE.hxx"
#include "CharMFC.hxx"
#include "ShellExc.hxx"
#include "HelpAPI.hxx"
#include "CtrlDskT.hxx"

////
//*******************************************************************************
// 関数名 :デスクトップの表示
// 作成日 :’07/08/08
//*******************************************************************************
// http://support.microsoft.com/kb/190355/ja
// クイック起動バーに [デスクトップの表示] アイコンを再登録する方法
BOOL ControlDesktop::ToggleDesktop (void)
{
  CString td_scf = ::GetTempPath()+_T("Command.tmp\\") + _T("ToggleDT.scf") ;
  if (::FileIsNothing(td_scf)) {
  // "デスクトップの表示.scf" の生成
    ::CreateEmptyFile(td_scf) ;
    CString tdCmd ;
    tdCmd += _T("[Shell]\r\n") ;
    tdCmd += _T("Command=2\r\n") ;
    tdCmd += _T("IconFile=explorer.exe,3\r\n") ;
    tdCmd += _T("[Taskbar]\r\n") ;
    tdCmd += _T("Command=ToggleDesktop\r\n") ;
    ::SaveText(td_scf,tdCmd) ;
    }
  ShellExec se ;
  se.SetFile(td_scf) ;
  se.Execute() ;
  { // 終了時に削除するように登録
    static DelFileE dfe ;
    dfe.Add(td_scf) ;
    }
  return TRUE ;
  }

////
//*******************************************************************************
// 関数名 :重ねて表示,上下に並べて表示,左右に並べて表示
// 作成日 :’07/08/08
//*******************************************************************************
// http://www.microsoft.com/japan/technet/scriptcenter/resources/qanda/jul05/hey0726.mspx
// Hey, Scripting Guy! デスクトップ上にウィンドウを並べて表示する方法はありますか
#define CD_AW_CascadeW 0
#define CD_AW_TileHorz 1
#define CD_AW_TileVert 2

BOOL ControlDesktop::CascadeWindows (void) { return
ArrangeWindows(CD_AW_CascadeW) ; }
BOOL ControlDesktop::TileHorizontally(void) { return
ArrangeWindows(CD_AW_TileHorz) ; }
BOOL ControlDesktop::TileVertically (void) { return
ArrangeWindows(CD_AW_TileVert) ; }

BOOL ControlDesktop::ArrangeWindows (const long type)
{
  CString cw_vbs = ::GetTempPath()+_T("Command.tmp\\") + _T("CascadeW.vbs") ;
  CString th_vbs = ::GetTempPath()+_T("Command.tmp\\") + _T("TileHorz.vbs") ;
  CString tv_vbs = ::GetTempPath()+_T("Command.tmp\\") + _T("TileVert.vbs") ;
  CString cmdvbs ;
  CString cmdExc ;
  switch (type) {
    case CD_AW_CascadeW : cmdvbs = cw_vbs ; cmdExc = _T("objShell.CascadeWindows \r\n") ; break ;
    case CD_AW_TileHorz : cmdvbs = th_vbs ; cmdExc = _T("objShell.TileHorizontally \r\n") ; break ;
    case CD_AW_TileVert : cmdvbs = tv_vbs ; cmdExc = _T("objShell.TileVertically \r\n") ; break ;
    default : cmdvbs = cw_vbs ; cmdExc = _T("objShell.CascadeWindows \r\n") ; break ;
    }
  if (::FileIsNothing(cmdvbs)) {
    ::CreateEmptyFile(cmdvbs) ;
    CString awCmd ;
    awCmd += _T("Set objShell = CreateObject(\"Shell.Application\")\r\n") ;
    awCmd += cmdExc ;
      // objShell.TileHorizontally
      // objShell.TileVertically
      // objShell.CascadeWindows
    ::SaveText(cmdvbs,awCmd) ;
    }
  ShellExec se ;
  se.SetFile(cmdvbs) ;
  se.SetShowCmd(SW_HIDE) ;
  se.Execute() ;
  { // 終了時に削除するように登録
    static DelFileE dfe ;
    dfe.Add(cmdvbs) ;
    }
  return TRUE ;
  }

デスクトップ上にウィンドウを並べて表示する方法はありますか
Shell.TileHorizontally method

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

Shell_NotifyIcon

SDK32: 通知領域にアイコンが登録されないことがある
http://support.microsoft.com/kb/418138/ja

マウスの位置の取得
BOOL ::GetCursorPos(LPPOINT lpPoint) ;

http://cid-535f5973454c1292.office.live.com/self.aspx/.Public/MFC/NotifyI.hxx.txt

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

ShellExtension

CXxx::XPersistFile::Load は呼ばれるのに CXxx::XExtractIcon::GetIconLocation が呼ばれない
 
[HKEY_CLASSES_ROOTCLSID{xxxxxxxx-…xxxxxxxxxxxx}InProcServer32]
@="ExtentionDLL.dll"
"ThreadingModel"="Apartment"
 
TheredingModel を指定すれば呼ばれるようになった
 
2008/04/03 16:25
Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

start mailto:test@example.com

新しい Outlook では MAPI サポートがなくなった?
新しい Outlook で使用できない機能: 拡張性
新しい Outlook と従来の Outlook の機能の比較
そのため,テンポラリに zip として圧縮して,それを手動で起動したメールソフトに添付して利用している.
これをもう少し簡単にできないかと…


思いついたのは,どこかにアップロードして,そのリンクからダウンロードする方法.
3D ツール
https://itl.mish.work/i_Tools/upload/share/data/Iwao-index-2025-04-21.htm


最近あまり見なくなったように感じるが,次の様な html でのリンクがある.
mailto:test@example.com
これを何とか呼び出せないか?
エクスプローラのアドレス欄に “mailto:test@example.com” と入力すると,メールソフトが起動できる.


コマンドプロンプトで試すと,”start mailto:test@example.com” と入力することで同様にできた.
start mailto:test@example.com


::ShellExecute では lpFile に指定することで同じように起動できる.
::ShellExecute  mailto:test@example.com
::ShellExecute で次の様に指定すると,「件名」と「本文」にそれぞれ “Hello” と “body” が入って起動できる.
mailto:test@example.com?Subject=Hello&body=body
コマンドプロンプトでは最初うまく起動できなかった.
start コマンドを調べると,省略可能な title があり,それを “” の様に空にして指定して意図した動作となった.
Windowsコマンドプロンプトの「start」コマンドを徹底解説:基本から応用まで
start "" "mailto:test@example.com?Subject=Hello&body=body"


今回やりたかったことからは外れるが,次の様に BAT ファイルなどにしておけばテンプレートとして利用可能.
「start "" "mailto:test@example.com?Subject=Hello&body=body"」の BAT ファイル

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

レジストリに文字化けしたキー

先日から CDocManager::RegisterShellFileTypes 関係を調べている
以前やった時は,MFC に依存した自前のコードが多かったのと,もう少し使いやすくできないかと…


それでいろいろとやっていると,レジストリの HKCU\Software\Classes\ の下に文字化けしたものができてしまった.
HKCU_Software_Classes___
REG_SZ の (ext)_auto_file となっている.
これは,ドキュメントをダブルクリックして「常に使う」を選んだ時と思うが,はっきりしない.
Win10 環境でも同様?
Win10   HKCU\Software\Classes\ ...


レジストリの直接編集によるファイルの拡張子と関連づけ
Windows 11とレジストリに非ASCII文字を利用するアプリに非互換問題 ~BSoDが発生
特定のレジストリ キーを削除できません。キーの削除中にエラーが発生する


関連付けのレジストリをチェックしましょう

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

他の PC からの再起動

先日から Win10 PC が突然フリーズする現象が発生する様になった.
仮想メモリの設定を自動にしてからは,画面が突然止まってしまう.
マウスやキーも入らない.「Num Lock」を押してもランプは変わらない.
ディスクアクセスのオレンジのランプはアクセスに応じて点滅している.
他の PC から,共有ファイルなどは見える.
「電源ボタン」で休止状態となる様に設定したが,反応はしない.


NAS を含む Linux であれば,SSH 接続して reboot コマンドなどが使用できる.
検索すると幾つか方法がありそう.
* リモートデスクトップ
* shutdown コマンド
* Power Shell の Restart-Computer コマンド
Windows 系OS で、リモートシャットダウンを設定する
パソコンをリモートでシャットダウンまたは再起動する方法は?
他のコンピュータをシャットダウンまたは再起動する方法


リモートデスクトップでの操作は期待できないが,取りあえず設定した.
コマンドによる操作は,対象 PC 上ではうまく機能するが,別の PC からはうまく機能しない.
shutdown /r /t 300
SSH 接続でもうまくいかない.


結局 SSH 接続する時のアカウントに管理者権限を与えて,そこから shutdown /r /t 300 とすることでうまくいった.
SSH 接続して shutdown /r /t 300


これで目的を達するかの確認は,次にフリーズした時なのでまだ何とも言えない.

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

サムネイル表示が止まる?

以前作成したエクスプローラサムネイル表示
iShellExt  2024/10/08
前からの現象だが,不定期に表示が止まってしまうことがあった.
ほとんどが個人的に作成したシェルエクステンションの影響だが,今回は違ったように思う.
全ての explorer.exe を終了させても改善されない.


再起動すれば良いのはわかっているが,順に exe を終了させることに…
dllhost.exe を終了させると,止まっていた表示が動き出した.
ハッキリしたことがわかってないので,とりあえずメモ.

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

TryHackMe を使って…

先日「7日間でハッキングをはじめる本」を購入して,その内容をやった.
7日間でハッキングをはじめる本 TryHackMeを使って身体で覚える攻撃手法と脆弱性
7日間とはいかず,2週間程度かかってしまった.


20年位前に作成した Web のシステムでは,これらの知識がなかったため幾つか問題があった.
何年か前に修正済みで,そのほとんどが「クロスサイトスクリプティング」だったと思う.


OSコマンドインジェクション」などは知っていたが,ポートスキャンやパスワードの具体的な部分がわかった.
デフォルトポートの危険性や,パスワードで「数桁の数字」などは意味がないことがよくわかる.


外には公開していないので問題なかったとは思うが
LAN 内の幾つかの機器をポートスキャンしてみると,意図していないものが開いたままのものがあった.
10年位前に追加したもので,設定を間違えたのか,デフォルトで開いていたのか…


2024/10/02
この様な記事を書いたからというわけではないと思うが,昨日から次の様なアクセスが来ている.

//mish.work/?a='>"></script><svg/onload=confirm(1)>&b='>"></script><svg/onload=confirm(2)>&c=...

特に問題ないと思うが,ログが汚くなってしまう.

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

¥¥(コンピュータ名) を開く

\\(ComputerName) を開きたいと思い,次の様なコードを書いた.

{
	tstring	self_name = _T("\\\\") + ::GetComputerName() + _T("\\") ;
	S_Exec	se ;
	se.SetFile(self_name.c_str()) ;
	se.Execute() ;
	}

これはこれでうまく動作するが,それを perplexity に問い合わせると
::ShellExecute エクスプローラ 自分自身をネットワーク名で開く

#include <windows.h>
#include <shellapi.h>

int main()
{
    TCHAR computerName[MAX_COMPUTERNAME_LENGTH + 1];
    DWORD size = sizeof(computerName) / sizeof(computerName[0]);
    
    // コンピューター名を取得
    if (GetComputerName(computerName, &size))
    {
        // ネットワークパスを構築
        TCHAR networkPath[MAX_PATH];
        wsprintf(networkPath, TEXT("\\\\%s"), computerName);
        
        // ShellExecuteを使用してエクスプローラーを起動
        ShellExecute(NULL, TEXT("open"), TEXT("explorer.exe"), networkPath, NULL, SW_SHOWNORMAL);
    }

    return 0;
}

そのままで動作するコードが表示されている.

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

CXxxxDlg::OnCreate が 2 回

「ある操作を行ったとき exe が 2 つ起動する」と報告があった.
言い訳になるが,通常この動作は年に 2 回程度しか通らないもの.また,他の操作により通らないこともある.
その条件になる様に環境を設定して試すと,確かに…


その部分のコードは,何年も変更はしていない.
いろいろと動作を確認していると,VC 10 以前では問題ないが,11 以降で 2 つ起動することがわかった.


その動作の部分のみを抜き出して動作を試した.

int CT_DlG_1Dlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CDialog::OnCreate(lpCreateStruct) == -1)
		return -1;
	// TODO:  ここに特定な作成コードを追加してください。
	{
		HWND	HWnd = NULL ;
		{
			CWnd*	mainWnd = AfxGetMainWnd() ;
			if (mainWnd != NULL) {
				HWnd = mainWnd->GetSafeHwnd() ;
				}
			}
		HINSTANCE  hInst = ::ShellExecute(HWnd,NULL,_T("NotePad.exe"),NULL,NULL,SW_SHOWNORMAL) ;
		return	-1 ;
		}
	return 0;
	}

CXxxxDlg::OnCreate が 2 回呼ばれる?
MFC の動作が変わったのか,CXxxxDlg::OnCreate が 2 回呼ばれるようになったみたい.
https://itl.mish.work/i_Tools/Doc/blog/vc/TDlg0614.zip


2 回目に呼ばれた時は,何もしないで return -1 とする様に変更予定.

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