• ベストアンサー

SYSTEMユーザで動くサービス(Windows)において

現在SYSTEMユーザで動かすことを前提としたWindowsサービスプログラミングを行っています。 そのプログラムにおいてキーボードの状態を取得したいのですが、GetAsyncKeyStateやGetKeyStateなどのAPIは正常に動作しませんでした。 どのようにしてキーボードの状態を取得すればいいでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

プロパティにある「デスクトップとの会話をサービスに許可」が可能に 設定されていますか? 許可されていない場合は許可してみてください。

kenken3paa
質問者

お礼

早々に回答ありがとうございます。チェックを設定したところ正常に動作しました。 ところでこの設定をすることは推奨されていないと聞いたことがあります。 この設定をせずに取得する方法はないのでしょうか?

その他の回答 (1)

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

>この設定をせずに取得する方法はないのでしょうか? 私の知る限り、ないです。 コレを設定しないと、サービスが相手にしている画面やキーボードと 人間が相手にしている画面やキーボードは別の世界のモノになって しまいます。GetAsyncKeyState は正常動作しますが、あなたが見て いるキーボードを対象にした結果ではありません。 >この設定をすることは推奨されていない そんなことはないと思いますよ。どんな根拠があるんでしょう? まあ、素人の人が勝手に管理ツールのサービスのプロパティを イジルなと言うことなんでしょうが、必要ならしょうがないのでは?

kenken3paa
質問者

お礼

把握しました。ありがとうございます。

関連するQ&A

  • ターミナルサービスでログオンしているユーザにウィンドウを出す方法

    あるサービスプログラムが起動しているターミナルサービスに複数のユーザをログオンさせて、ユーザごとに、そのサービスプログラムからウィンドウを出す方法はありますか?OSはWindowsです。 サービスプログラムではなく、各ユーザセッションごとに1つのプログラム(プロセス)を起動すればいいのですが、このプログラムはメモリを食うため、セッションごとにプロセスを作るとメモリ搭載量を数十GBもつまなければなりません。 このプログラムは、メモリ上のデータをグラフィカルに表示するだけのプログラムです。Win32 API の、CreateWindowEx に セッションIDがついたようなAPIがあればベストのように思うのですが。 もしくは、ログオンしたユーザ側から別のCOMクライアントを使って、サービスプログラム上のハンドルを取得し、そこからウィンドウを表示させる方法でも良いです。

  • system関数(Windows)の戻り値!!

    こんにちは。 皆さんのお知恵をお借りしたいとおもいます。 現在Windows NT & VC++ でプログラムの勉強をしています。 例えば、aaa.cppのソース内で、exe(例えば、c:\work\sample.exe)を実行させて 成功したかどうか念の為、確認を行いたいと考えております。 ---aaa.cpp--- int rtn_flg; /* system関数の戻り値 */ (略) rtn_flg = system("c:\\work\\sample.exe"); /* sample.exeが正常に動作したか確認したい */ ------------- 上記のようなプログラムでsample.exeが正常に実行できたか、確認したいとかんがえております。 正常に実行できなかった場合というのは、たとえは『実行ファイルが存在しません。』などというシステムエラーです。 (sample.exe内で意図的にエラーをリターンしているといういみではありません。) 実際上記のプログラムを実行すると、正常にexeが動作したときも、例えばsample.exeの名称をssaammppllee.exeと実際にありえない名称にしても rtn_flg には"0"が返ってきます。 rtn_flgでexeが正常に動作したか、そうでないか確認できないものでしょうか? 大変わかりづらい質問でご面倒ですが、宜しくお願い致します。

  • windows8でユーザー使用できない。

    ユーザーアカウントのパスワードを入力すると、「Windows All-User install Agentサービスに接続されませんでした。 システム管理者に問い合わせて下さい。」というメッセージがでる。 ※OKWaveより補足:「NEC Android搭載タブレット」についての質問です。

  • サービスプログラムの制御

    MSDE2000を使ったシステムがあるのですが、しばらくすると、そのDBを参照や更新するソフトウェアの動作がかなり遅くなり、サービス(MSSQLSERVER)を再起動すると、正常動作に戻ります。 解決するには、定期的にサービスを再起動した方がいいと思うのですが、自動でこのサービスを再起動するプログラムを作る事は可能でしょうか? 可能であれば、どのようにしたらいいのでしょうか? どなたか助言をお願いします。 ・MSDE2000がインストールされているPCは、Windows2003Server ・↑のPCで動作させたい ・ぶらさがっている端末は、3台 ・Visual C++ 6.0 SP6

  • ホスティングサービスのシステムを作ってみたい

    LinuxでWEBサーバーを趣味程度で作ってみたいと思っています。そこで、ホスティングサービスのサイトみたいにWEB上でユーザーアカウントの取得などができる システムを作ってみたいと思います。 そこで、こういうシステム構築が詳しく載っている書籍やサイトをどなたかご存知なら教えてもらえませんでしょうか?又、そういうツールとかもあったらよろしくおねがいします。

  • Windows8.1 システムバックアップについて

    Windows8.1ノートPCで、内蔵SSDと外付けHDDという構成で、外付けHDDへ"Program Files" "Users" "ProgramData" を移動しています。この環境で、システム全体のバックアップを作りたいのですが、よい方法をお教えください。

  • windows2000とwindowsXP,2003で利用するWindowsAPIの差異

    お世話になっております。 現在VisualStudio2005 C++、OSはWindowsXPで、Frameworkに依存しないプログラムを構築中です。 現在問題となっているのは、XP、2003Serverで正常に動作していたプログラムが、Windows2000ではランタイムエラーとなることです。 APIで利用しているものとしては、ファイルの読み取り、作成を行うCreateFile()が挙げられます。 その他にも、暗号化を行うプログラミング、 参考 http://www.trustss.co.jp/smnCrypt000.html ユーザー認証に関わるプログラミング といったことを行っておりますが、どの項目においても、 うまくいかない印象を持っています。 Windows2000では、上記のようなことを行う場合にXP,2003とは違う処理を実行しなければいけないのでしょうか? もし、ご存じの方がいらっしゃいましたらご教授お願い致します。

  • system関数でphpが動作しない

    phpプログラムからphpプログラムをバックグラウンドで動作させようと下記のようにsystem関数を使いましたが、phpが動作しませんでした。 system("/usr/local/bin/php /home/user/www/test.php > /dev/null &"); 「動作しない」様子が、異常でして、コマンドラインからtopで調べてみると、phpのプロセスIDが何度も立ち上がり、上記関数があるプログラムをサーバーから消さないと、その状態が続きます。しかし、プロセスは立ち上がっても、phpプログラムは正常に動作していなようです。 さくらインターネット(スタンダード)の共用サーバーを使っています。サーバーのOSは、FreeBSD 4.10です。 よろしくお願い致します。

    • 締切済み
    • PHP
  • ユーザーテーブルとシステムテーブルを区別したい

    カテゴリーが違ったらすみません。 VC++のプログラムで SQLTables,SQLBindCol関数を使ってDB上のテーブル名の一覧を取得しています。 この時、システムテーブル(例えば、AccessならMSys_...,Oracle9なら_ALL_INSTANTIATION_DDL等)も取得してしまいます。 ユーザーが生成したテーブルだけの一覧を作りたいので困っています。 ユーザーが生成したテーブルとシステムテーブルを区別する方法があったら教えて下さい。

  • 勝手にサービスがシステムにインストールされました?

    1分くらいPCの画面から目を離していたら、小さな画面が表示されていました!! よく読んでから閉じたら良かったのですが、読まずに閉じてしまいました。 Adobeのマークがあった事だけは覚えていました。 Flash Playerだと思い、最新が来ているのかと確認しましたが違いました。(最新の状態でした。) 怖かったので「コンピューターの全体のスキャン」しましたが、検出されませんでした。 「イベントビューアー」を見たら、Windowsログ→システムにそれらしきものを見つけました!!  (サービスがシステムをインストールしました) サービス名 Adobe Flash Player Update Service サービスの種類 ユーザーモードサービス *サービス開始の種類 要求による開始!! サービスアカウント Local System *私が要求してしまったのでしょうか!!?覚えがありません・・・当たったんでしょうかね?? ○どうしたら良いですか?問題は無いのでしょうか?? Flash Player の更新設定は(推奨)だったのですが、怖くなって通知を受取るだけのにしました。 システムの復元に、ポイントは出来てませんでした。 プログラムと機能やアドオンに、追加されたものはありません。 Windows7 32bit IE11 Flash Player バージョンは22.0.0.209です。 「よろしく、お願いします!!!」

専門家に質問してみよう