初めて質問させていただきます。よろしくお願いします。

最近使ってみたフリーソフトで、キー操作やマウスの動きを記録して再生するものを体験しました。大変便利に感じ、自分自身でもプログラムを作ってみようと思い、WindowsのAPI等を調べています。

さらに、参考書やソースコードのありそうなところも探しているのですが、なかなか見つかりません。
どなたか、ヒントになりそうな書籍名やサイトをご存じないでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (2件)

すいません、↓はCで作る場合でした。


VBはよくわからないですが、やりかたはあってるんじゃないかと。(^^;

この回答への補足

はい、VBでもなにかしらの方法はあると思います。
この構造体が含まれているWin32APIがVBでも同じように使えるか調べてみます。

引き続き調査を続けています。よろしくお願いします。

補足日時:2001/05/16 12:59
    • good
    • 0

自分で作ったわけではないのですが・・・



WndProc()中でWM_KEYDOWNやWM_MOUSEMOVE,WM_LBUTTON~,WM_RBUTTON~の
各メッセージを監視して、メッセージが来た時の時間と内容を保存してあげれば
出来るのではないでしょうか?

//メッセージ保存用の構造体(例)
struct {
DWORD time;
UINT msg;
WPARAM wParam;
LPARAM lParam;
} ControlData[100000];

時間はTimeGetTime()などでとってあげればよいと思います。
再生は記録された時間どおりにメッセージを投げてあげればOK。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

時間も記録しなければ、正確な再生とはいえませんよね。
考えが抜けていました (^^;

(お礼が遅れてごめんなさい)

お礼日時:2001/05/16 12:59

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

このQ&Aと関連する良く見られている質問

QReadProcessMemoryの読み込みバイト数について(VB/API)

ReadProcessMemoryは
Declare Function ReadProcessMemory Lib "Kernel32" (hProc&, Addr&, Buf&, BufLen&, Re&) As Boolean
という引数で呼び出しますが、4バイト以上を一度に読み込む方法はあるのでしょうか。

説明サイトではBufをByte, Integer, Long等に設定して読み込んでいるものは見かけます。

しかし、例えばHEAP一つを丸ごと読み込もうと読み込み処理をループさせると、フリーズ気味になってしまいます。かといってDoEventsでトラップしても読み込み速度は遅いままで解決に至りません。

そこでBufを文字列型で宣言し、ReadProcessMemoryを使用した後、
For I& = 1 To BufLen
Tmp$(I) = Right(Left(Buf, I),1)
Next I
としたのですが、予期しないデータが返ってくることを確認しました。
(メモ帳のHEAP領域を16バイト読み込んで確認)

C++で作成した関数を使用することなく、上記を解決する方法はあるのでしょうか、ご存知の方、心当たりのある方、ぜひご教授頂きたく存じます。

ReadProcessMemoryは
Declare Function ReadProcessMemory Lib "Kernel32" (hProc&, Addr&, Buf&, BufLen&, Re&) As Boolean
という引数で呼び出しますが、4バイト以上を一度に読み込む方法はあるのでしょうか。

説明サイトではBufをByte, Integer, Long等に設定して読み込んでいるものは見かけます。

しかし、例えばHEAP一つを丸ごと読み込もうと読み込み処理をループさせると、フリーズ気味になってしまいます。かといってDoEventsでトラップしても読み込み速度は遅いままで解決に至りません。

そこ...続きを読む

Aベストアンサー

byte型変数の配列の先頭の要素を参照渡ししてください。

QエクセルVBAのヒントをください

エクセルのある列に、文字列が入っているとします。
たとえば、Aであったり、Cであったり、A,C,Fとカンマ区切りで複数の文字列(個数は不定)
が入っていたりします。
このとき、一行に一つの文字列しか含まないように、カンマで区切られた文字列を展開し、
複数行に分けて格納したいと思っています。

たとえば、一番上の行のセルにA、二番目の行に「C,D,A」、三番目の行にB、四番目の行に
「E,A」と入っていたら、各行に一文字列のみ入るように、上からA、C、D、A、B、E、Aという行を
作りたいと思います。各セルに含まれる文字列の個数は不定で、規則性はありません。

基本的に、
(1)各セルに含まれているカンマの数を調べる
(2)カンマの数だけ次の処理を繰り返す
 ・行挿入
  ・最初のカンマの位置を調べる
  ・先頭からカンマまでを切り取る
  ・上記の値をセルに入力
 ・行挿入
  ・2番目のカンマの位置を調べる
  ・1番目のカンマの位置+1から2番目のカンマの位置まで切り取る
  ・上記の値をセルに入力
上記をカンマの数だけ繰り返す。

といった具合にしていくのだと思いますが、このような処理をするのに
はどの程度のVBAのスキルが必要ですか?

上記のヒントや、参考になるサイト、書籍があればご教授ください。

エクセルのある列に、文字列が入っているとします。
たとえば、Aであったり、Cであったり、A,C,Fとカンマ区切りで複数の文字列(個数は不定)
が入っていたりします。
このとき、一行に一つの文字列しか含まないように、カンマで区切られた文字列を展開し、
複数行に分けて格納したいと思っています。

たとえば、一番上の行のセルにA、二番目の行に「C,D,A」、三番目の行にB、四番目の行に
「E,A」と入っていたら、各行に一文字列のみ入るように、上からA、C、D、A、B、E、Aという行を
作りたいと思います。各...続きを読む

Aベストアンサー

>とりあえずのことはできました。
なら別に良いですが
>..Worksheets("Sheet1").UsedRange.Rows.Count
Sheet1のA:B列以外にデータがあればUsedRange.Rows.Countは多くなったりする可能性がありますから危ういですね。
無駄にLoopする事になります。


>For i = 0 To ingYCnt
>  y = i + 1
iをなぜ0から始めるのか、かつ y = i + 1 で毎回 +1 して i はLoopの中で使ってません。
1から始めて y の代わりに i を使えば良いです。


行挿入してコピーして貼り付け、よりも
上から順番に値をセットしていったほうが良いでしょう。
『例えば』
不要になった y を 値セット先の行位置用にカウントアップさせて
For i = 1 To ingYCnt
  tmp = Split(Worksheets("sheet1").Cells(i, 2).Value, ",")
  For k = 0 To UBound(tmp)
    y = y + 1
    Worksheets("sheet2").Cells(y, 1).Value = Worksheets("sheet1").Cells(i, 1).Value
    Worksheets("sheet2").Cells(y, 2).Value = tmp(k)
  Next k
Next i
とか書けます。


効率を考えれば tmp を Transpose してまとめて書き込んだほうが良いですし
Worksheets("sheet2")などをWithで括ったり変数に入れたりして、
など、改善の余地はありますが、
まずは理解できるところで止めておいても良いかもしれませんね。

>とりあえずのことはできました。
なら別に良いですが
>..Worksheets("Sheet1").UsedRange.Rows.Count
Sheet1のA:B列以外にデータがあればUsedRange.Rows.Countは多くなったりする可能性がありますから危ういですね。
無駄にLoopする事になります。


>For i = 0 To ingYCnt
>  y = i + 1
iをなぜ0から始めるのか、かつ y = i + 1 で毎回 +1 して i はLoopの中で使ってません。
1から始めて y の代わりに i を使えば良いです。


行挿入してコピーして貼り付け、よりも
上から順番に値をセットしていったほうが...続きを読む

QAPI関係の良い本しりませんか?

API関係の良い本しりませんか?
APIビューアにものってないようなことまで
書いてるような詳しいのがほしいのですが・・・・

Aベストアンサー

Windows API関係の本であれば、結構出ていると思いますよ。ただし、言語はVisual C++のものが多いので、使用する際にはVisual C++を解析品柄という形になる可能性は高いですが・・・

詳しいものはほとんどVisual C++もしくはC言語で書かれているものがほとんどだと思います。ただ、Visual Basicのものでも出ていたと思いますので、本屋さんにいって、探してはどうでしょうか?ヨドバシカメラとかサクラヤの書籍売り場でもおいてあったと思いますよ。
#すいません、書籍の名前は覚えていません。

ではでは☆

QAPI関数(DLL)の呼び出しにおいて、DLLの格納場所は?

お世話になります。
VB.NETでAPI関数を呼び出す場合にまず、API関数を格納しているDLLを宣言しなけれならないと下記URLにあります。
(http://www.atmarkit.co.jp/fdotnet/dotnettips/024w32api/w32api.html)

(a)DllImport属性を利用する方法
<System.Runtime.InteropServices.DllImport("DLL名")> _
Function API関数名(仮引数)
End Function
(b)Declareステートメントを利用する方法
Declare Function API関数名 Lib "DLL名" (仮引数)

そこで、質問なのですが、(a)、(b)どちらの方法で実現する場合においても、DLLの格納場所はC:\Windows\System32でないといけないのでしょうか?(実際にコーディングしてもSystem32フォルダにないとエラーになってしまいます。)
任意のフォルダにDLLを格納し、そこを参照できるようにできるのでしょうか?
また、一般常識としてDLLはSystem32フォルダに格納しておかないといけないものなのでしょうか?

以上、よろしくお願いいたします。

お世話になります。
VB.NETでAPI関数を呼び出す場合にまず、API関数を格納しているDLLを宣言しなけれならないと下記URLにあります。
(http://www.atmarkit.co.jp/fdotnet/dotnettips/024w32api/w32api.html)

(a)DllImport属性を利用する方法
<System.Runtime.InteropServices.DllImport("DLL名")> _
Function API関数名(仮引数)
End Function
(b)Declareステートメントを利用する方法
Declare Function API関数名 Lib "DLL名" (仮引数)

そこで、質問なのですが、(a)、(b)どちらの方法で実現する場合...続きを読む

Aベストアンサー

DLL名にパスを含んでいない場合は
1) EXEファイルのカレントフォルダ
2) Windowsのシステムフォルダ(Win9x系ならWindows\Sysytem・WinNT系ならWindows\System32)
3) Winddows\Systemフォルダ
4) Windowsフォルダ
5) 環境変数PATHの設定フォルダ
といった順番でDLLを探すと思います
WinNT系へインストールする際にフォルダの権限などが原因で独自のDLLをWindows\System32へ書き込み出来ないとか
アンインストールなどの機能を提供しない
などの要因によって DLL自体を実行ファイルと同じフォルダに置くこともありますよ

『DLLを必ずWindows\System32に置きなさい』といった規約はありません

QVBでWININET API

こんばんわ。VBでWININET APIを使用してIEのインターネットオプションの設定を変える方法はあるのでしょうか。APIを使わなくてもいい方法があるのでしたらそれでも構いません。インターネットオプションの設定が変えれればいいので。宜しくお願い致します。

Aベストアンサー

なるほどーそういうことですかー
勘違いしてました。
それならば大まかに予想がつきます。
レジストリエディタで
HKEY_CURRENT_USER
SoftWare
Microsoft
Internet Explorer
の中を操作してあげれば可能だと思います。

この中の情報は公開されてないと思うので、自分でインターネットオプションを変更しながら、どこがどのように変わるのかを調査する必要があると思います。

後はレジストリの変更を
VBの機能を使うなら SaveSetting
APIなら RegCreateKeyEx
で、かければよいと思います。


このカテゴリの人気Q&Aランキング

おすすめ情報