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);
}