Seer-IPC

ACustomApp

processo

  1. A Barra de Espaço é acionada
  2. ACustomApp encontra o handle do Seer c++ HWND seer = FindWindowEx(nullptr, nullptr, SEER_CLASS_NAME, nullptr);
  3. ACustomApp prepara o caminho completo do arquivo selecionado
  4. Envia o caminho para o handle do Seer c++ void sendPath2Seer(HWND seer, LPCWSTR path) { COPYDATASTRUCT cd; cd.cbData = (_tcslen(path) + 1) * sizeof(TCHAR); cd.lpData = (LPVOID)path; cd.dwData = SEER_INVOKE_W32; SendMessage(seer, WM_COPYDATA, 0, (LPARAM)&cd); }
  5. Seer exibe a visualização do caminho


ACustomExplorer

processo

  1. ACustomExplorer: cria um novo arquivo de texto para armazenar seu classname
  2. Seer: todos os arquivos json neste caminho serão carregados após o Seer ser iniciado. Quando o usuário pressiona espaço, o Seer obtém o handle para corresponder ao classname através do GetForegroundWindow. Se corresponder a ACustomExplorer, o Seer envia uma mensagem WM_COPYDATA para o handle, e o valor de dwData é SEER_REQUEST_PATH .
  3. ACustomExplorer: após receber WM_COPYDATA, ele corresponde ao SEER_REQUEST_PATH de dwData, e envia uma mensagem de volta assim que possível com o caminho completo do arquivo selecionado.
  4. Seer: quando o Seer recebe a mensagem, ele visualiza o arquivo e o processo termina.
    • O código lógico é todo Win32, sendo completamente independente do código Qt da UI, mesmo que não haja framework Qt, isso não afetará a leitura.

exemplo