ホーム » Windows (ページ 12)
「Windows」カテゴリーアーカイブ
ファイル数
あるフォルダに,ユーザが作成した 3D データを,自動でファイル名を振って保存する様にしている.
但しファイル名の一部はユーザ指定.
ロジック上は,36^4 で 1,679,616 管理できるはず.
これがいっぱいになったと言われて…
通常の運用であれば,1 日に 100 個はかなりきつい.
それでも 16,000 日かかる.
そんなことがあり,ファイル名の空きを検出するツールを作成中.
かなり前の事だが,iRMX の FD のフォーマット?で,指定しないと 200 個位がデフォルトだったと記憶している.
NTFS ではその様なことはないと思ってたが,はっきりした情報があったのでメモ.
TechNet – ファイル システム
クリップボードに…
オフスクリーンにレンダリングしたものをクリップボードにコピーしていて,
5000x5000x4 バイトの CF_BITMAP がうまく動作しない.
原因は Office クリップボードの制限みたいで 8 M まで.
Office クリップボードにアイテムを追加できない場合の確認事項
無効にして対応.
よくわからないが,以下の様にした.
CF_METAFILEPICT StretchDIBits
CF_BITMAP AlphaBlend
AlphaBlend function (Windows) – TechNet – Microsoft に,
An error occurs (…) if the source device context identifies an enhanced metafile device context.
コピー画像は,
いろいろやっていて,一度 EMF に吐いて
::GetEnhMetaFile(…) で返される HENHMETAFILE を CF_ENHMETAFILE で意図した動作となった.
{
CString tmpPath = ::GetTempPath() ;
tmpPath = CString(::Path_AddLastSP(tmpPath).c_str()) + _T(“Debug.tmp”) ;
tmpPath = CString(::Path_AddLastSP(tmpPath).c_str()) + ::GetFileTitle(::GetModuleFileName()) ;
CString nowStr = CTime::GetCurrentTime().Format(_T(“%d%H%M%S”)) ;
CString tmpName = CString(::Path_AddLastSP(tmpPath).c_str()) + nowStr + _T(“.emf”) ;
::CreateFolder(tmpPath) ;
::ToEMF(dib,tmpName) ;
HENHMETAFILE hMetaFile = ::GetEnhMetaFile(tmpName) ;
return hMetaFile ;
}
…
::SetClipboardData(CF_ENHMETAFILE, hGMemEnhM) ;
i_DIB_x.hxx
i_DIB_Fn.hxx
i_dib.hxx
今度はメモリメタファイル(第 2 引数を NULL)にして,
{
CMetaFileDC mf_DC ;
BOOL ret = mf_DC.CreateEnhanced(NULL,NULL,NULL,NULL) ;
::AlphaBlend (mf_DC.GetSafeHdc(),dRect,dib) ;
HENHMETAFILE hEnhMetaF = mf_DC.CloseEnhanced() ;
return hEnhMetaF ;
}
CreateEnhanced の幾つかの引数が NULL は知らなかった.
CreateEnhMetaFile
Programming Windows 5 18.2.2
Programming Windows 5
XP 環境のクリップブックや,Word 2003 などでの CF_METAFILEPICT がうまくない.
{
CMetaFileDC mf_DC ;
BOOL ret = mf_DC.Create() ;
::StretchDIBits (mf_DC.GetSafeHdc(),dRect,dib) ;
HMETAFILE hMetaFile = mf_DC.Close() ;
hGMemMeta = ::GlobalAlloc( GHND, (DWORD) sizeof(METAFILEPICT)) ;
{
LPMETAFILEPICT lpMFP = (LPMETAFILEPICT)GlobalLock(hGMemMeta) ;
lpMFP->mm = MM_TEXT ;
lpMFP->xExt = dRect.right ;
lpMFP->yExt = dRect.bottom ;
lpMFP->hMF = hMetaFile ;
}
::GlobalUnlock(hGMemMeta) ;
return hGMemMeta ;
}
StretchDIBits とした.
Win 10 TP
Win 10 TP JP 9926 を入れてみた.
詳しく調べてないが,幾つか気になったことを.
VerifyVersionInfo で取る様に直したと思うが,6.2 として認識している?
ウィンドウのフレームの幅が広い?
ドロップダウン付きのツールバー?で,後ろのボタンが切れてしまうことがある.
Web に上げた exe だと?
コンテキストメニューが表示されない
あるダイアログベースの exe をテストしていて,右クリックでメニューが表示されない現象となった.
ボタンによる動作のメニューは表示される.
デバッガで追いかけると,次の様なコードの CMenu::LoadMenu が FALSE となっていた.
void CXxxxDlg::PopupSingleSel(CPoint pt,CWnd *wnd)
{
CMenu menu ;
if (!menu.LoadMenu(IDR_SINGL_SEL)) { return ; }
CMenu* pPopup = menu.GetSubMenu(0);
…
}
ボタンによるメニュー表示は次のコード.
void CXxxxDlg::OnOther()
{
CMenu menu ;
if (!menu.LoadMenu(IDR_OTHER)) { return ; }
CMenu* pPopup = menu.GetSubMenu(0);
…
}
時刻の同期
6/20 に HDL-Z2WM2C2 を追加した.
ソースファイルの保管のサーバとしての利用で,Win7 USB 2 HDD と比べても遜色ない.
ひとつ気になることが,思っていたよりファンの音がうるさい.
先日,クライアントの PC と WSS で,時間が少しずれていたので time.windows.com で時刻を合わせた.
今日時刻を見てみると 10 秒位の差ができてしまっている.
もう少し精度が欲しかったので検索すると,
インターネット時刻機能のポーリング間隔を調整する方法
Windowsの時計がずれる / 自動で正確に合わせる小技 (Windows 7/8.1編)
これらを参考にさせてもらって,1 日に 1 回程度の設定とした.
Win7 srv 2021
VirtualPC の Win 7 で,
ログの名前: System
ソース: srv
日付: 2014/04/25 10:33:13
イベント ID: 2021
タスクのカテゴリ: なし
レベル: 警告
キーワード: クラシック
ユーザー: N/A
コンピューター: DevS
説明:
サーバーは 60 秒間に 1 回、作業項目を割り当てることができませんでした。
検索すると,イベント ID 2021 およびイベント ID 2022 のトラブルシューティング方法.
メモリを 512 M だったのを 1024 に.
同じ様な状況下で 2021 は出ていないので,ひとまず様子見.
2014/05/22 追記
頻度はかなり減ったが,5/19 ~ 5/21 で何度かログが残っている.
Win XP 100%
RegSvr32 で ocx などの登録
ocx や dll の登録は,「管理者として実行」した「コマンド プロンプト」で次の様にを入力する.
RegSvr32 c:\~\AcListFF.ocx
Vista 以降では管理者として実行していないと,
[Window Title]
RegSvr32
[Content]
モジュール “C:\Users\Iwao\Desktop\Temp\AcListFF.ocx” は読み込まれましたが、DllRegisterServer への呼び出しはエラー コード 0x80040200 により失敗しました。
この問題の詳細については、エラー コードを検索語として入力してオンラインで検索してください。
[OK]
次の様に,「コマンド プロンプト」を「管理者として実行」する.
そして,
2024/05/21
RegSvr32 と入力すると
---------------------------
RegSvr32
---------------------------
モジュールを登録するには、バイナリ名を指定する必要があります。
使用法: regsvr32 [/u] [/s] [/n] [/i[:cmdline]] dllname
既定- DllRegisterServer を呼び出してサーバーを登録する。
/u - DllUnregisterServer を呼び出してサーバーを登録解除する。
/s - サイレント; メッセージ ボックスを表示しない。
/i - /u と併用しない場合は、DllRegisterServer の呼び出しが成功した後で、
DllInstall(TRUE, [cmdline]) を呼び出して dll をインストールする。
/u と併用する場合は、DllInstall(FALSE, [cmdline]) を呼び出して dll を
アンインストールし、DllInstall が成功したら DllUnregisterServer を呼び出す。
/n - DllRegisterServer または DllUnregisterServer を呼び出さない。
このオプションは /i と併用する必要がある。
dllname - エントリ ポイントを呼び出す DLL への (絶対または相対) パス。この DLL は、選択したオプション (DllRegisterServer、DllUnregisterServer、DllInstall) に応じて呼び出されるエントリ ポイントをエクスポートするために必要です。
---------------------------
OK
---------------------------
LCMapString , _tmain , setlocale
_mbctombb を呼出しているコードがあり,その対象の箇所は以下の様なコードで置換え可能とわかった.
::LCMapString(::GetUserDefaultLCID(),LCMAP_FULLWIDTH,str,-1,newStr..)
LCMapString の動作をコンソール AP として確認していて,
2 つ目の引数 dwMapFlags で LCMAP_SIMPLIFIED_CHINESE を見つけた.
ちょっと忙しいので詳細は後で,
_tsetlocale(LC_ALL,_T(“”)) を呼出してなかったため,UNICODE.exe でコンソールに何も表示されなかった.
Win7 が勝手に起動
以前にも似た様な現象で悩まされたが,…
この時は,
Vista プレインストールのディスクが壊れたので,Win 7 に.
Win 7 としての使用を始めた時からの現象で,14:00 頃の決まった時間に起動された.
ここに書かれていることがそのまま当てはまったので,その内容で解決した.
今回はちょっと違う.
起動される時間が不定期.0:00 頃落として,20~30 後や,17:00 頃など.
休止状態にして,一度落ちてすぐ起動することもあり.
現象は最近 1 週間位.
デバイスや AP をインストールした記憶はないが,Update はあり得る.
一先ず,デバイスマネージャの NIC の「…スタンバイ状態を解除…」のチェックを外した.
それとは異なる会社の Win XP
時間がなかったのであまり確認できなかったが,…
「休止状態」にしても,電源が落ちないで再起動となってしまう.
こっちは NIC の関係か?
2012/09/27 追記
Win 7 の方は,「デバイスマネージャ」の設定を変更してから,今の所,勝手には起動していない.
2012/10/09 追記
先日 10/5 会社に行った時,特に設定変更してないのに「休止状態」にできた.
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
ログオン スクリーンセーバを無効に
[HKEY_USERS\.DEFAULT\Control Panel\Desktop]
“ScreenSaveActive”=”0”
LogonScreenSave.zip
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
ビルドエラー fatal error C1060
VC 8 でのビルドでエラー
c:\program files\microsoft visual studio 8\vc\atlmfc\include\afxtempl.h(674) : fatal error C1060: ヒープの領域を使い果たしました。
c:\program files\microsoft visual studio 8\vc\atlmfc\include\afxtempl.h(675): クラス テンプレート のメンバ関数 ‘void CArray::AssertValid(void) const’ のコンパイル中
with
[
TYPE=Circle,
ARG_TYPE=Circle
]
\\dp340xpp\d_drive\develop\circary.hxx(79) : コンパイルされたクラスの テンプレート のインスタンス化 ‘CArray’ の参照を確認してください
with
[
TYPE=Circle,
ARG_TYPE=Circle
]
エラーメッセージの通り,不要な AP を終了することにより対応.