• 締切済み

ウィンドウを持たないアプリケーションにデータを送信したい

 あるサービスコントロールマネージャに登録されているアプリケーションにメッセージIDと、データを送りたいのですが、ウィンドウを持っていない為、データの送り方が分かりません。 これが仮にウィンドウを持つアプリケーションだったならば、 PreCreateWindow()内で if (cs.lpszName) { WNDCLASS wc; ::GetClassInfo(AfxGetInstanceHandle(), cs.lpszClass, &wc); wc.lpszClassName = _T("サービス名"); // 好きな名前を設定 AfxRegisterClass(&wc); cs.lpszClass = wc.lpszClassName; } とでもしておいたならば、 hWnd=FindWindow(_T("サービス名"),ウィンドウタイトル); とすればよく、 PostMessage()を使う事が出来ると思うのですが、このPreCreateWindow()を通らない為に、この処理が使えないのです。  現状、サービスコントロールマネージャから起動するからか、ウィンドウがSpy++では見られない(生成していない?)状態です。exeを直に起動する分にはウィンドウが生成され、Spy++でも、所定の通り、「'サービス名'サービス名」として確認できます。FindWindow()でハンドルが取得でき、データも送れました。  が、これでは当然ながら見える形でウィンドウが生成されているわけで、それでは都合が悪く、結局、こちらの方法は採用不可となります。  どなたか、SCMで起動した場合のデータ送付方法をご存じではないでしょうか? よろしくお願いします。

みんなの回答

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

# MSDNで検索した限りの知識なので的外れなのかも … 使うとすれば OpenSCManagerでSCMデータベースのハンドルを取得 OpenServiceでサービスハンドルを取得 ControlServiceやHandlerなどで制御といった具合なように思います 作ったハンドルなどはCloseServiceHandleなどで閉じるのをお忘れなく

関連するQ&A