File Annotation

Not logged in
5128eecc9f 2011-02-23        kinaba: //--- K.I.LIB ---
5128eecc9f 2011-02-23        kinaba: // kl_wcmn.h : windows-common-interface operatin
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: #include "stdafx.h"
5128eecc9f 2011-02-23        kinaba: #include "kilib.h"
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: static int CALLBACK __ki__ofp( HWND w, UINT m, LPARAM l, LPARAM d )
5128eecc9f 2011-02-23        kinaba: {
5128eecc9f 2011-02-23        kinaba: 	if( m==BFFM_INITIALIZED && d )
5128eecc9f 2011-02-23        kinaba: 		::SendMessage( w, BFFM_SETSELECTION, TRUE, d );
5128eecc9f 2011-02-23        kinaba: 	return 0;
5128eecc9f 2011-02-23        kinaba: }
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: bool kiSUtil::getFolderDlg( char* buf, HWND par, const char* title, const char* def )
5128eecc9f 2011-02-23        kinaba: {
5128eecc9f 2011-02-23        kinaba: 	// 情報セット
5128eecc9f 2011-02-23        kinaba: 	BROWSEINFO bi;
5128eecc9f 2011-02-23        kinaba: 	ki_memzero( &bi, sizeof(bi) );
5128eecc9f 2011-02-23        kinaba: 	bi.hwndOwner      = par;
5128eecc9f 2011-02-23        kinaba: 	bi.pszDisplayName = buf;
5128eecc9f 2011-02-23        kinaba: 	bi.lpszTitle      = title;
5128eecc9f 2011-02-23        kinaba: 	bi.ulFlags        = BIF_RETURNONLYFSDIRS | BIF_DONTGOBELOWDOMAIN;
5128eecc9f 2011-02-23        kinaba: 	bi.lpfn           = __ki__ofp;
5128eecc9f 2011-02-23        kinaba: 	bi.lParam         = (long)def;
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: 	// ダイアログ表示
5128eecc9f 2011-02-23        kinaba: 	ITEMIDLIST* id = SHBrowseForFolder( &bi );
5128eecc9f 2011-02-23        kinaba: 	if( id==NULL )
5128eecc9f 2011-02-23        kinaba: 		return false;
5128eecc9f 2011-02-23        kinaba: 	SHGetPathFromIDList( id, buf );
5128eecc9f 2011-02-23        kinaba: 	app()->shellFree( id );
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: 	// 終了
5128eecc9f 2011-02-23        kinaba: 	return true;
5128eecc9f 2011-02-23        kinaba: }
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: void kiSUtil::getFolderDlgOfEditBox( HWND wnd, HWND par, const char* title )
5128eecc9f 2011-02-23        kinaba: {
5128eecc9f 2011-02-23        kinaba: 	char str[MAX_PATH];
5128eecc9f 2011-02-23        kinaba: 	::SendMessage( wnd, WM_GETTEXT, MAX_PATH, (LPARAM)str );
5128eecc9f 2011-02-23        kinaba: 	for( char* x=str,*l=str; *x; x=kiStr::next(x) )
5128eecc9f 2011-02-23        kinaba: 		l=x;
5128eecc9f 2011-02-23        kinaba: 	if( *l=='\\' || *l=='/' )
5128eecc9f 2011-02-23        kinaba: 		*l='\0';
5128eecc9f 2011-02-23        kinaba: 	if( getFolderDlg( str, par, title, str ) )
5128eecc9f 2011-02-23        kinaba: 		::SendMessage( wnd, WM_SETTEXT, 0, (LPARAM)str );
5128eecc9f 2011-02-23        kinaba: }
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: int kiSUtil::getSysIcon( const char* ext )
5128eecc9f 2011-02-23        kinaba: {
5128eecc9f 2011-02-23        kinaba: 	SHFILEINFO fi;
5128eecc9f 2011-02-23        kinaba: 	::SHGetFileInfo(
5128eecc9f 2011-02-23        kinaba: 		kiPath("test.")+=ext, 0, &fi, sizeof(fi),
5128eecc9f 2011-02-23        kinaba: 		SHGFI_USEFILEATTRIBUTES | SHGFI_SYSICONINDEX | SHGFI_ICON | SHGFI_SMALLICON );
5128eecc9f 2011-02-23        kinaba: 	return fi.iIcon;
5128eecc9f 2011-02-23        kinaba: }
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: void kiSUtil::msgLastError()
5128eecc9f 2011-02-23        kinaba: {
5128eecc9f 2011-02-23        kinaba: 	char* pMsg;
5128eecc9f 2011-02-23        kinaba: 	::FormatMessage(
5128eecc9f 2011-02-23        kinaba: 		FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS,
5128eecc9f 2011-02-23        kinaba: 		NULL,::GetLastError(),MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),(LPTSTR)&pMsg,0,NULL );
5128eecc9f 2011-02-23        kinaba: 	app()->msgBox( pMsg );
5128eecc9f 2011-02-23        kinaba: 	::LocalFree( pMsg );
5128eecc9f 2011-02-23        kinaba: }
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: void kiSUtil::createShortCut( const kiPath& at, const char* name )
5128eecc9f 2011-02-23        kinaba: {
5128eecc9f 2011-02-23        kinaba: 	::CoInitialize(NULL);
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: 	IShellLink* psl;
5128eecc9f 2011-02-23        kinaba: 	if( SUCCEEDED(::CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER,IID_IShellLink,(void**)&psl)) )
5128eecc9f 2011-02-23        kinaba: 	{
5128eecc9f 2011-02-23        kinaba: 		psl->SetPath( kiPath(kiPath::Exe_name) );
5128eecc9f 2011-02-23        kinaba: 		psl->SetWorkingDirectory( kiPath(kiPath::Exe,false) );
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: 		IPersistFile* ppf;
5128eecc9f 2011-02-23        kinaba: 		if( SUCCEEDED(psl->QueryInterface(IID_IPersistFile,(void**)&ppf)) )
5128eecc9f 2011-02-23        kinaba: 		{
36ad977839 2017-05-30        kinaba: 			WCHAR wsz[MAX_PATH];
5128eecc9f 2011-02-23        kinaba: 			kiPath lnkfile( at );
5128eecc9f 2011-02-23        kinaba: 			lnkfile += name, lnkfile += ".lnk";
5128eecc9f 2011-02-23        kinaba: 			::MultiByteToWideChar(CP_ACP,0,lnkfile,-1,wsz,MAX_PATH);
5128eecc9f 2011-02-23        kinaba: 			ppf->Save(wsz,TRUE);
5128eecc9f 2011-02-23        kinaba: 			ppf->Release();
5128eecc9f 2011-02-23        kinaba: 		}
5128eecc9f 2011-02-23        kinaba: 		psl->Release();
5128eecc9f 2011-02-23        kinaba: 	}
5128eecc9f 2011-02-23        kinaba: 	::CoUninitialize();
5128eecc9f 2011-02-23        kinaba: }
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: bool kiSUtil::exist( const char* fname )
5128eecc9f 2011-02-23        kinaba: {
5128eecc9f 2011-02-23        kinaba: 	return 0xffffffff != ::GetFileAttributes( fname );
5128eecc9f 2011-02-23        kinaba: }
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: bool kiSUtil::isdir( const char* fname )
5128eecc9f 2011-02-23        kinaba: {
5128eecc9f 2011-02-23        kinaba: 	DWORD attr = ::GetFileAttributes( fname );
5128eecc9f 2011-02-23        kinaba: 	return attr!=0xffffffff && (attr&FILE_ATTRIBUTE_DIRECTORY);
5128eecc9f 2011-02-23        kinaba: }
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: // 挿入caldixF
5128eecc9f 2011-02-23        kinaba: // ファイル参照ダイアログ手抜き版
5128eecc9f 2011-02-23        kinaba: bool kiSUtil::getOpenFileNameDlg(HWND hwnd,char *rfn)
5128eecc9f 2011-02-23        kinaba: {
5128eecc9f 2011-02-23        kinaba: 	OPENFILENAME  ofn;
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: 	ZeroMemory((LPVOID)&ofn, sizeof(OPENFILENAME));
5128eecc9f 2011-02-23        kinaba: 	ofn.lStructSize = sizeof(OPENFILENAME);
5128eecc9f 2011-02-23        kinaba: 	ofn.hwndOwner = hwnd;
5128eecc9f 2011-02-23        kinaba: 	ofn.lpstrFilter = "アプリケーション(*.exe)\0*.exe\0全てのファイル(*.*)\0*.*\0\0";
5128eecc9f 2011-02-23        kinaba: 	ofn.lpstrFile = rfn;
5128eecc9f 2011-02-23        kinaba: 	ofn.nMaxFile = MAX_PATH;
5128eecc9f 2011-02-23        kinaba: 	ofn.Flags = OFN_FILEMUSTEXIST|OFN_HIDEREADONLY|OFN_EXPLORER;
5128eecc9f 2011-02-23        kinaba: 	ofn.lpfnHook = NULL;
5128eecc9f 2011-02-23        kinaba: 	// なんか持ってれば
5128eecc9f 2011-02-23        kinaba: 	if (GetOpenFileName(&ofn)){
5128eecc9f 2011-02-23        kinaba: 		lstrcpy(rfn,ofn.lpstrFile);
5128eecc9f 2011-02-23        kinaba: 		return TRUE;
5128eecc9f 2011-02-23        kinaba: 	}
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: 	return FALSE;
5128eecc9f 2011-02-23        kinaba: }
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: void kiSUtil::getOpenFileNameDlgOfEditBox(HWND wnd,HWND par)
5128eecc9f 2011-02-23        kinaba: {
5128eecc9f 2011-02-23        kinaba: 	char str[MAX_PATH];
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: 	str[0] = '\0';
5128eecc9f 2011-02-23        kinaba: 	::SendMessage( wnd, WM_GETTEXT, MAX_PATH, (LPARAM)str );
5128eecc9f 2011-02-23        kinaba: 	if( getOpenFileNameDlg(par,str) )
5128eecc9f 2011-02-23        kinaba: 		::SendMessage( wnd, WM_SETTEXT, 0, (LPARAM)str );
5128eecc9f 2011-02-23        kinaba: }
5128eecc9f 2011-02-23        kinaba: // 挿入ここまでcaldixF