プロが教える店舗&オフィスのセキュリティ対策術

【開発環境】VS2008 Professional
【言語】VisualStudio2008で扱える言語であれば何でも良い。できればC++かC#。

http://okwave.jp/qa/q5915713.html
No.5915713の質問をした者です。再びわからないことが出てきたので質問させていただきます。
ゲームパッドでマウス操作するアプリを作成していて、一応は完成しました。

以前の質問でSendInputを使用するというアドバイスをいただき、マウスの移動やクリックを発生させる事は出来ました。

しかし、WindowsVistaのUACで画面が暗転している時や、一部ソフトのインストーラが起動している間、操作が出来なくなってしまいます。

上記の操作不可能状態でもマウス操作以外の操作(ボタン押下時にファイル書き換え等)はできているので、イベントは拾えています。問題はSendInputにあるようです。

言語は現行アプリがC#で出来ているので、できればC#が良いのですが、不可能という事であればマウス移動だけ別アプリに切り分ける事も検討しています。

何か方法をご存知の方がいらっしゃいましたらよろしくお願いします。

A 回答 (2件)

> WindowsVistaのUACで画面が暗転している時



この状況での操作は、一般ユーザーのプロセスからは分離されているため、できません。
できるようにすると、UACの確認を勝手に操作されてしまい、UACの意味がなくなってしまいます。

できるようにするためには、全ユーザーのプロセスを対象として動作する、アプリよりOSに近いレベルで動作するものを作る必要があります。
    • good
    • 1
この回答へのお礼

ご返答ありがとうございます。
確かに、仰るとおりアプリで操作できてしまっては意味がないですね。
何か別の物で作る事も検討していきたいと思います。

お礼日時:2011/03/05 17:52

カーソル移動に関しては、Win32 APIのGetCursorPos()/SetCursorPos()をP/Invokeしてみては?




[System.Runtime.InteropServices.DllImport("user32.dll")]
[return: System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.Bool)]
static extern bool GetCursorPos(out System.Drawing.Point lpPoint);


[System.Runtime.InteropServices.DllImport("user32.dll")]
[return: System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.Bool)]
static extern bool SetCursorPos(int X, int Y);


// 使用例:
{
Point pnt;
GetCursorPos(out pnt);
const int delta = 4;
SetCursorPos(pnt.X + delta, pnt.Y);
}
    • good
    • 0
この回答へのお礼

ご返答ありがとうございます。
この通りに書き直してみましたが、変化はなかったようです(UAC暗転時に確認)
ひとまずは現状のまま使用して、問題があれば試してみようと思います。

お礼日時:2011/03/05 17:45

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!