Thursday, May 17, 2007

KernelIOControl function

Parameter Bits Win32 Type Managed Type Typical Value
dwIoControlCode 32 DWORD Int32 IOCTL_HAL_GET_DEVICEID
lpInBuf 32 LPVOID IntPtr IntPtr.Zero (no input data required)
nInBufSize 32 DWORD Int32 0 (no input data required)
lpOutBuf 32 DEVICE_ID* byte[] byte[20] (20 bytes is the size of the DEVICE_ID structure)
nOutBufSize 32 DWORD Int32 20
lpBytesReturned 32 LPDWORD ref Int32 0

On Windows CE, the Platform ID and Preset ID can be any length.
e.g. int = KernelIoControl(IOCTL_HAL_GET_DEVICEID, NULL,
sizeof(DWORD), (VOID*)val, sizeof(DEVICE_ID), NULL);


Get Device ID

轉檔

Online FLV Converter
可以把youtube上的播放檔轉成MPEG4 (AVI/MOV/MP4/MP3/3GP)
並且提供連結供下載 速度也很快
只要把檔案網址貼上然後選擇要轉的檔案 就ok了

--不知道連結啥時會失效 -- 目前還是beta版

話說SourceForge.net真是提供opensource的好地方...

Tuesday, May 15, 2007

SendMessage & PostMessage

BOOL PostMessage(

... );

LRESULT SendMessage(

... );

SendMessage的傳回值是LRESULT、PostMessage的傳回直是bool

PostMessage 是將一個訊息送往某一個視窗 handle 的Message Queue,
所以應用程式本身並不會知道也不想知道這個
Message的處理結果,
但是SendMessage便不同了,
應用程式可以由傳回值知道這個Message的處理結果
那麼, 在程式發出 SendMessage 的請求時,
我們程式便將控制權移交給接受該Message的視窗,
等待他處理結束該
Message
所以該Message並不會送往 Message Queue,
而是直接執行該處理訊息函示

PostMessage和SendMessage的區別
Message Queue


差別在於同步跟非同步...

接收broadcast訊息

how to broadcast:

#define WM_HOLDKEY_ON (WM_USER+3041)
....
void InitThread()
{
WNDCLASS wndclass;
HANDLE hEvent[n]={0};
DWORD dwStatus;

hEvent[0] = CreateEvent(NULL, FALSE, FALSE, kHoldKeyEventName);
....
while(TRUE)
{
dwStatus = WaitForMultipleObjects(n, hEvent, FALSE, INFINITE);

switch(dwStatus)
{
case (WAIT_OBJECT_0 + 0):
SendMessage(HWND_BROADCAST,WM_HOLDKEY_ON,0,0);
break;
....}
}
}

catch broadcast message using MFC:

#define WM_HOLDKEY_ON (WM_USER+3041)
....
BEGIN_MESSAGE_MAP(CCatchBroadcast, CDialog)
ON_MESSAGE(WM_HOLDKEY_ON, OnHOLDKEY_ON)
END_MESSAGE_MAP()

....
LRESULT CCatchBroadcast::OnHOLDKEY_ON(WPARAM wParam, LPARAM lParam)
{
//do whatever
return 0;
}

using WIN API(not MFC):

#define WM_HOLDKEY_ON (WM_USER+3041)
....
LRESULT CALLBACK xxxMainProc (HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)
{
switch (iMessage)
{
....
case WM_HOLDKEY_ON:
//do whatever
break;}
return FALSE;
}


The WM_USER constant is used by applications to help define private messages for use by private window classes, usually of the form WM_USER+X, where X is an integer value.
WM_HOLDKEY_ON, 3041 是自己定義的,建立溝通可用這個方式傳送及接收自己定義的訊息

MFC message map 簡單明瞭的解釋處理訊息的三種方式~ 只有MFC的寫法

Wednesday, May 2, 2007

好玩的部落格

在sidebar加上
comment: 到 最新回應程式產生器 將產生出來的程式碼貼到 HTML/Javascript 的 tag (Customize -> Add a page element -> HTML/Javascript -> Add to Blog)

bookmarks: 要先註冊hemidemi的網站,已經有新增/收藏好的書籤之後,到工具(在右上方) -> Blog工具 -> 在您的部落格輪撥最新書籤,將程式碼用跟Comment同樣的方式加到sidebar

bookshelf: 先到aNobii網站註冊,只要打入ISBN或是書名就可以找到書的資訊,收藏好之後,網站也是提供程式碼讓使用者可以剪貼到自己的部落格