tagCANDY CGI VB2005用簡易 WIN32API リファレンス(ご協力依頼)
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ
VB2005用簡易 WIN32API リファレンス(ご協力依頼)
このスレッドはロックされています。記事の閲覧のみとなります。
元に戻る スレッド一覧へ 記事閲覧
このページ内の検索ができます。(AND 検索や OR 検索のような複数のキーワードによる検索はできません。)

VB2005用簡易 WIN32API リファレンス(ご協力依頼) [No.79の個別表示]
日時: 2008/02/03 11:45
名前: 花ちゃん

今、VB2005用の簡易 Win32 APIレファレンスを作成しているのですが、全部のAPIについて
作成するのも大変だしその必要もないかと思うので皆さんが、VB.NET で使っておられる
Win32 API 関数について教えて頂けないでしょうか?

現在収録している、API 関数は、下記のものです、下記以外に使っておられるようなもの
又、掲載しておいた方が良いと思われるような API 関数がありました、投稿の程お願い
致します。



AdjustTokenPrivileges    GetKeyState        SetClipboardViewer
AttachThreadInput      GetLastError        SetForegroundWindow
Beep             GetPixel          SetLayeredWindowAttributes
BitBlt           GetPrinter         SetPixelV
ChangeClipboardChain    GetPrivateProfileInt    SetPrinter
ChangeDisplaySettingsEx   GetPrivateProfileString  SetTextCharacterExtra
CloseClipboard       GetSystemMenu       SetWindowLong
ClosePrinter        GetSystemParametersInfo  SetWindowPos
CreateCaret         GetWindowLong       SetWindowRgn
CreateDC          GetWindowText       SetWindowText
CreateFont         GetWindowThreadProcessId   SHAppBarMessage
CreateRoundRectRgn     GlobalMemoryStatus     SHFileOperation
CreateSolidBrush      HideCaret         SHGetFileInfo
DeleteMenu         ImmGetCompositionString  SHInvokePrinterCommand
DeleteObject        ImmGetContext       ShowCaret
DestroyCaret        ImmGetConversionList    ShowWindow
DestroyIcon         ImmGetDefaultIMEWnd    StrFormatByteSize
DeviceCapabilities     ImmReleaseContext     StrFormatByteSize64A
DrawMenuBar         ImmSetConversionStatus   SystemParametersInfo
EnumDisplaySettings     IsClipboardFormatAvailable TextOut
ExitWindowsEx        IsIconic          URLDownloadToFile
ExtFloodFill        keybd_event        WritePrivateProfileString
FindClose          LookupPrivilegeValue    
FindFirstFile        MapVirtualKey    
FindWindow         mouse_event    
FindWindowEx        OleDraw    
GetClipboardData      OpenClipboard    
GetCurrentProcess      OpenPrinter    
GetCursorPos        OpenProcessToken    
GetDC            PlaySound    
GetDeviceCaps        RegisterWindowMessage    
GetDialogBaseUnits     ReleaseCapture    
GetDriveType        ReleaseDC    
GetForegroundWindow     SelectObject    
GetKeyboardLayout      SendMessage

上記以外では、下記のMicrosoft Win32 と Microsoft .NET Framework API との対応表も
掲載しており、関連する構造体、定数等も掲載しており、それらは、開発画面に簡単に
貼り付けできるようになっております。

Microsoft Win32 と Microsoft .NET Framework API
http://www.microsoft.com/japan/msdn/net/general/win32map.aspx

現在試作中の画面です。(画像をクリックすると元のサイズで見られます)
メンテ

Page: 1 |

Re: VB2005用簡易 WIN32API リファレンス(ご協力依頼)  (No.1) [スレッド一覧へ]
日時: 2008/02/07 22:09
名前: neptune

こんにちは

すごいの作ってますね。
パッと見て思ったのが、SendInputあたりはどうですか?使うのは面倒ですが。
keybd_eventより推奨されていることですし。
メンテ
Re: VB2005用簡易 WIN32API リファレンス(ご協力依頼)  (No.2) [スレッド一覧へ]
日時: 2008/02/08 00:41
名前: 花ちゃん

SendInput を.NET用に移行しようと思ったのですが、CopyMemory に変わるものが見当たらず
WEB で調べても、どれもキー操作1回につき関数を1回使用しているので、結局 SendInput
関数を使っても、keybd_event を使っても同じ使い方をしているようなので、SendInput を
使っても割り込みが入ってしまう可能性があるのではないかと思い何かうまい方法がないか
と思って思案しているところです。
何かいい方法ありませんか?

VB6.0 のサンプル
http://hanatyan.sakura.ne.jp/vbhlp/SendInput.htm

.NET のサンプル
http://hanatyan.sakura.ne.jp/vbnetbbs/wforum.cgi?mode=allread&no=3186#3203
http://www.pinvoke.net/default.aspx/user32.SendInput
メンテ
Re: VB2005用簡易 WIN32API リファレンス(ご協力依頼)  (No.3) [スレッド一覧へ]
日時: 2008/02/08 22:22
名前: neptune

こんにちは

思案済みだったんですね。私も知らないので悩んでみます。
メンテ
Re: VB2005用簡易 WIN32API リファレンス(ご協力依頼)  (No.4) [スレッド一覧へ]
日時: 2008/02/11 14:45
名前: neptune

こんにちは。

結構悩んでみたんですが、万年初心者の私には、.net frameworkとSDKの両方
を解読する必要があり、根が深いようです。

と、いう事で申し訳ないですが、SendInput に関しては一先ず中断という事にします。

なお、まだ、テストまでも行き着いてはないのですが、
感触としては何とかなりそうなんで、根性があるときにチャレンジしてみます。
メンテ
Re: VB2005用簡易 WIN32API リファレンス(ご協力依頼)  (No.5) [スレッド一覧へ]
日時: 2009/12/16 20:33
名前: 魔界の仮面弁士


古いスレッドに反応(既に解決済みかも知れませんけれども)。

> SendInput を.NET用に移行しようと思ったのですが、
このあたりの話ですね。
http://hanatyan.sakura.ne.jp/dotnet/mouse05.htm
http://hanatyan.sakura.ne.jp/vbhlp/SendInput.htm

> CopyMemory に変わるものが見当たらず
大抵は Marshal クラスで事足りるかと思います。

ただ、SendInput に使う共用体の話であれば、メモリコピーは不要で、
 <StructLayout(LayoutKind.Explicit)> _
 Private Structure INPUT
  <FieldOffset(0)> Public type As Integer
  <FieldOffset(4)> Public mi As MOUSEINPUT
  <FieldOffset(4)> Public ki As KEYBDINPUT
  <FieldOffset(4)> Public hi As HARDWAREINPUT
 End Structure
のようにオフセット位置を重ねて配置するか、あるいは、
 <StructLayout(LayoutKind.Sequential, Size:=28)> _
 Private Structure INPUT
  Public type As Integer
  Public ki As KEYBDINPUT
 End Structure
のようにして、構造体をキーボード専用/マウス専用にすることで対応できます。

API の部分は、
 Private Declare Function SendInput Lib "user32" _
  (ByVal nInputs As Integer, _
   ByVal pInputs() As INPUT, _
   ByVal cbsize As Integer) As Integer
に対して、
 SendInput(arrayINPUT.Length, arrayINPUT, Marshal.SizeOf(GetType(INPUT)))
という感じで。


> '少しは使い易いように関数化してみました。
> Private Sub sKeyEventSet(nInput As Long, _
配列で渡す代わりに、処理をクラス化して、
 Dim foo As New SendInputHelper()
 foo.PressKey(Keys.Home)
 foo.ReleaseKey(Keys.Home)
 foo.PressKey(Keys.ShiftKey)
 foo.PressKey(Keys.End)
 foo.ReleaseKey(Keys.End)
 foo.ReleaseKey(Keys.ShiftKey)
 foo.SendStroke()
のように使えるようにすると、利用側が分かりやすくなるかも。
メンテ
Re: VB2005用簡易 WIN32API リファレンス(ご協力依頼)  (No.6) [スレッド一覧へ]
日時: 2009/12/16 22:18
名前: 花ちゃん



>古いスレッドに反応(既に解決済みかも知れませんけれども)。

いいえ、特に必要としない事もあって、未解決のままです。

http://hanatyan.sakura.ne.jp/vbhlp/SendInput.htm
上記の

    inputevents(Count).dwType = INPUT_KEYBOARD
    CopyMemory inputevents(Count).xi(0), keyevent, Len(keyevent)
  Next Count
  Call SendInput(nInput, inputevents(0), Len(inputevents(0)))
End Sub
この辺の処理につまづいてしまって。
SendInput(1, inputevents, Marshal.SizeOf(inputevents)) のような使い方をしているは
見かけたのですが、これでは、割り込みが発生してしまうので、SendInput 関数を使う意味が
無いと思い、そのような使い方を他の方もしているので、他の方法がないのかなと思い、
当時はそれで、そのままになっていたのです。

ハードルが高そうですが、暇ができたら再挑戦してみます。
メンテ
Re: VB2005用簡易 WIN32API リファレンス(ご協力依頼)  (No.7) [スレッド一覧へ]
日時: 2009/12/17 13:05
名前: 魔界の仮面弁士


共用体は、StructLayoutAttribute で Explicit を指定するだけで
作れますので、VB6 のようにメモリコピーで調整する必要がありません。

実際に試してみましたが、単純に
 Dim arrayINPUT(max) As INPUT
 For i As Integer = 0 To max
  arrayINPUT(i).dwType = INPUT_KEYBOARD
  With arrayINPUT(i).ki
   .wVk = 〜
   .wScan = 〜
   .dwFlags = 〜
   .time = 0
   .dwExtraInfo = IntPtr.Zero
  End With
 Next
 SendInput(arrayINPUT.Length, arrayINPUT, Marshal.SizeOf(GetType(INPUT)))
とするだけで動作しました。
メンテ
Re: VB2005用簡易 WIN32API リファレンス(ご協力依頼)  (No.8) [スレッド一覧へ]
日時: 2009/12/17 18:41
名前: 花ちゃん


動作確認までして頂きありがとうございます。
おかげさまで、私にも動作確認する事ができました。
メンテ
Re: VB2005用簡易 WIN32API リファレンス(ご協力依頼)  (No.9) [スレッド一覧へ]
日時: 2010/01/20 19:42
名前: 花ちゃん


長らくほったらかしたままになっていたのですが、ようやく試験的に使って頂けるようになりましたので、自作(駄作)フリーソフト集の方に掲載しました。

  http://hanatyan.sakura.ne.jp/freesoft/win32api.htm

引き続き、API関数の追加情報やバグ・間違い等のフィードバックをお願いします。
メンテ
Re: VB2005用簡易 WIN32API リファレンス(ご協力依頼)  (No.10) [スレッド一覧へ]
日時: 2010/01/26 12:19
名前: ひとし


こんにちは、はじめまして。

いつも、掲載されているサンプルにお世話になっております。

サンプル投稿用掲示板の「キーボード入力の自動化(SendInput 関数使用例) (VB.NET)」にて
一カ所問題がありそうな箇所がありましたので報告さしていただきます。

問題と思われる個所

・SedKeyInput処理ないのスキャンコード指定処理

Private Function SedKeyInput(ByVal wkey() As keyEvents) As Integer

  (略)

  .wScan = CShort(MapVirtualKey(wkey(i).kFrg, 0))    'スキャンコードを指定
  (略)

MapVirtualKeyの第一引数が、「wkey(i).kFrg」となっておりますが、
wkey(i).kCodeではないでしょうか?


kFrgはキーコードでなく、キーの動作を指定しているため、
正しいスキャンコードが設定されないと思われます。

キーコードを指定するのみで、基本的にキー入力情報の送信を行えると思いますが、
DirectInputを用いて、キー入力情報をフェッチしているソフトの場合、スキャンコードが入っていないと、
キー入力情報の検出が行えないと思います。

お手数ですが、時間のある時にでもご確認お願いします。

(こういった内容の報告どこから、ご連絡してよいものかわかりませんでしたので、雑談掲示板にて失礼させていただきます。
もし、問題があるようでしたら削除お願いします)
メンテ
Re: VB2005用簡易 WIN32API リファレンス(ご協力依頼)  (No.11) [スレッド一覧へ]
日時: 2010/01/26 14:53
名前: 花ちゃん



>>10

>.wScan = CShort(MapVirtualKey(wkey(i).kFrg, 0))    'スキャンコードを指定

ありがとうございます。
変数名を変えた時にコピペ間違いをしてしまったようですね。
動かなかったら気が付いていたのですが、動いてしまったものだからそのままに。

元の方は正しいので。
http://www.hanatyan.sakura.ne.jp/vbhlp/SendInput.htm
http://www.hanatyan.sakura.ne.jp/vbhlp/specialkey.htm
メンテ

Page: 1 |