IPC C示例
AC示例使用WM_COPYDATA将搜索查询发送到Everything并检索结果。
发送查询
#define COPYDATA_QUERYCOMPLETE 0 BOOL sendquery(HWND hwnd,DWORD max_results,WCHAR * search_string,BOOL regex,BOOL match_case,BOOL match_whole_word,BOOL match_path) { EVERYTHING_IPC_QUERY * query; DWORD len; DWORD大小; HWND everything_hwnd; COPYDATASTRUCT cds; everything_hwnd = FindWindow(EVERYTHING_IPC_WNDCLASS,0); if(everything_hwnd) { len =(int)wcslen(search_string); size = sizeof(EVERYTHING_IPC_QUERY) - sizeof(WCHAR)+ len * sizeof(WCHAR)+ sizeof(WCHAR); query =(EVERYTHING_IPC_QUERY *)HeapAlloc(GetProcessHeap(),0,size); if(query) { query-> max_results = max_results; query-> offset = 0; query-> reply_copydata_message = COPYDATA_QUERYCOMPLETE; query-> search_flags =(regex?EVERYTHING_IPC_REGEX:0)| (match_case?EVERYTHING_IPC_MATCHCASE:0)| (match_whole_word?EVERYTHING_IPC_MATCHWHOLEWORD:0)| (?match_path EVERYTHING_IPC_MATCHPATH:0); query-> reply_hwnd = hwnd; CopyMemory的(查询- > search_string的,search_string的,(LEN + 1)*的sizeof(WCHAR)); cds.cbData = size; cds.dwData = EVERYTHING_IPC_COPYDATAQUERY; cds.lpData = query; if(SendMessage(everything_hwnd,WM_COPYDATA,(WPARAM)hwnd,(LPARAM)&cds)== TRUE) { HeapFree(GetProcessHeap(),0,query); 返回TRUE; } else { //所有IPC服务都没有运行 } HeapFree(GetProcessHeap(),0,查询); } } else { //找不到所有窗口。 //我们可以选择RegisterWindowMessage(“EVERYTHING_IPC_CREATED”)和 //等待Everything将此消息发布到所有顶级窗口时启动并运行。 } 返回FALSE; }
检索结果
void DisplayPathName(TCHAR * path,TCHAR * filename) { // ... //执行路径和文件名 // ... } LRESULT CALLBACK window_proc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam) { DWORD i ; EVERYTHING_IPC_LIST * list switch(uMsg) { case WM_COPYDATA: { COPYDATASTRUCT * cds =(COPYDATASTRUCT *)lParam; switch(cds-> dwData) { case COPYDATA_QUERYCOMPLETE: list =(EVERYTHING_IPC_LIST *)cds-> lpData; for(i = 0; i <list-> numitems; i ++) { DisplayPathName(EVERYTHING_IPC_ITEMPATH(list,&list-> items [i]),EVERYTHING_IPC_ITEMFILENAME(list,&list-> items [i])) } return TRUE; } 打破; } } 返回DefWindowProc函数(HWND,味精,wParam中,LPARAM); }