Friday, November 27, 2009

Window explorer context menu

你想要在電腦按右鍵之後的 menu 選單出現你想要的軟體, 來打開你的檔案嗎 ?

你可以這麼做...

1.Open the registry ("執行"-> regedit)
2.到此路徑 [HKEY_CLASSES_ROOT\*\shell]
3.在 shell 中, 新增一個機碼, 此資料夾名稱為你想要在 menu 上出現的名稱
ex: Open AAA
4.在 Open AAA 下再新增一個機碼, 此資料夾名稱為 "command"
5.在 command 中有一個"(預設值)"的字串, double click, 並輸入你的數值資料,
輸入的內容為你的軟體exe檔的位置
ex: "C:\Program Files\ABC\AAA.exe" "%1"

這樣就完成了!!

這裡附上一個圖示範例



另外你也可以寫一個 .reg 檔, 來自動完成上面的動作

Write.reg
-----------------------------------------------
REGEDIT4
[HKEY_CLASSES_ROOT\*\shell\Open AAA]
[HKEY_CLASSES_ROOT\*\shell\Open AAA\command]
@="\"C:\\Program Files\\ABC\\AAA.exe\" %1"

如果想要移除, 也可以寫的 .reg 來自動移除

Remove.reg
-----------------------------------------------
REGEDIT4
[-HKEY_CLASSES_ROOT\*\shell\Open AAA]

Wednesday, November 25, 2009

Windows environment variable

* %ALLUSERSPROFILE%:All Users設定檔的資料夾位置。
* %APPDATA%:目前使用者的Application Data資料夾位置。
* %CD%:目前的工作資料夾。
* %CLIENTNAME%:目前使用者的NETBIOS電腦名稱。
* %CMDCMDLINE%:處理目前命令提示字元視窗命令的cmd.exe的完整路徑。
* %CMDEXTVERSION%:目前Command Processor Extensions的版本。
* %CommonProgramFiles%:Common Files資料夾的路徑。
* %COMPUTERNAME%:電腦名稱。
* %COMSPEC%::命令提示字元視窗的解譯程式路徑,通常與%CMDCMDLINE%相同。
* %DATE%:目前的系統日期。
* %ERRORLEVEL%:最近執行過的命令的錯誤碼;非零的值表示發生過的錯誤碼。
* %HomeDrive%:使用者目錄的磁碟機。
* %HomePath%:使用者家目錄。

source : http://www.blogger.com/post-create.g?blogID=29967203
* %HOMESHARE%:目前使用者共用資料夾的網路路徑。
* %LOGONSEVER%:目前使用者所登入的網路控制器名稱。
* %NUMBER_OF_PROCESSORS%:電腦的處理器數量。
* %OS%:作業系統名稱,其值固定為Windows_NT。
* %Path%:執行檔的搜尋路徑。
* %PATHEXT%:作業系統是為執行檔的副檔名。
* %PROCESSOR_ARCHITECTURE%:處理器的架構名稱,例如x86。
* %PROCESSOR_IDENTFIER%:說明處理器的文字(不一定會有此環境變數)。
* %PROCESSOR_LEVEL%:處理器的model number。
* %PROCESSOR_REVISION%:處理器的revision number。
* %ProgramFiles%:應用程式目錄,預設是C:\Program Files。
* %PROMPT%:目前解譯程式的命令提示字串。
* %RANDOM%:顯示0到32767之間的十進位整數亂數。
* %SESSIONNAME%:連上終端伺服器的session names。
* %SystemDrive%:系統磁碟機,預設是C:。
* %SystemRoot%:系統根目錄,預設是C:\WINNT或C:\WINDOWS。
* %SystemDirectory%:系統目錄,預設是C:\WINNT\System32或C:\WINDOWS\System32。
* %Temp%、%Tmp%:暫存檔目錄。
* %TIME%:目前的系統時間。
* %UserDomain%:包含使用者帳號的網域名稱,或者電腦名稱。
* %UserName%:使用者帳號名稱。
* %USERPROFILE%:目前使用者的設定檔路徑。
* %WinDir%:Windows目錄,預設是C:\WINNT或C:\WINDOWS。

Wednesday, May 27, 2009

soft power 軟實力

在 [幽默一定強] 一書提到...

所謂 "軟實力" 指一國以制度上,文化上,政策上的優越性或道德性,展現其吸引力;也泛指他人願意購買,稱許,學習,仿效的文化,組織,機制,產品...等。

Wednesday, April 01, 2009

BSTR簡介和內部結構

[轉載] BSTR詳解一 - BSTR簡介和內部結構
COM是一種跨編程語言的平台,需要提供語言無關的數據類型。多數編程語言有自己的字符串表示。
  • C++ 字符串是以0結束的ASCIIUnicode字符數組
  • Visual Basic字符串是一個ASCII字符數組加上表示長度的前綴。
  • Java字符串是以0結束的Unicode字符數組。
需要定義一種通用的字符串類型,可以很容易的匹配到不同編程語言。C++中,就是BSTR
2.1 BSTR 簡介
"Basic STRing"的簡稱,微軟在COM/OLE中定義的標準字符串數據類型。對於C++Windows頭文件wtypes.h中定義如下:
typedef wchar_t WCHAR;
typedef WCHAR OLECHAR;
typedef OLECHAR __RPC_FAR *BSTR;;
2.2 BSTR實現
COM中,字符用16-bit OLECHAR表示,這樣使COM可以支持各種code pages,包括Unicode。對於windows系統,可以簡單理解為OLECHAR使用的就是Unicode OLECHAR串與單字節字符串很類似,是一個以null結尾的buffer。唯一的區別是每個字符佔兩個字節,而不是一個
0 1 2 3 4 5 6 7 8 9 0 1
| H | E | L | L | O | \0|
^
OLCHAR
Figure 1. Format of an OLECHAR string.
使用以Null結尾的簡單字符串在COM component間傳遞不太方便。因此,標準BSTR是一個有長度前綴和null結束符的OLECHAR數組。BSTR的前4字節是一個表示字符串長度的前綴。BSTR長度域的值是字符串的字節數,並且不包括0結束符。由於是Unicode串,所以字符數是字節數的一半。這種方式的優點是允許程序員在BSTR串中間嵌入NULL字符。但是,BSTR的前四個字節表示長度,而OLECHAR數組的前四字節表示前兩個字符。這種情況下,對於C++程序,如何實現BSTROLECHAR的交換?答案是COM提供了兩個BSTR分配用的APISysAllocString / SysReallocString。函數返回的指針指向BSTR的第一個字符,而不是BSTR在內存的第一個字節。
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
0a000000 | H | E | L | L | O | \0|
^
BSTR
Figure 2. Format of a BSTR.
下面是SysAllocStringSysFreeString的偽代碼。
BSTR SimpleSysAllocString( const OLECHAR * sz)
{
if ( sz == NULL) return NULL;
BYTE* buf = new BYTE[sizeof(INT32) + (wcslen(sz)+1)*sizeof(OLECHAR) ];
if(buf == NULL)
{
return NULL;
}
else
{
INT32 len = wcslen(sz) * sizeof(OLECHAR);
*((INT32*) buf) = len;
wcscpy( (WCHAR*)(buf+sizeof(INT32)), sz);
return (BSTR)(buf+sizeof(INT32));
}
}
VOID SimpleSysFreeString( BSTR bstr)
{
if(bstr != NULL)
{
BYTE* start = (BYTE*)bstr - sizeof(INT32);
delete []start;
}
}

Tuesday, March 31, 2009

Convert between 'CString' and 'std::string'

source : How to convert between 'CString' and 'std::string'?

'std::string' to 'CString':

std::string s("Hello");
CString cs(s.c_str());



'CString' to 'std::string':

CString cs ("Hello");

// Convert a TCHAR string to a LPCSTR

CT2CA pszConvertedAnsiString (cs);

// construct a std::string using the LPCSTR input

std::string strStd (pszConvertedAnsiString);



std::string cannot always construct from a LPCTSTR i.e. the code will fail for UNICODE builds.

As std::string can construct only from LPSTR / LPCSTR, a programmer who uses VC++ 7.x or better can utilize conversion classes such as CT2CA as an intermediary.

Monday, January 19, 2009

MSN Errors debug

Recently, my MSN didn't get on line, and the error message code shows 81000306.

So, I check up from search page, and find out some resolutions to compete it.

1. error code 81000306 This one tells us to wait for couple minutes and it did works, though it's not suitable for impatient person. : (

2. MSN Errors I found an interesting blog for debugging the MSN errors. ( This solution seems didn't work on this problem >"<, but there are some trick to solve others. )

So check these out..~

Saturday, January 10, 2009

Dreamer : inspired from true story

It's so cold in today's morning...
When I wake up by the shining sun though in my dorm, I do some regular exercises on usual and because today is Sunday, so I also clean up my room to keep it neat.

So when I do all the thing in the morning, and I turn on the TV to watch my favorite channel, ESPN, to see what some games I like is undergoing. Today's NBA game is Nicker vs. Rocket, I'm not interesting. So I change the channel to movies, and look up some pretty good movie stories from Star Movies, though I don't like they have too much ads between the movie play.

And I see the good one, Dreamer: inspired from true story . I think I will like this story material , because I think the true story have its reality and it did have happened before that will inspire everyone to find some good enlightenment. These kind of movies always touch my heart to look to the positive way. I think this one did and I recommend you to see it.