- PR -

windowsサービスからのマウス(キーボード)制御

投稿者投稿内容
ml
会議室デビュー日: 2009/03/04
投稿数: 5
投稿日時: 2009-03-04 18:29
C# .NET Framework2.0でサービスプログラムを作っています。
formアプリケーションでは
Cursor.Positionにてマウス位置を制御することが出来ていますが、
サービスプログラムを作って試しに或るタイミングで単純にCursor.Positionに値を設定しても
マウスの位置に変化が起きません。
プロセスのデバッグで確認するとサービスプログラム上はCursor.Position=の部分を実行しています。
何か方法があるのでしょうか?
よろしくお願いします。


[ メッセージ編集済み 編集者: ml 編集日時 2009-03-04 18:30 ]
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2009-03-04 18:49
サービス アプリケーションはデスクトップ コンテキストを持っていないので、デスクトップと対話できません(ウィンドウを表示したり、ユーザーからの入力を受け取ったりできない)。

ユーザーがログオンしていないときなど、どうしましょう?
ml
会議室デビュー日: 2009/03/04
投稿数: 5
投稿日時: 2009-03-04 19:01
Jittaさま

お返事ありがとうございます。
windowsログオン前、vistaのアカウントとパスワードの入力画面で
マウスとキーボードをリモート操作されているソフトを見た事があります。
(OS付属のリモートデスクトップ接続ではなく)
クレデンシャルプロバイダ周りをさわった事があるのですが、
あの辺りを使わなくてもサービスで出来るのではないかと思い
(上記ソフトは何となくサービスっぽかったので)
質問させて頂きました。
C#からsetcorsorposやsendinputでもかまわないのですが。。。
よろしくお願いします。
ドン・ファン
会議室デビュー日: 2009/01/29
投稿数: 1
投稿日時: 2009-03-04 19:07
未確認ですが、サービスのプロパティの「デスクトップとの会話をサービスに許可云々」をチェックすると出来ませんか?
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2009-03-04 19:24
引用:
サービスのプロパティの「デスクトップとの会話をサービスに許可云々」をチェックすると出来ませんか?



実行アカウントを、ログオン中のアカウントに変更して、やってください。
本番は、権限の低いアカウントを作って、そのアカウントにやらせて下さい。
ml
会議室デビュー日: 2009/03/04
投稿数: 5
投稿日時: 2009-03-04 21:02
ドン・ファンさん、Jittaさん

お返事ありがとうございます。
いずれも試してみましたが、動作しません。
単純にタイマーでcursor.position(setcursorposも試してみました)で
ちょっとずつマウスを動かすだけのコードで試しています。
同じ内容のものをformアプリケーションで動作する事は確認しています。
アタッチしてのデバッグでもタイマーで実行されているのは確認できます。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2009-03-04 22:13
引用:

mlさんの書き込み (2009-03-04 19:01) より:

windowsログオン前、vistaのアカウントとパスワードの入力画面で
マウスとキーボードをリモート操作されているソフトを見た事があります。
(OS付属のリモートデスクトップ接続ではなく)


これって、サービスでやってます?[CTRL]+[ALT]+[DEL] は、対話的な入力しか受け付けないと聞いているのだけれど。。。

たとえば、VNC を入れてリモートから操作すると、勝手に動いているように見えます。付属のリモート デスクトップだと、ローカルは強制的に接続を切られますが(ライセンス上の都合)、VNC ではリモートからもローカルからも操作できます。

ご参考
http://support.microsoft.com/default.aspx/kb/327618/ja
http://support.microsoft.com/kb/327618/ja
引用:

Windows サービス アプリケーションの概要
.NET Framework でサポートされている Windows サービスのクラスは、対話型ステーション、つまりログオン ユーザーとの対話をサポートしていません。また、.NET Framework には、ステーションおよびデスクトップを表すクラスが含まれていません。Windows サービスが他のステーションと対話する必要がある場合は、アンマネージ Windows API にアクセスする必要があります。


だそうです。
ml
会議室デビュー日: 2009/03/04
投稿数: 5
投稿日時: 2009-03-04 22:37
引用:

これって、サービスでやってます?[CTRL]+[ALT]+[DEL] は、対話的な入力しか受け付けないと聞いているのだけれど。。。


この時ではなく、アカウントとパスワードを入力出来る時の状態です。

ログオン前だけに サービスかと思っているのですが、
何か方法があるのでしょうね。
これが出来ているソフトを見た事があるだけに実現できればなぁと思っています。

スキルアップ/キャリアアップ(JOB@IT)